| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534 | <?phprequire_once("inc/prerequisites.inc.php");$AuthUsers = array("admin", "domainadmin");if (!isset($_SESSION['mailcow_cc_role']) OR !in_array($_SESSION['mailcow_cc_role'], $AuthUsers)) {	header('Location: /');	exit();}require_once("inc/header.inc.php");?><div class="container">	<div class="row">		<div class="col-md-12">			<div class="panel panel-default">				<div class="panel-heading">					<h3 class="panel-title"><?=$lang['edit']['title'];?></h3>				</div>				<div class="panel-body"><?phpif (isset($_SESSION['mailcow_cc_role']) && ($_SESSION['mailcow_cc_role'] == "admin"  || $_SESSION['mailcow_cc_role'] == "domainadmin")) {		if (isset($_GET["alias"]) &&			!empty($_GET["alias"])) {				$alias = $_GET["alias"];				$domain = substr(strrchr($alias, "@"), 1);				try {					$stmt = $pdo->prepare("SELECT * FROM `alias`						WHERE `address`= :address 						AND `goto` != :goto						AND (							`domain` IN (								SELECT `domain` FROM `domain_admins`									WHERE `active`='1'									AND `username`= :username							)							OR 'admin'= :admin						)");					$stmt->execute(array(						':address' => $alias,						':goto' => $alias,						':username' => $_SESSION['mailcow_cc_username'],						':admin' => $_SESSION['mailcow_cc_role']					));					$result = $stmt->fetch(PDO::FETCH_ASSOC);				}				catch(PDOException $e) {					$_SESSION['return'] = array(						'type' => 'danger',						'msg' => 'MySQL: '.$e					);				}				if ($result !== false) {				?>					<h4><?=$lang['edit']['alias'];?></h4>					<br />					<form class="form-horizontal" role="form" method="post" action="<?=($FORM_ACTION == "previous") ? $_SESSION['return_to'] : null;?>">					<input type="hidden" name="address" value="<?=htmlspecialchars($alias);?>">						<div class="form-group">							<label class="control-label col-sm-2" for="goto"><?=$lang['edit']['target_address'];?></label>							<div class="col-sm-10">								<textarea class="form-control" autocapitalize="none" autocorrect="off" rows="10" id="goto" name="goto"><?=htmlspecialchars($result['goto']) ?></textarea>							</div>						</div>						<div class="form-group">							<div class="col-sm-offset-2 col-sm-10">								<div class="checkbox">								<label><input type="checkbox" name="active" <?php if (isset($result['active']) && $result['active']=="1") { echo "checked"; }; ?>> <?=$lang['edit']['active'];?></label>								</div>							</div>						</div>						<div class="form-group">							<div class="col-sm-offset-2 col-sm-10">								<button type="submit" name="trigger_mailbox_action" value="editalias" class="btn btn-success btn-sm"><?=$lang['edit']['save'];?></button>							</div>						</div>					</form>				<?php				}				else {				?>					<div class="alert alert-info" role="alert"><?=$lang['info']['no_action'];?></div>				<?php				}		}		elseif (isset($_GET['domainadmin']) && 			ctype_alnum(str_replace(array('_', '.', '-'), '', $_GET["domainadmin"])) &&			!empty($_GET["domainadmin"]) &&			$_GET["domainadmin"] != 'admin' &&			$_SESSION['mailcow_cc_role'] == "admin") {				$domain_admin = $_GET["domainadmin"];				try {					$stmt = $pdo->prepare("SELECT * FROM `domain_admins` WHERE `username`= :domain_admin");					$stmt->execute(array(						':domain_admin' => $domain_admin					));					$result = $stmt->fetch(PDO::FETCH_ASSOC);				}				catch(PDOException $e) {					$_SESSION['return'] = array(						'type' => 'danger',						'msg' => 'MySQL: '.$e					);				}				if ($result !== false) {				?>				<h4><?=$lang['edit']['domain_admin'];?></h4>				<br />				<form class="form-horizontal" role="form" method="post" action="<?=($FORM_ACTION == "previous") ? $_SESSION['return_to'] : null;?>">				<input type="hidden" name="username" value="<?=htmlspecialchars($domain_admin);?>">					<div class="form-group">						<label class="control-label col-sm-2" for="domain"><?=$lang['edit']['domains'];?></label>						<div class="col-sm-10">							<select id="domain" name="domain[]" multiple>							<?php							try {								$stmt = $pdo->prepare("SELECT `domain` FROM `domain`									WHERE `domain` IN (										SELECT `domain` FROM `domain_admins`											WHERE `username`= :domain_admin)");								$stmt->execute(array(':domain_admin' => $domain_admin));								$rows = $stmt->fetchAll(PDO::FETCH_ASSOC);							}							catch(PDOException $e) {								$_SESSION['return'] = array(									'type' => 'danger',									'msg' => 'MySQL: '.$e								);							}							while ($row_selected = array_shift($rows)):							?>								<option selected><?=htmlspecialchars($row_selected['domain']);?></option>							<?php							endwhile;							try {								$stmt = $pdo->prepare("SELECT `domain` FROM `domain`									WHERE `domain` NOT IN (										SELECT `domain` FROM `domain_admins`											WHERE `username`= :domain_admin)");								$stmt->execute(array(':domain_admin' => $domain_admin));								$rows = $stmt->fetchAll(PDO::FETCH_ASSOC);							}							catch(PDOException $e) {								$_SESSION['return'] = array(									'type' => 'danger',									'msg' => 'MySQL: '.$e								);							}							while ($row_unselected = array_shift($rows)):							?>								<option><?=htmlspecialchars($row_unselected['domain']);?></option>							<?php							endwhile;							?>							</select>						</div>					</div>					<div class="form-group">						<label class="control-label col-sm-2" for="password"><?=$lang['edit']['password'];?></label>						<div class="col-sm-10">						<input type="password" class="form-control" name="password" id="password" placeholder="">						</div>					</div>					<div class="form-group">						<label class="control-label col-sm-2" for="password2"><?=$lang['edit']['password_repeat'];?></label>						<div class="col-sm-10">						<input type="password" class="form-control" name="password2" id="password2">						</div>					</div>					<div class="form-group">						<div class="col-sm-offset-2 col-sm-10">							<div class="checkbox">							<label><input type="checkbox" name="active" <?php if (isset($result['active']) && $result['active']=="1") { echo "checked"; }; ?>> <?=$lang['edit']['active'];?></label>							</div>						</div>					</div>					<div class="form-group">						<div class="col-sm-offset-2 col-sm-10">							<button type="submit" name="trigger_edit_domain_admin" class="btn btn-success btn-sm"><?=$lang['edit']['save'];?></button>						</div>					</div>				</form>			<?php			}			else {			?>				<div class="alert alert-info" role="alert"><?=$lang['info']['no_action'];?></div>			<?php			}	}	elseif (isset($_GET['domain']) &&		is_valid_domain_name($_GET["domain"]) &&		!empty($_GET["domain"])) {			$domain = $_GET["domain"];			try {				$stmt = $pdo->prepare("SELECT * FROM `domain` WHERE `domain`='".$domain."'				AND (					`domain` IN (						SELECT `domain` from `domain_admins`							WHERE `active`='1'							AND `username` = :username					)					OR 'admin'= :admin				)");				$stmt->execute(array(					':username' => $_SESSION['mailcow_cc_username'],					':admin' => $_SESSION['mailcow_cc_role']				));				$result = $stmt->fetch(PDO::FETCH_ASSOC);			}			catch(PDOException $e) {				$_SESSION['return'] = array(					'type' => 'danger',					'msg' => 'MySQL: '.$e				);			}			if ($result !== false) {			?>				<h4><?=$lang['edit']['domain'];?></h4>				<form class="form-horizontal" role="form" method="post" action="<?=($FORM_ACTION == "previous") ? $_SESSION['return_to'] : null;?>">				<input type="hidden" name="domain" value="<?=htmlspecialchars($domain);?>">					<div class="form-group">						<label class="control-label col-sm-2" for="description"><?=$lang['edit']['description'];?></label>						<div class="col-sm-10">							<input type="text" class="form-control" name="description" id="description" value="<?=htmlspecialchars($result['description']);?>">						</div>					</div>					<?php					if ($_SESSION['mailcow_cc_role'] == "admin") {					?>					<div class="form-group">						<label class="control-label col-sm-2" for="aliases"><?=$lang['edit']['max_aliases'];?></label>						<div class="col-sm-10">							<input type="number" class="form-control" name="aliases" id="aliases" value="<?=intval($result['aliases']);?>">						</div>					</div>					<div class="form-group">						<label class="control-label col-sm-2" for="mailboxes"><?=$lang['edit']['max_mailboxes'];?></label>						<div class="col-sm-10">							<input type="number" class="form-control" name="mailboxes" id="mailboxes" value="<?=intval($result['mailboxes']);?>">						</div>					</div>					<div class="form-group">						<label class="control-label col-sm-2" for="maxquota"><?=$lang['edit']['max_quota'];?></label>						<div class="col-sm-10">							<input type="number" class="form-control" name="maxquota" id="maxquota" value="<?=intval($result['maxquota']);?>">						</div>					</div>					<div class="form-group">						<label class="control-label col-sm-2" for="quota"><?=$lang['edit']['domain_quota'];?></label>						<div class="col-sm-10">							<input type="number" class="form-control" name="quota" id="quota" value="<?=intval($result['quota']);?>">						</div>					</div>					<div class="form-group">						<label class="control-label col-sm-2"><?=$lang['edit']['backup_mx_options'];?></label>						<div class="col-sm-10">							<div class="checkbox">								<label><input type="checkbox" name="backupmx" <?php if (isset($result['backupmx']) && $result['backupmx']=="1") { echo "checked"; }; ?>> <?=$lang['edit']['relay_domain'];?></label>								<br />								<label><input type="checkbox" name="relay_all_recipients" <?php if (isset($result['relay_all_recipients']) && $result['relay_all_recipients']=="1") { echo "checked"; }; ?>> <?=$lang['edit']['relay_all'];?></label>								<p><?=$lang['edit']['relay_all_info'];?></p>							</div>						</div>					</div>					<?php					}					?>					<div class="form-group">						<div class="col-sm-offset-2 col-sm-10">							<div class="checkbox">								<label><input type="checkbox" name="active" <?php if (isset($result['active']) && $result['active']=="1") { echo "checked "; }; if ($_SESSION['mailcow_cc_role']=="domainadmin") { echo "disabled"; }; ?>> <?=$lang['edit']['active'];?></label>							</div>						</div>					</div>					<div class="form-group">						<div class="col-sm-offset-2 col-sm-10">							<button type="submit" name="trigger_mailbox_action" value="editdomain" class="btn btn-success btn-sm"><?=$lang['edit']['save'];?></button>						</div>					</div>				</form>				<?php				if (file_exists($GLOBALS["MC_DKIM_TXTS"]. "/" . $domain . "." . "dkim")) {					$pubKey = file_get_contents($GLOBALS["MC_DKIM_TXTS"]. "/" . $domain . "." . "dkim");				?>					<div class="row">						<div class="col-xs-2">							<p>Domain: <strong><?=htmlspecialchars($domain);?></strong> (dkim._domainkey)</p>						</div>						<div class="col-xs-9">							<pre>v=DKIM1;k=rsa;t=s;s=email;p=<?=$pubKey;?></pre>						</div>						<div class="col-xs-1">							<form class="form-inline" role="form" method="post">							<a href="#" onclick="$(this).closest('form').submit()"><span class="glyphicon glyphicon-remove-circle"></span></a>							<input type="hidden" name="delete_dkim_record" value="<?=htmlspecialchars($file);?>">							<input type="hidden" name="dkim[domain]" value="<?=$domain;?>">							</form>						</div>					</div>				<?php				}			}			else {			?>				<div class="alert alert-info" role="alert"><?=$lang['info']['no_action'];?></div>			<?php			}	}	elseif (isset($_GET['aliasdomain']) &&		is_valid_domain_name($_GET["aliasdomain"]) &&		!empty($_GET["aliasdomain"])) {			$alias_domain = $_GET["aliasdomain"];			try {				$stmt = $pdo->prepare("SELECT * FROM `alias_domain`					WHERE `alias_domain`= :alias_domain 					AND (						`target_domain` IN (							SELECT `domain` FROM `domain_admins`								WHERE `active`='1'								AND `username`= :username						)						OR 'admin'= :admin					)");				$stmt->execute(array(					':alias_domain' => $alias_domain,					':username' => $_SESSION['mailcow_cc_username'],					':admin' => $_SESSION['mailcow_cc_role']				));				$result = $stmt->fetch(PDO::FETCH_ASSOC);			}			catch(PDOException $e) {				$_SESSION['return'] = array(					'type' => 'danger',					'msg' => 'MySQL: '.$e				);			}			if ($result !== false) {			?>				<h4><?=$lang['edit']['edit_alias_domain'];?></h4>				<form class="form-horizontal" role="form" method="post" action="<?=($FORM_ACTION == "previous") ? $_SESSION['return_to'] : null;?>">					<input type="hidden" name="alias_domain_now" value="<?=htmlspecialchars($alias_domain);?>">					<div class="form-group">						<label class="control-label col-sm-2" for="alias_domain"><?=$lang['edit']['alias_domain'];?></label>						<div class="col-sm-10">							<input type="text" class="form-control" name="alias_domain" id="alias_domain" value="<?=htmlspecialchars($result['alias_domain']);?>">						</div>					</div>					<div class="form-group">						<div class="col-sm-offset-2 col-sm-10">							<div class="checkbox">								<label><input type="checkbox" name="active" <?= (isset($result['active']) && $result['active']=="1") ?  "checked" : null ?>> <?=$lang['edit']['active'];?></label>							</div>						</div>					</div>					<div class="form-group">						<div class="col-sm-offset-2 col-sm-10">							<button type="submit" name="trigger_mailbox_action" value="editaliasdomain" class="btn btn-success btn-sm"><?=$lang['edit']['save'];?></button>						</div>					</div>				</form>				<?php				$dnstxt_folder = scandir($GLOBALS["MC_DKIM_TXTS"]);				$dnstxt_files = array_diff($dnstxt_folder, array('.', '..'));				foreach($dnstxt_files as $file) {					if (explode("_", $file)[1] == $domain) {						$str = file_get_contents($GLOBALS["MC_DKIM_TXTS"]."/".$file);						$str = preg_replace('/\r|\t|\n/', '', $str);						preg_match('/\(.*\)/im', $str, $matches);						if(isset($matches[0])) {							$str = str_replace(array(' ', '"', '(', ')'), '', $matches[0]);						}				?>						<div class="row">							<div class="col-xs-2">								<p class="text-right"><?=$lang['edit']['dkim_signature'];?></p>							</div>							<div class="col-xs-10">								<div class="col-md-2"><b><?=$lang['edit']['dkim_txt_name'];?></b></div>								<div class="col-md-10">									<pre><?=htmlspecialchars(explode("_", $file)[0]);?>._domainkey</pre>								</div>								<div class="col-md-2"><b><?=$lang['edit']['dkim_txt_value'];?></b></div>								<div class="col-md-10">									<pre><?=htmlspecialchars($str);?></pre>									<?=$lang['edit']['dkim_record_info'];?>								</div>							</div>						</div>				<?php					}				}			}			else {			?>				<div class="alert alert-info" role="alert"><?=$lang['info']['no_action'];?></div>			<?php			}	}	elseif (isset($_GET['mailbox']) && filter_var($_GET["mailbox"], FILTER_VALIDATE_EMAIL) && !empty($_GET["mailbox"])) {			$mailbox = $_GET["mailbox"];			try {				$stmt = $pdo->prepare("SELECT `username`, `domain`, `name`, `quota`, `active` FROM `mailbox` WHERE `username` = :username1");				$stmt->execute(array(					':username1' => $mailbox,				));				$result = $stmt->fetch(PDO::FETCH_ASSOC);			}			catch(PDOException $e) {				$_SESSION['return'] = array(					'type' => 'danger',					'msg' => 'MySQL: '.$e				);			}			if ($result !== false && hasDomainAccess($_SESSION['mailcow_cc_username'], $_SESSION['mailcow_cc_role'], $result['domain'])) {				$left_m = remaining_specs($result['domain'], $_GET['mailbox'])['left_m'];			?>				<h4><?=$lang['edit']['mailbox'];?></h4>				<form class="form-horizontal" role="form" method="post" action="<?=($FORM_ACTION == "previous") ? $_SESSION['return_to'] : null;?>">				<input type="hidden" name="username" value="<?=htmlspecialchars($result['username']);?>">					<div class="form-group">						<label class="control-label col-sm-2" for="name"><?=$lang['edit']['full_name'];?>:</label>						<div class="col-sm-10">						<input type="text" class="form-control" name="name" id="name" value="<?=htmlspecialchars($result['name'], ENT_QUOTES, 'UTF-8');?>">						</div>					</div>					<div class="form-group">						<label class="control-label col-sm-2" for="quota"><?=$lang['edit']['quota_mb'];?>:							<br /><span id="quotaBadge" class="badge">max. <?=intval($left_m)?> MiB</span>						</label>						<div class="col-sm-10">							<input type="number" name="quota" id="quota" id="destroyable" style="width:100%" min="1" max="<?=intval($left_m);?>" value="<?=intval($result['quota']) / 1048576;?>" class="form-control">						</div>					</div>					<div class="form-group">						<label class="control-label col-sm-2" for="sender_acl"><?=$lang['edit']['sender_acl'];?>:</label>						<div class="col-sm-10">							<select style="width:100%" id="sender_acl" name="sender_acl[]" size="10" multiple>							<?php							$rows = get_sender_acl_handles($mailbox, "preselected");							while ($row_goto_from_alias = array_shift($rows)):							?>								<option disabled selected><?=htmlspecialchars($row_goto_from_alias['address']);?></option>							<?php							endwhile;							// All manual selected							$rows = get_sender_acl_handles($mailbox, "selected");							while ($row_selected_sender_acl = array_shift($rows)):									if (!filter_var($row_selected_sender_acl['send_as'], FILTER_VALIDATE_EMAIL)):									?>										<option data-divider="true"></option>											<option value="<?=htmlspecialchars($row_selected_sender_acl['send_as']);?>" selected><?=htmlspecialchars(sprintf($lang['edit']['dont_check_sender_acl'], str_replace('@', '', $row_selected_sender_acl['send_as'])));?></option>										<option data-divider="true"></option>									<?php									else:									?>										<option selected><?=htmlspecialchars($row_selected_sender_acl['send_as']);?></option>									<?php									endif;							endwhile;														// Unselected domains							$rows = get_sender_acl_handles($mailbox, "unselected-domains");							while ($row_unselected_sender_acl = array_shift($rows)):							?>								<option data-divider="true"></option>									<option value="@<?=htmlspecialchars($row_unselected_sender_acl['domain']);?>"><?=htmlspecialchars(sprintf($lang['edit']['dont_check_sender_acl'], $row_unselected_sender_acl['domain']));?></option>								<option data-divider="true"></option>							<?php							endwhile;							// Unselected addresses							$rows = get_sender_acl_handles($mailbox, "unselected-addresses");							while ($row_unselected_sender_acl = array_shift($rows)):							?>								<option><?=htmlspecialchars($row_unselected_sender_acl['address']);?></option>							<?php							endwhile;							?>							</select>						</div>					</div>					<div class="form-group">						<label class="control-label col-sm-2" for="password"><?=$lang['edit']['password'];?></label>						<div class="col-sm-10">						<input type="password" class="form-control" name="password" id="password" placeholder="<?=$lang['edit']['unchanged_if_empty'];?>">						</div>					</div>					<div class="form-group">						<label class="control-label col-sm-2" for="password2"><?=$lang['edit']['password_repeat'];?></label>						<div class="col-sm-10">						<input type="password" class="form-control" name="password2" id="password2">						</div>					</div>					<div class="form-group">						<div class="col-sm-offset-2 col-sm-10">							<div class="checkbox">							<label><input type="checkbox" name="active" <?=($result['active']=="1") ? "checked" : "";?>> <?=$lang['edit']['active'];?></label>							</div>						</div>					</div>					<div class="form-group">						<div class="col-sm-offset-2 col-sm-10">							<button type="submit" name="trigger_mailbox_action" value="editmailbox" class="btn btn-success btn-sm"><?=$lang['edit']['save'];?></button>						</div>					</div>				</form>			<?php			}			else {			?>				<div class="alert alert-info" role="alert"><?=$lang['info']['no_action'];?></div>			<?php			}	}	else {	?>		<div class="alert alert-info" role="alert"><?=$lang['info']['no_action'];?></div>	<?php	}}else {?>	<div class="alert alert-danger" role="alert"><?=$lang['danger']['access_denied'];?></div><?php}?>				</div>			</div>		</div>	</div><a href="<?=$_SESSION['return_to'];?>">← <?=$lang['edit']['previous'];?></a></div> <!-- /container --><?phprequire_once("inc/footer.inc.php");?>
 |