2017-05-16 19:20:58 +02:00
< ? php
2017-05-29 21:51:06 +02:00
require_once $_SERVER [ 'DOCUMENT_ROOT' ] . '/modals/footer.php' ;
2018-08-03 20:31:33 +02:00
logger ();
2017-05-16 19:20:58 +02:00
?>
< div style = " margin-bottom: 100px; " ></ div >
2017-05-29 21:51:06 +02:00
< script src = " /js/bootstrap.min.js " ></ script >
2017-05-16 19:20:58 +02:00
< script src = " /js/bootstrap-switch.min.js " ></ script >
< script src = " /js/bootstrap-slider.min.js " ></ script >
< script src = " /js/bootstrap-select.min.js " ></ script >
2017-10-21 10:07:06 +02:00
< script src = " /js/bootstrap-filestyle.min.js " ></ script >
2017-05-16 19:20:58 +02:00
< script src = " /js/notifications.min.js " ></ script >
2017-12-09 14:17:15 +02:00
< script src = " /js/formcache.min.js " ></ script >
2018-07-24 12:46:17 +02:00
< script src = " /js/google.charts.loader.js " ></ script >
2017-11-03 21:37:24 +02:00
< script src = " /js/numberedtextarea.min.js " ></ script >
2018-09-09 21:17:59 +02:00
< script src = " /js/sha1.min.js " ></ script >
2017-05-16 19:20:58 +02:00
< script src = " /js/u2f-api.js " ></ script >
2017-05-23 09:36:59 +02:00
< script src = " /js/api.js " ></ script >
2018-09-09 21:17:59 +02:00
< script src = " /js/mailcow.js " ></ script >
2017-05-16 19:20:58 +02:00
< script >
2018-09-09 21:17:59 +02:00
< ? php
$lang_footer = json_encode ( $lang [ 'footer' ]);
$lang_acl = json_encode ( $lang [ 'acl' ]);
$lang_tfa = json_encode ( $lang [ 'tfa' ]);
echo " var lang_footer = " . $lang_footer . " ; \n " ;
echo " var lang_acl = " . $lang_acl . " ; \n " ;
echo " var lang_tfa = " . $lang_tfa . " ; \n " ;
echo " var docker_timeout = " . $DOCKER_TIMEOUT * 1000 . " ; \n " ;
?>
2017-10-21 10:07:06 +02:00
$ ( window ) . scroll ( function () {
sessionStorage . scrollTop = $ ( this ) . scrollTop ();
});
2017-05-16 19:20:58 +02:00
// Select language and reopen active URL without POST
function setLang ( sel ) {
$ . post ( " <?= $_SERVER['REQUEST_URI'] ; ?> " , { lang : sel } );
window . location . href = window . location . pathname + window . location . search ;
}
2018-08-03 20:31:33 +02:00
$ ( window ) . load ( function () {
2018-01-25 14:22:17 +02:00
$ ( " .overlay " ) . hide ();
});
2017-05-16 19:20:58 +02:00
$ ( document ) . ready ( function () {
2018-09-09 21:17:59 +02:00
// TFA, CSRF, Alerts in footer.inc.php
// Other general functions in mailcow.js
2018-08-03 20:31:33 +02:00
< ? php
$alertbox_log_parser = alertbox_log_parser ( $_SESSION );
if ( is_array ( $alertbox_log_parser )) {
2018-08-13 23:20:40 +02:00
foreach ( $alertbox_log_parser as $log ) {
2018-08-03 20:31:33 +02:00
?>
2018-08-13 23:20:40 +02:00
mailcow_alert_box ( < ? = $log [ 'msg' ]; ?> , <?=$log['type'];?>);
2018-08-03 20:31:33 +02:00
< ? php
2018-08-13 23:20:40 +02:00
}
2018-08-03 20:31:33 +02:00
unset ( $_SESSION [ 'return' ]);
}
?>
2017-05-16 19:20:58 +02:00
// Confirm TFA modal
< ? php if ( isset ( $_SESSION [ 'pending_tfa_method' ])) : ?>
$ ( '#ConfirmTFAModal' ) . modal ({
backdrop : 'static' ,
keyboard : false
});
2017-11-21 10:33:22 +02:00
$ ( '#u2f_status_auth' ) . html ( '<p><span class="glyphicon glyphicon-refresh glyphicon-spin"></span> Initializing, please wait...</p>' );
2017-05-16 19:20:58 +02:00
$ ( '#ConfirmTFAModal' ) . on ( 'shown.bs.modal' , function (){
$ ( this ) . find ( '#token' ) . focus ();
// If U2F
if ( document . getElementById ( " u2f_auth_data " ) !== null ) {
$ . ajax ({
type : " GET " ,
cache : false ,
dataType : 'script' ,
2018-02-10 23:42:46 +02:00
url : " /api/v1/get/u2f-authentication/<?= (isset( $_SESSION['pending_mailcow_cc_username'] )) ? rawurlencode( $_SESSION['pending_mailcow_cc_username'] ) : null; ?> " ,
2017-11-21 10:33:22 +02:00
complete : function ( data ){
2018-09-09 21:17:59 +02:00
$ ( '#u2f_status_auth' ) . html ( lang_tfa . waiting_usb_auth );
2017-05-16 19:20:58 +02:00
data ;
2017-11-21 10:33:22 +02:00
setTimeout ( function () {
console . log ( " Ready to authenticate " );
u2f . sign ( appId , challenge , registeredKeys , function ( data ) {
var form = document . getElementById ( 'u2f_auth_form' );
var auth = document . getElementById ( 'u2f_auth_data' );
console . log ( " Authenticate callback " , data );
auth . value = JSON . stringify ( data );
form . submit ();
});
}, 1000 );
2017-05-16 19:20:58 +02:00
}
});
}
});
2018-02-16 23:39:33 +02:00
$ ( '#ConfirmTFAModal' ) . on ( 'hidden.bs.modal' , function (){
$ . ajax ({
type : " GET " ,
cache : false ,
dataType : 'script' ,
url : '/inc/ajax/destroy_tfa_auth.php' ,
complete : function ( data ){
window . location = window . location . href . split ( " # " )[ 0 ];
}
});
});
2017-05-16 19:20:58 +02:00
< ? php endif ; ?>
// Set TFA modals
$ ( '#selectTFA' ) . change ( function () {
if ( $ ( this ) . val () == " yubi_otp " ) {
$ ( '#YubiOTPModal' ) . modal ( 'show' );
$ ( " option:selected " ) . prop ( " selected " , false );
}
if ( $ ( this ) . val () == " totp " ) {
$ ( '#TOTPModal' ) . modal ( 'show' );
$ ( " option:selected " ) . prop ( " selected " , false );
}
if ( $ ( this ) . val () == " u2f " ) {
$ ( '#U2FModal' ) . modal ( 'show' );
$ ( " option:selected " ) . prop ( " selected " , false );
2017-11-21 10:33:22 +02:00
$ ( '#u2f_status_reg' ) . html ( '<p><span class="glyphicon glyphicon-refresh glyphicon-spin"></span> Initializing, please wait...</p>' );
2017-05-16 19:20:58 +02:00
$ . ajax ({
type : " GET " ,
cache : false ,
dataType : 'script' ,
2018-02-10 23:42:46 +02:00
url : " /api/v1/get/u2f-registration/<?= (isset( $_SESSION['mailcow_cc_username'] )) ? rawurlencode( $_SESSION['mailcow_cc_username'] ) : null; ?> " ,
2017-11-21 10:33:22 +02:00
complete : function ( data ){
2017-05-16 19:20:58 +02:00
data ;
2017-11-21 10:33:22 +02:00
setTimeout ( function () {
console . log ( " Ready to register " );
2018-09-09 21:17:59 +02:00
$ ( '#u2f_status_reg' ) . html ( lang_tfa . waiting_usb_register );
2017-11-21 10:33:22 +02:00
u2f . register ( appId , registerRequests , registeredKeys , function ( deviceResponse ) {
var form = document . getElementById ( 'u2f_reg_form' );
var reg = document . getElementById ( 'u2f_register_data' );
console . log ( " Register callback: " , data );
if ( deviceResponse . errorCode && deviceResponse . errorCode != 0 ) {
var u2f_return_code = document . getElementById ( 'u2f_return_code' );
u2f_return_code . style . display = u2f_return_code . style . display === 'none' ? '' : null ;
if ( deviceResponse . errorCode == " 4 " ) { deviceResponse . errorCode = " 4 - The presented device is not eligible for this request. For a registration request this may mean that the token is already registered, and for a sign request it may mean that the token does not know the presented key handle " ; }
u2f_return_code . innerHTML = 'Error code: ' + deviceResponse . errorCode ;
return ;
}
reg . value = JSON . stringify ( deviceResponse );
form . submit ();
});
}, 1000 );
2017-05-16 19:20:58 +02:00
}
});
}
if ( $ ( this ) . val () == " none " ) {
$ ( '#DisableTFAModal' ) . modal ( 'show' );
$ ( " option:selected " ) . prop ( " selected " , false );
}
});
// CSRF
$ ( '<input type="hidden" value="<?= $_SESSION[' CSRF '][' TOKEN ']; ?>">' ) . attr ( 'id' , 'csrf_token' ) . attr ( 'name' , 'csrf_token' ) . appendTo ( 'form' );
2017-10-21 10:07:06 +02:00
if ( sessionStorage . scrollTop != " undefined " ) {
$ ( window ) . scrollTop ( sessionStorage . scrollTop );
}
2017-05-16 19:20:58 +02:00
});
</ script >
</ body >
</ html >
< ? php
$stmt = null ;
2017-12-09 14:17:15 +02:00
$pdo = null ;