739 lines
No EOL
48 KiB
PHP
739 lines
No EOL
48 KiB
PHP
@extends('layouts.app')
|
|
|
|
@push('inlinescripts')
|
|
<script>
|
|
window.InitialState.Domains = @json($domains);
|
|
window.InitialState.User = @json(Auth::user());
|
|
window.InitialState.IsSiteAdmin = @json(Auth::user()->hasRole('admin'));
|
|
</script>
|
|
@endpush
|
|
|
|
@section('content')
|
|
<div id='main'>
|
|
<b-container>
|
|
<b-row>
|
|
<b-col class='domains' sm="4">
|
|
<!-- domains -->
|
|
<b-list-group>
|
|
<b-list-group-item button variant='primary' @click='active_domain = null' :active='active_domain == null'><i class="fas fa-home"></i> Basic settings </b-list-group-item>
|
|
</b-list-group>
|
|
<b-list-group class='mt-3'>
|
|
<b-list-group-item button @click='select_domain(d)' v-for='d in domains' :active='d == active_domain'>@{{ d.domain }}</b-list-group-item>
|
|
</b-list-group>
|
|
</b-col>
|
|
<b-col class='operations' md="8">
|
|
<b-card no-body v-if='active_domain != null'>
|
|
<b-tabs card>
|
|
<b-tab title="Aliases">
|
|
<div>
|
|
<b-button class='w-100' variant='primary' v-b-toggle="'collapse-alias-new'"><i class="fas fa-plus"></i> Create new alias</b-button>
|
|
</div>
|
|
<b-collapse :accordion="'aliases-'+active_domain.domain" :id="'collapse-alias-new'">
|
|
<b-card>
|
|
<b-container>
|
|
<b-row class='mt-3'>
|
|
<b-col cols=3>
|
|
Source address
|
|
</b-col>
|
|
<b-col cols=6>
|
|
<b-form-input size='sm'
|
|
v-model='newalias.source'
|
|
:state='newalias.validators.source'
|
|
@change='alias_check_newsource()'
|
|
@keyup='alias_check_newsource()'
|
|
type='text'></b-form-input>
|
|
</b-col>
|
|
<b-col cols=3> @@{{active_domain.domain}}</b-col>
|
|
</b-row>
|
|
<b-row class='mt-3'>
|
|
<b-col cols=4>Destination</b-col>
|
|
<b-col cols=4>Comment</b-col>
|
|
<b-col cols=2>Enabled</b-col>
|
|
<b-col cols=2></b-col>
|
|
</b-row>
|
|
<b-row class='mt-2'>
|
|
<b-col cols=4>
|
|
<b-form-input
|
|
size='sm'
|
|
v-model='newalias.destination'
|
|
type='text'></b-form-input>
|
|
</b-col>
|
|
<b-col cols=4>
|
|
<b-form-input
|
|
size='sm'
|
|
v-model='newalias.comment'
|
|
type='text'></b-form-input>
|
|
</b-col>
|
|
<b-col cols=2>
|
|
<b-form-checkbox v-model='newalias.enabled'></b-form-checkbox>
|
|
</b-col>
|
|
</b-row>
|
|
<b-row class='mt-2'>
|
|
<b-col cols=10></b-col>
|
|
<b-col cols=2>
|
|
<b-button
|
|
variant='primary'
|
|
:disabled='!(newalias.validators.source)'
|
|
@click='alias_create($event)'
|
|
><i class='fas fa-plus'></i></b-button>
|
|
</b-col>
|
|
</b-row>
|
|
</b-container>
|
|
</b-card>
|
|
</b-collapse>
|
|
<br>
|
|
<b-container class='border-top' no-body v-for='a in aliases'>
|
|
<b-row class='mt-3 mb-3' v-b-toggle="'collapse-alias-'+a.source">
|
|
<a href='#' onclick='return false;' class='when-opened'>
|
|
<i style='vertical-align: middle; font-size: 125%;' class='fas fa-caret-down'></i>
|
|
@{{a.source}}@@{{active_domain.domain}}
|
|
</a>
|
|
<a href='#' onclick='return false;' class='when-closed'>
|
|
<i style='vertical-align: middle; font-size: 125%;' class='fas fa-caret-right'></i>
|
|
@{{a.source}}@@{{active_domain.domain}}
|
|
</a>
|
|
</b-row>
|
|
<b-collapse :accordion="'aliases-'+active_domain.domain" :id="'collapse-alias-'+a.source">
|
|
<b-row class='mb-3'>
|
|
<b-container>
|
|
<b-row>
|
|
<b-col cols=4>Destination</b-col>
|
|
<b-col cols=4>Comment</b-col>
|
|
<b-col cols=2>Enabled</b-col>
|
|
<b-col cols=2></b-col>
|
|
</b-row>
|
|
<b-row v-for='d in a.dest' class='mt-1'>
|
|
<b-col cols=4>
|
|
<b-form-input
|
|
size='sm'
|
|
:class='{ "border-info": d.changed.dest, "text-info": d.changed.dest}'
|
|
@change='alias_dest_changed(d,"dest")'
|
|
@keyup='alias_dest_changed(d,"dest")'
|
|
v-model='d.destination'
|
|
type='text'></b-form-input>
|
|
</b-col>
|
|
<b-col cols=4>
|
|
<b-form-input
|
|
size='sm'
|
|
:class='{ "border-info": d.changed.comment, "text-info": d.changed.comment}'
|
|
@change='alias_dest_changed(d,"comment")'
|
|
@keyup='alias_dest_changed(d,"comment")'
|
|
v-model='d.comment'
|
|
type='text'></b-form-input>
|
|
</b-col>
|
|
<b-col cols=2>
|
|
<b-form-checkbox
|
|
:class='{ "checkbox-info": d.changed.enabled}'
|
|
@change='alias_dest_changed(d,"enabled")'
|
|
v-model='d.enabled'
|
|
></b-form-checkbox>
|
|
</b-col>
|
|
<b-col cols=2>
|
|
<b-button size='sm' variant='primary' :disabled='!(d.changed.dest || d.changed.comment || d.changed.enabled)'
|
|
@click='alias_update_dest(a,d,$event)'><i class='fas fa-save'></i></b-button>
|
|
<b-button size='sm' variant='danger' v-b-modal="'delete-al-modal-'+d.id"><i class='fas fa-trash'></i></b-button>
|
|
</b-col>
|
|
<b-modal
|
|
:id="'delete-al-modal-'+d.id"
|
|
title="Confirm Delete"
|
|
@ok="alias_del_dest(a,d,$event)"
|
|
>Are you sure you want to delete the destination <strong>@{{d.destination}}</strong> for alias <strong>@{{a.source}}@@{{active_domain.domain}}</strong>?
|
|
<template v-slot:modal-footer="{ ok, cancel, hide }">
|
|
<b-button @click='cancel()'>Cancel</b-button>
|
|
<b-button variant='danger' @click='ok()'>Delete</b-button>
|
|
</template>
|
|
</b-modal>
|
|
</b-row>
|
|
<b-row class='mt-1'>
|
|
<b-col cols=4>
|
|
<b-form-input
|
|
size='sm'
|
|
v-model='a.newdest.destination'
|
|
type='text'></b-form-input>
|
|
</b-col>
|
|
<b-col cols=4>
|
|
<b-form-input
|
|
size='sm'
|
|
v-model='a.newdest.comment'
|
|
type='text'></b-form-input>
|
|
</b-col>
|
|
<b-col cols=2>
|
|
<b-form-checkbox v-model='a.newdest.enabled'></b-form-checkbox>
|
|
</b-col>
|
|
<b-col cols=2>
|
|
<b-button size='sm' variant='primary' :disabled='a.newdest.destination == ""' @click='alias_add_dest(a,$event)'><i class='fas fa-plus'></i></b-vutton>
|
|
</b-col>
|
|
</b-row>
|
|
</b-container>
|
|
</b-row>
|
|
</b-collapse>
|
|
</b-container>
|
|
</b-tab>
|
|
<b-tab title="Accounts">
|
|
<div>
|
|
<b-button class='w-100' variant='primary' v-b-toggle="'collapse-account-new'"><i class="fas fa-plus"></i> Create new account</b-button>
|
|
</div>
|
|
<b-collapse :accordion="'accounts-'+active_domain.domain" :id="'collapse-account-new'">
|
|
<b-card>
|
|
<b-container>
|
|
<b-row>
|
|
<b-col>Username</b-col>
|
|
<b-col>
|
|
<b-form-input
|
|
v-model='newaccount.username'
|
|
:state='newaccount.validators.username'
|
|
@change='account_check_newusername()'
|
|
@keyup='account_check_newusername()'
|
|
type='text'></b-form-input>
|
|
</b-col>
|
|
<b-col></b-col>
|
|
</b-row>
|
|
<b-row><b-col> </b-col></b-row>
|
|
<b-row>
|
|
<b-col>Options</b-col>
|
|
<b-col>
|
|
<b-form-checkbox v-model='newaccount.enabled'>Enabled</b-form-checkbox>
|
|
<b-form-checkbox v-model='newaccount.sendonly'>Send only</b-form-checkbox>
|
|
</b-col>
|
|
<b-col></b-col>
|
|
</b-row>
|
|
<b-row><b-col> </b-col></b-row>
|
|
<b-row>
|
|
<b-col>Quota</b-col>
|
|
<b-col>
|
|
<b-form-input type='number' v-model='newaccount.quota'>Quota</b-form-input>
|
|
</b-col>
|
|
<b-col> MB</b-col>
|
|
</b-row>
|
|
<b-row><b-col> </b-col></b-row>
|
|
<b-row>
|
|
<b-col>New password</b-col>
|
|
<b-col>
|
|
<b-form-input
|
|
type='password'
|
|
v-model='newaccount.pass1'
|
|
@keyup="account_check_newpassword()"
|
|
:state='newaccount.validators.pass1'
|
|
autocomplete='off'></b-form-input>
|
|
</b-col>
|
|
<b-col> </b-col>
|
|
</b-row>
|
|
<b-row>
|
|
<b-col>Confirm password</b-col>
|
|
<b-col>
|
|
<b-form-input
|
|
type='password'
|
|
v-model='newaccount.pass2'
|
|
@keyup="account_check_newpassword()"
|
|
:state='newaccount.validators.pass2'
|
|
autocomplete='off'></b-form-input>
|
|
</b-col>
|
|
<b-col> </b-col>
|
|
</b-row>
|
|
<b-row>
|
|
<b-col>
|
|
<b-button
|
|
variant='primary'
|
|
:disabled='!(newaccount.validators.username && newaccount.validators.pass1 && newaccount.validators.pass2)'
|
|
@click='create_account'
|
|
>Add</b-button>
|
|
</b-col>
|
|
</b-row>
|
|
</b-container>
|
|
</b-card>
|
|
</b-collapse>
|
|
<br>
|
|
<b-container class='border-top' no-body v-for='a in accounts'>
|
|
<b-row class='mt-3 mb-3' v-b-toggle="'collapse-account-'+a.id">
|
|
<a href='#' onclick='return false;' class='when-opened'>
|
|
<i style='vertical-align: middle; font-size: 125%;' class='fas fa-caret-down'></i>
|
|
@{{a.username}}@@{{a.domain}}
|
|
</a>
|
|
<a href='#' onclick='return false;' class='when-closed'>
|
|
<i style='vertical-align: middle; font-size: 125%;' class='fas fa-caret-right'></i>
|
|
@{{a.username}}@@{{a.domain}}
|
|
</a>
|
|
</b-row>
|
|
<b-collapse :accordion="'accounts-'+active_domain.domain" :id="'collapse-account-'+a.id">
|
|
<b-row class='mt-3'>
|
|
<b-container>
|
|
<b-row>
|
|
<b-col>Username</b-col>
|
|
<b-col>
|
|
<b-form-input
|
|
v-model='a.newusername'
|
|
:disabled='!a.changeusername'
|
|
:state='a.validators.username'
|
|
@change='account_check_username(a)'
|
|
@keyup='account_check_username(a)'
|
|
type='text'></b-form-input>
|
|
</b-col>
|
|
</b-row>
|
|
<b-row><b-col> </b-col></b-row>
|
|
<b-row>
|
|
<b-col>Options</b-col>
|
|
<b-col>
|
|
<b-form-checkbox v-model='a.enabled'>Enabled</b-form-checkbox>
|
|
<b-form-checkbox v-model='a.sendonly'>Send only</b-form-checkbox>
|
|
</b-col>
|
|
<b-col></b-col>
|
|
</b-row>
|
|
<b-row><b-col> </b-col></b-row>
|
|
<b-row>
|
|
<b-col>Quota</b-col>
|
|
<b-col>
|
|
<b-form-input type='number' v-model='a.quota'>Quota</b-form-input>
|
|
</b-col>
|
|
<b-col> MB</b-col>
|
|
</b-row>
|
|
<b-row><b-col> </b-col></b-row>
|
|
<b-row>
|
|
<b-col>New password (optional)</b-col>
|
|
<b-col>
|
|
<b-form-input
|
|
type='password'
|
|
v-model='a.pass1'
|
|
@keyup="account_check_password(a)"
|
|
@change="account_check_password(a)"
|
|
:state='a.validators.pass1'
|
|
autocomplete='off'></b-form-input>
|
|
</b-col>
|
|
<b-col> </b-col>
|
|
</b-row>
|
|
<b-row>
|
|
<b-col>Confirm password</b-col>
|
|
<b-col>
|
|
<b-form-input
|
|
type='password'
|
|
v-model='a.pass2'
|
|
@keyup="account_check_password(a)"
|
|
@change="account_check_password(a)"
|
|
:state='a.validators.pass2'
|
|
autocomplete='off'></b-form-input>
|
|
</b-col>
|
|
<b-col> </b-col>
|
|
</b-row>
|
|
<b-row>
|
|
<b-col>
|
|
<b-button
|
|
variant='primary'
|
|
:disabled='!((a.validators.username !== false) && (a.validators.pass1 !== false) && (a.validators.pass2 !== false))'
|
|
@click='account_update(a,$event)'>Save</b-button>
|
|
</b-col>
|
|
<b-col></b-col>
|
|
<b-col>
|
|
<b-button
|
|
variant='danger'
|
|
v-b-modal="'delete-acc-modal-'+a.id"><i class='fas fa-trash'></i></b-button>
|
|
</b-col>
|
|
|
|
</b-row>
|
|
</b-container>
|
|
</b-row>
|
|
</b-collapse>
|
|
<b-modal
|
|
:id="'delete-acc-modal-'+a.id"
|
|
title="Confirm Delete"
|
|
@ok="account_delete(a,$event)"
|
|
|
|
>Are you sure you want to delete the account <strong>@{{a.username}}@@{{a.domain}}</strong>?
|
|
<template v-slot:modal-footer="{ ok, cancel, hide }">
|
|
<b-button @click='cancel()'>Cancel</b-button>
|
|
<b-button variant='danger' @click='ok()'>Delete</b-button>
|
|
</template>
|
|
</b-modal>
|
|
</b-container>
|
|
</b-tab>
|
|
<b-tab title="Domain admins">
|
|
<b-container >
|
|
<b-row v-for='a in admins' class='border-bottom mt-2 pb-2'>
|
|
<b-col>@{{a.name}}</b-col>
|
|
<b-col>@{{a.email}}</b-col>
|
|
<b-col>
|
|
<b-form-select v-if='(isSiteAdmin || domainRole == "own") && a.id != user.id'
|
|
size='sm'
|
|
:class='{ "border-info": a.changed.role, "text-info": a.changed.role}'
|
|
v-model='a.pivot.role'
|
|
@change='a.changed.role = true'
|
|
:options="{'own':'Owner','edit': 'Manage','view': 'View',}"
|
|
></b-form-select>
|
|
<strong v-else>@{{{'own':'Owner','edit': 'Manager','view': 'Viewer',}[a.pivot.role]}}</strong>
|
|
</b-col>
|
|
<b-col>
|
|
<b-button v-if='(isSiteAdmin || domainRole == "own") && a.id != user.id' @click='admin_update(a,$event)' size='sm' variant='primary':disabled='a.changed.role == false'><i class='fas fa-pen'></i></b-button>
|
|
<b-button v-if='(isSiteAdmin || domainRole == "own") && a.id != user.id' v-b-modal="'delete-adm-modal-'+a.id"size='sm' variant='danger'><i class='fas fa-trash'></i></b-button>
|
|
</b-col>
|
|
<b-modal
|
|
:id="'delete-adm-modal-'+a.id"
|
|
title="Confirm Delete"
|
|
@ok="admin_del(a,$event)"
|
|
>Are you sure you want to revoke role <strong>@{{{'own':'Owner','edit': 'Manager','view': 'Viewer',}[a.pivot.role]}}</strong> for user <strong>@{{a.name}}</strong>?
|
|
<template v-slot:modal-footer="{ ok, cancel, hide }">
|
|
<b-button @click='cancel()'>Cancel</b-button>
|
|
<b-button variant='danger' @click='ok()'>Delete</b-button>
|
|
</template>
|
|
</b-modal>
|
|
</b-row>
|
|
<b-row class='mt-2' v-if='(isSiteAdmin || domainRole == "own")'>
|
|
<b-col>Add admin</b-col>
|
|
<b-col>
|
|
<cool-select size='sm' v-model="newadmin.user" :placeholder="newadmin.user ? '' : 'Select user'" :items="availableUsers" item-value='id' item-text='name'/>
|
|
</cool-select>
|
|
</b-col>
|
|
<b-col>
|
|
<b-form-select size='sm' v-model='newadmin.role' :options="{'own':'Owner','edit': 'Manage','view': 'View',}"></b-form-select>
|
|
</b-col>
|
|
<b-col>
|
|
<b-button size='sm' variant='primary' :disabled='newadmin.user == null' @click='admin_add($event)'><i class='fas fa-plus'></i></b-button>
|
|
</b-col>
|
|
</b-row>
|
|
</b-container>
|
|
</b-tab>
|
|
<b-tab v-if='isSiteAdmin' title='Operations'>
|
|
<b-container>
|
|
<b-row>
|
|
<b-col cols='4'>
|
|
Rename domain to:
|
|
</b-col>
|
|
<b-col cols='4'>
|
|
<b-form-input size='sm'
|
|
type='text'
|
|
:state='active_domain.validators.name'
|
|
v-model='active_domain.newname'
|
|
@change='active_domain.changed.name = true; active_domain.validators.name = !domain_exists(active_domain.newname)'
|
|
@keyup='active_domain.changed.name = true; active_domain.validators.name = !domain_exists(active_domain.newname)'
|
|
autocomplete='off'></b-form-input>
|
|
</b-col>
|
|
<b-col cols='4'>
|
|
<b-button size='sm' variant='primary' :disabled='!(active_domain.changed.name && active_domain.validators.name)' @click='domain_rename($event)'><i class='fas fa-save'></i></b-button>
|
|
</b-col>
|
|
</b-row>
|
|
<b-row class='mt-3'>
|
|
<b-col cols='8'>
|
|
Delete this domain
|
|
</b-col>
|
|
<b-col cols='4'>
|
|
<b-button v-b-modal="'delete-domain-modal'"size='sm' variant='danger'><i class='fas fa-trash'></i></b-button>
|
|
</b-col>
|
|
<b-modal
|
|
:id="'delete-domain-modal'"
|
|
title="Confirm Delete of domain"
|
|
@ok="domain_delete($event)"
|
|
>Are you sure you want to completele delete the domain <strong>@{{active_domain.domain}}</strong>?<br>
|
|
This will delete all aliases accounts and cannot be recovered.
|
|
<template v-slot:modal-footer="{ ok, cancel, hide }">
|
|
<b-button @click='cancel()'>Cancel</b-button>
|
|
<b-button variant='danger' @click='ok()'>Delete</b-button>
|
|
</template>
|
|
</b-modal>
|
|
</b-row>
|
|
</b-container>
|
|
</b-tab>
|
|
</b-tabs>
|
|
</b-card>
|
|
<b-card no-body v-if='active_domain == null'>
|
|
<b-tabs card>
|
|
<b-tab title = 'Welcome'>
|
|
On the left side you can see the domains you can manage.<br> Administrators can also add new domains and configure additional security settings in the <strong>Basic settings</strong> tab.
|
|
</b-tab>
|
|
<b-tab title="Add new domain" v-if='isSiteAdmin' >
|
|
<b-form-group
|
|
id="input-group-1"
|
|
label="Domain name"
|
|
label-for="input-1"
|
|
description="Enter the fully qualified domain name here"
|
|
>
|
|
<b-form-input
|
|
id="input-1"
|
|
v-model="create_domain_name"
|
|
type="text"
|
|
required
|
|
placeholder="Enter domain name"
|
|
:state="create_domain_name == ''?null:(domain_exists(create_domain_name)?false:true)"
|
|
></b-form-input>
|
|
</b-form-group>
|
|
<b-button ref='createDomainButton' @click="create_domain" variant="primary" :disabled='create_domain_name == "" || domain_exists(create_domain_name)'>Add domain</b-button>
|
|
</b-tab>
|
|
<b-tab title="System Accounts" v-if='isSiteAdmin' >
|
|
<div>
|
|
<b-button class='w-100' variant='primary' v-b-toggle="'collapse-siteaccount-new'"><i class="fas fa-plus"></i> Create new system account</b-button>
|
|
</div>
|
|
<b-collapse :accordion="'siteaccounts'" :id="'collapse-siteaccount-new'">
|
|
<b-card>
|
|
<b-container>
|
|
<b-row>
|
|
<b-col>Username</b-col>
|
|
<b-col>
|
|
<b-form-input
|
|
v-model='newsiteaccount.username'
|
|
:state='newsiteaccount.validators.username'
|
|
@change='siteaccount_check_newusername()'
|
|
@keyup='siteaccount_check_newusername()'
|
|
type='text'></b-form-input>
|
|
</b-col>
|
|
<b-col></b-col>
|
|
</b-row>
|
|
<b-row><b-col> </b-col></b-row>
|
|
<b-row>
|
|
<b-col>Options</b-col>
|
|
<b-col>
|
|
<b-form-checkbox v-model='newsiteaccount.enabled'>Enabled</b-form-checkbox>
|
|
<b-form-checkbox v-model='newsiteaccount.sendonly'>Send only</b-form-checkbox>
|
|
</b-col>
|
|
<b-col></b-col>
|
|
</b-row>
|
|
<b-row><b-col> </b-col></b-row>
|
|
<b-row>
|
|
<b-col>Quota</b-col>
|
|
<b-col>
|
|
<b-form-input type='number' v-model='newsiteaccount.quota'>Quota</b-form-input>
|
|
</b-col>
|
|
<b-col> MB</b-col>
|
|
</b-row>
|
|
<b-row><b-col> </b-col></b-row>
|
|
<b-row>
|
|
<b-col>New password</b-col>
|
|
<b-col>
|
|
<b-form-input
|
|
type='password'
|
|
v-model='newsiteaccount.pass1'
|
|
@keyup="siteaccount_check_newpassword()"
|
|
:state='newsiteaccount.validators.pass1'
|
|
autocomplete='off'></b-form-input>
|
|
</b-col>
|
|
<b-col> </b-col>
|
|
</b-row>
|
|
<b-row>
|
|
<b-col>Confirm password</b-col>
|
|
<b-col>
|
|
<b-form-input
|
|
type='password'
|
|
v-model='newsiteaccount.pass2'
|
|
@keyup="siteaccount_check_newpassword()"
|
|
:state='newsiteaccount.validators.pass2'
|
|
autocomplete='off'></b-form-input>
|
|
</b-col>
|
|
<b-col> </b-col>
|
|
</b-row>
|
|
<b-row>
|
|
<b-col>
|
|
<b-button
|
|
variant='primary'
|
|
:disabled='!(newsiteaccount.validators.username && newsiteaccount.validators.pass1 && newsiteaccount.validators.pass2)'
|
|
@click='siteaccount_create'
|
|
>Add</b-button>
|
|
</b-col>
|
|
</b-row>
|
|
</b-container>
|
|
</b-card>
|
|
</b-collapse>
|
|
<br>
|
|
<b-container class='border-top' no-body v-for='a in siteaccounts'>
|
|
<b-row class='mt-3 mb-3' v-b-toggle="'collapse-siteaccount-'+a.id">
|
|
<a href='#' onclick='return false;' class='when-opened'>
|
|
<i style='vertical-align: middle; font-size: 125%;' class='fas fa-caret-down'></i>
|
|
@{{a.username}}<i class='fas fa-globe'></i>
|
|
</a>
|
|
<a href='#' onclick='return false;' class='when-closed'>
|
|
<i style='vertical-align: middle; font-size: 125%;' class='fas fa-caret-down'></i>
|
|
@{{a.username}} <i class='fas fa-globe'></i>
|
|
</a>
|
|
</b-row>
|
|
<b-collapse :accordion="'siteaccounts'" :id="'collapse-siteaccount-'+a.id">
|
|
<b-row class='mt-3'>
|
|
<b-container>
|
|
<b-row>
|
|
<b-col>Username</b-col>
|
|
<b-col>
|
|
<b-form-input
|
|
v-model='a.newusername'
|
|
:disabled='!a.changeusername'
|
|
:state='a.validators.username'
|
|
@change='siteaccount_check_username(a)'
|
|
@keyup='siteaccount_check_username(a)'
|
|
type='text'></b-form-input>
|
|
</b-col>
|
|
</b-row>
|
|
<b-row><b-col> </b-col></b-row>
|
|
<b-row>
|
|
<b-col>Options</b-col>
|
|
<b-col>
|
|
<b-form-checkbox v-model='a.enabled'>Enabled</b-form-checkbox>
|
|
<b-form-checkbox v-model='a.sendonly'>Send only</b-form-checkbox>
|
|
</b-col>
|
|
<b-col></b-col>
|
|
</b-row>
|
|
<b-row><b-col> </b-col></b-row>
|
|
<b-row>
|
|
<b-col>Quota</b-col>
|
|
<b-col>
|
|
<b-form-input type='number' v-model='a.quota'>Quota</b-form-input>
|
|
</b-col>
|
|
<b-col> MB</b-col>
|
|
</b-row>
|
|
<b-row><b-col> </b-col></b-row>
|
|
<b-row>
|
|
<b-col>New password (optional)</b-col>
|
|
<b-col>
|
|
<b-form-input
|
|
type='password'
|
|
v-model='a.pass1'
|
|
@keyup="siteaccount_check_password(a)"
|
|
@change="siteaccount_check_password(a)"
|
|
:state='a.validators.pass1'
|
|
autocomplete='off'></b-form-input>
|
|
</b-col>
|
|
<b-col> </b-col>
|
|
</b-row>
|
|
<b-row>
|
|
<b-col>Confirm password</b-col>
|
|
<b-col>
|
|
<b-form-input
|
|
type='password'
|
|
v-model='a.pass2'
|
|
@keyup="siteaccount_check_password(a)"
|
|
@change="siteaccount_check_password(a)"
|
|
:state='a.validators.pass2'
|
|
autocomplete='off'></b-form-input>
|
|
</b-col>
|
|
<b-col> </b-col>
|
|
</b-row>
|
|
<b-row>
|
|
<b-col>
|
|
<b-button
|
|
variant='primary'
|
|
:disabled='!((a.validators.username !== false) && (a.validators.pass1 !== false) && (a.validators.pass2 !== false))'
|
|
@click='siteaccount_update(a,$event)'>Save</b-button>
|
|
</b-col>
|
|
<b-col></b-col>
|
|
<b-col>
|
|
<b-button
|
|
variant='danger'
|
|
v-b-modal="'delete-acc-modal-'+a.id"><i class='fas fa-trash'></i></b-button>
|
|
</b-col>
|
|
|
|
</b-row>
|
|
</b-container>
|
|
</b-row>
|
|
</b-collapse>
|
|
<b-modal
|
|
:id="'delete-acc-modal-'+a.id"
|
|
title="Confirm Delete"
|
|
@ok="siteaccount_delete_(a,$event)"
|
|
|
|
>Are you sure you want to delete the account <strong>@{{a.username}}@@{{a.domain}}</strong>?
|
|
<template v-slot:modal-footer="{ ok, cancel, hide }">
|
|
<b-button @click='cancel()'>Cancel</b-button>
|
|
<b-button variant='danger' @click='ok()'>Delete</b-button>
|
|
</template>
|
|
</b-modal>
|
|
</b-container>
|
|
</b-tab>
|
|
<b-tab title="TLS Policies" v-if='isSiteAdmin' @click='tls_list'>
|
|
<div>
|
|
<b-button class='w-100' variant='primary' v-b-toggle="'collapse-tlspolicy-new'"><i class="fas fa-plus"></i>Add TLS policy</b-button>
|
|
</div>
|
|
<b-collapse :accordion="'tlspolicies'" :id="'collapse-tlspolicy-new'">
|
|
<b-card>
|
|
<b-container>
|
|
<b-row class='mt-1'>
|
|
<b-col cols='5'>Domain</b-col>
|
|
<b-col cols='7'>
|
|
<b-form-input v-model="newtls.domain" ></b-form-input>
|
|
</b-col>
|
|
</b-row>
|
|
<b-row class='mt-3'>
|
|
<b-col cols='5'>TLS Policy</b-col>
|
|
<b-col cols='7'>
|
|
<b-form-select v-model='newtls.policy' >
|
|
<b-form-select-option value='none' default>None</b-form-select-option>
|
|
<b-form-select-option value='may'>May</b-form-select-option>
|
|
<b-form-select-option value='encrypt'>Encrypt</b-form-select-option>
|
|
<b-form-select-option value='dane'>Dane</b-form-select-option>
|
|
<b-form-select-option value='dane-only'>Dane-Only</b-form-select-option>
|
|
<b-form-select-option value='fingerprint'>Fingerprint</b-form-select-option>
|
|
<b-form-select-option value='verify'>Verify</b-form-select-option>
|
|
<b-form-select-option value='secure'>Secure</b-form-select-option>
|
|
</b-form-select>
|
|
</b-col>
|
|
</b-row>
|
|
<b-row class='mt-3'>
|
|
<b-col cols='5'>Optional parameters</b-col>
|
|
<b-col cols='7'>
|
|
<b-form-input v-model="newtls.params" placeholder="Enter parameters here"></b-form-input>
|
|
</b-col>
|
|
</b-row>
|
|
<b-row class='mt-3'>
|
|
<b-col cols='5'></b-col>
|
|
<b-col cols='7'>
|
|
<b-button variant='primary' ref='bt_tls_save' @click='tls_add($event)' ><i class='fas fa-plus'></i></b-button>
|
|
</b-col>
|
|
</b-row>
|
|
</b-container>
|
|
</b-card>
|
|
</b-collapse>
|
|
<b-container v-for='t in tlspolicies' class='border-top'>
|
|
<b-row class='mt-3 mb-3' v-b-toggle="'collapse-tlspolicy-'+t.id">
|
|
<a href='#' onclick='return false;' class='when-opened'>
|
|
<i style='vertical-align: middle; font-size: 125%;' class='fas fa-caret-down'></i>
|
|
@{{t.domain}}
|
|
</a>
|
|
<a href='#' onclick='return false;' class='when-closed'>
|
|
<i style='vertical-align: middle; font-size: 125%;' class='fas fa-caret-right'></i>
|
|
@{{t.domain}}
|
|
</a>
|
|
</b-row>
|
|
<b-collapse :accordion="'tlspolicies'" :id="'collapse-tlspolicy-'+t.id">
|
|
<b-row class='mt-3'>
|
|
<b-container>
|
|
<b-row class='mt-3'>
|
|
<b-col cols='3'>Policy</b-col>
|
|
<b-col cols='6'>Parameters</b-col>
|
|
<b-col cols='3'></b-col>
|
|
</b-row>
|
|
<b-row class='mt-3'>
|
|
<b-col cols='3'>
|
|
<b-form-select v-model='t.policy' @change='t.changed.policy = true' >
|
|
<b-form-select-option value='none' default>None</b-form-select-option>
|
|
<b-form-select-option value='may'>May</b-form-select-option>
|
|
<b-form-select-option value='encrypt'>Encrypt</b-form-select-option>
|
|
<b-form-select-option value='dane'>Dane</b-form-select-option>
|
|
<b-form-select-option value='dane-only'>Dane-Only</b-form-select-option>
|
|
<b-form-select-option value='fingerprint'>Fingerprint</b-form-select-option>
|
|
<b-form-select-option value='verify'>Verify</b-form-select-option>
|
|
<b-form-select-option value='secure'>Secure</b-form-select-option>
|
|
</b-form-select>
|
|
</b-col>
|
|
<b-col cols='6'>
|
|
<b-form-input v-model="t.params" @change='t.changed.params = true' placeholder="Enter parameters here"></b-form-input>
|
|
</b-col>
|
|
<b-col cols='3'>
|
|
<b-button variant='primary' :disabled='!(t.changed.policy || t.changed.params)' @click='tls_set(t,$event)' ><i class='fas fa-save'></i></b-button>
|
|
<b-button variant='danger' v-b-modal="'delete-tlspolicy-'+t.id" ><i class='fas fa-trash'></i></b-button>
|
|
</b-col>
|
|
</b-row>
|
|
<b-row class='mt-3'>
|
|
<b-col cols='5'></b-col>
|
|
<b-modal
|
|
:id="'delete-tlspolicy-'+t.id"
|
|
title="Confirm Delete"
|
|
@ok="tls_del(t,$event)"
|
|
>Are you sure you want to delete TLS policy for <strong>@{{t.domain}}</strong>?
|
|
<template v-slot:modal-footer="{ ok, cancel, hide }">
|
|
<b-button @click='cancel()'>Cancel</b-button>
|
|
<b-button variant='danger' @click='ok()'>Delete</b-button>
|
|
</template>
|
|
</b-modal>
|
|
|
|
</b-row>
|
|
</b-container>
|
|
</b-row>
|
|
</b-container>
|
|
</b-tab>
|
|
</b-tabs>
|
|
</b-card>
|
|
</b-col>
|
|
</b-row>
|
|
</b-container>
|
|
</div>
|
|
@endsection |