diff --git a/server/www/teleport/static/css/single.css b/server/www/teleport/static/css/single.css index 5247cf0..437b85f 100644 --- a/server/www/teleport/static/css/single.css +++ b/server/www/teleport/static/css/single.css @@ -1 +1 @@ -@charset "utf-8";html{font-size:13px}body{font-family:-apple-system,system-ui,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,"PingFang SC","Hiragino Sans GB","Microsoft YaHei",sans-serif;background-color:#e9e9e9;color:#333}html,body{height:100%}#page-container{min-width:1260px}a{text-decoration:none}a:link{text-decoration:none}a:hover{text-decoration:none}a:active{text-decoration:none}a:visited{text-decoration:none}select{outline:none}label{font-weight:normal}.clear-float{clear:both}.bigger{font-size:120%}.normal-text{font-size:13px;color:#333}.mono{font-family:Monaco,Lucida Console,Consolas,Courier,'Courier New',monospace}hr.hr-sm{margin-top:5px;margin-bottom:5px}.btn-single-line{white-space:nowrap}.btn-single-line .btn:first-child{border-top-left-radius:3px;border-bottom-left-radius:3px}.btn-single-line .btn:last-child{border-top-right-radius:3px;border-bottom-right-radius:3px}.remote-action-group{margin-bottom:3px;height:28px}.remote-action-group ul{display:block;height:28px;margin:0;padding:0}.remote-action-group ul li{float:left;position:relative;display:block;height:28px;padding:4px 5px;background-color:#eee;border-top:1px solid #ccc;border-right:1px solid #ccc;border-bottom:1px solid #ccc}.remote-action-group ul li.remote-action-btn{background:none;padding:0;border:none}.remote-action-group ul li.remote-action-input{background:none;padding:4px 0}.remote-action-group ul li.remote-action-input select{border:none}.remote-action-group ul li.remote-action-chk-protocol{width:86px}.remote-action-group ul li.remote-action-state{text-align:center;white-space:nowrap}.remote-action-group ul li.remote-action-state.state-disabled{background-color:#e5e5e5;color:#aaa;text-shadow:-1px -1px 1px #fff}.remote-action-group ul li.remote-action-state.state-disabled>i.fa{color:#b53a2f}.remote-action-group ul li.remote-action-username,.remote-action-group ul li.remote-action-name,.remote-action-group ul li.remote-action-protocol{width:96px;text-align:center;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.remote-action-group ul li.remote-action-username{font-size:90%;color:#999}.remote-action-group ul li.remote-action-name,.remote-action-group ul li.remote-action-protocol,.remote-action-group ul li.remote-action-chk-protocol{color:#000}.remote-action-group ul li.remote-action-name,.remote-action-group ul li.remote-action-chk-protocol{font-weight:bold}.remote-action-group ul li.remote-action-password,.remote-action-group ul li.remote-action-sshkey,.remote-action-group ul li.remote-action-noauth{text-align:center;padding:4px 8px;width:45px}.remote-action-group ul li.remote-action-password{background-color:#e3ffe3;color:#999}.remote-action-group ul li.remote-action-sshkey{background-color:#fbe9c8;color:#666}.remote-action-group ul li.remote-action-noauth{background-color:#e0e0e0;color:#666}.remote-action-group ul li .btn{line-height:1.5;margin:0;padding:4px 8px;font-size:12px;border-radius:0}.remote-action-group ul li label{padding:0;display:block;float:left;margin-top:1px;cursor:pointer}.remote-action-group ul li input[type=checkbox]{display:block;float:left;margin:3px 5px 0 0}.remote-action-group ul li select{margin-top:-3px}.remote-action-group ul li:first-child{border-left:1px solid #ccc;border-top-left-radius:4px;border-bottom-left-radius:4px}.remote-action-group ul li.remote-action-btn:first-child{border:none}.remote-action-group ul li.remote-action-btn:first-child .btn{border-top-left-radius:4px;border-bottom-left-radius:4px}.remote-action-group ul li:last-child{border-top-right-radius:4px;border-bottom-right-radius:4px}.remote-action-group ul li.remote-action-btn:last-child{border:none}.remote-action-group ul li.remote-action-btn:last-child .btn{border-top-right-radius:4px;border-bottom-right-radius:4px}.remote-info-group{margin-bottom:3px;height:28px}.remote-info-group ul{display:inline-block;height:28px;margin:0;padding:0}.remote-info-group ul li{float:left;position:relative;display:block;height:28px;padding:4px 5px;border-top:1px solid #ccc;border-right:1px solid #ccc;border-bottom:1px solid #ccc}.remote-info-group ul li.remote-action-btn{background:none;padding:0;border:none}.remote-info-group ul li.remote-action-input{background:none;padding:4px 0}.remote-info-group ul li.remote-action-input select{border:none}.remote-info-group ul li label{padding:0;display:block;float:left;margin-top:1px;cursor:pointer}.remote-info-group ul li select{margin-top:-3px}.remote-info-group ul li:first-child{border-left:1px solid #ccc;border-top-left-radius:4px;border-bottom-left-radius:4px}.remote-info-group ul li:last-child{border-top-right-radius:4px;border-bottom-right-radius:4px}hr.small{margin:5px 0}.dlg-protocol-group{margin-bottom:3px}.dlg-protocol-group ul{display:block;height:28px;margin:0;padding:0}.dlg-protocol-group ul li{float:left;position:relative;display:block;height:28px;padding:4px 5px;background-color:#eee;border-top:1px solid #ccc;border-right:1px solid #ccc;border-bottom:1px solid #ccc}.dlg-protocol-group ul li.item-name{width:120px}.dlg-protocol-group ul li.item-btn{background:none;padding:0;border:none}.dlg-protocol-group ul li.item-input{background:none;border:none;padding:0}.dlg-protocol-group ul li .form-control{line-height:1.5;margin:0;padding:4px 5px;font-size:12px;height:28px;border-radius:0;border-left:none;width:100px}.dlg-protocol-group ul li label{padding:0;display:block;float:left;margin-top:1px;cursor:pointer}.dlg-protocol-group ul li input[type=checkbox]{display:block;float:left;margin:3px 5px 0 0}.dlg-protocol-group ul li:first-child{border-left:1px solid #ccc;border-top-left-radius:4px;border-bottom-left-radius:4px}.dlg-protocol-group ul li:first-child .btn,.dlg-protocol-group ul li:first-child .form-control{border-top-left-radius:4px;border-bottom-left-radius:4px}.dlg-protocol-group ul li:last-child{border-top-right-radius:4px;border-bottom-right-radius:4px}.dlg-protocol-group ul li:last-child .btn,.dlg-protocol-group ul li:last-child .form-control{border-top-right-radius:4px;border-bottom-right-radius:4px}.os-icon-windows:after{color:#00bcf6;content:"\f17a";font-size:18px;width:24px;height:24px;line-height:24px;display:inline-block;font-family:'FontAwesome'}.os-icon-linux:after{color:#fff;content:"\f17c";font-size:18px;width:24px;height:24px;line-height:24px;background-color:#333;border-radius:50%;display:inline-block;font-family:'FontAwesome'}.os-icon-macos:after{color:#a7a7a7;content:"\f179";font-size:20px;width:24px;height:24px;line-height:24px;display:inline-block;font-family:'FontAwesome'}.os-icon-ubuntu:after,.os-icon-debian:after,.os-icon-centos:after,.os-icon-redhat:after{content:" ";width:24px;height:24px;line-height:24px;display:inline-block}.os-icon-ubuntu:after{background:url(../img/os-icon/ubuntu-24x24.png) no-repeat}.os-icon-debian:after{background:url(../img/os-icon/debian-24x24.png) no-repeat}.os-icon-centos:after{background:url(../img/os-icon/centos-24x24.png) no-repeat}.os-icon-redhat:after{background:url(../img/os-icon/redhat-24x24.png) no-repeat}.disable-bg{position:absolute;background:url(../img/css/disable-bg.png) repeat;opacity:.45;z-index:990}.disable-message{display:inline-block;font-size:160%;position:absolute;padding:20px 40px;border:1px solid #2b0002;background-color:#65181a;color:#fff;opacity:.85;z-index:991}.table{margin-bottom:10px}.table>thead>tr>th{vertical-align:middle;border-bottom:2px solid #ddd}.table.table-info-list{width:auto}.table.table-info-list td{border-top:1px dotted #ddd;padding:5px 5px;vertical-align:top}.table.table-info-list td.key{text-align:right;width:1px;white-space:nowrap}.table.table-info-list td.value{text-align:left;font-family:Monaco,Lucida Console,Consolas,Courier,'Courier New',monospace;color:#767676}.table.table-info-list td .error{color:#cc3632;font-weight:bold}.table.table-info-list.table-info-list-lite{width:100%}.table.table-info-list.table-info-list-lite td{padding:5px 5px}.table.table-info-list.table-info-list-lite td.value{font-weight:normal}.table.table-info-list tr:first-child td{border-top:none}.table.table-config-list{width:100%}.table.table-config-list td{border:none;padding:5px}.table.table-config-list td.title{text-align:left;font-size:110%;font-weight:bolder}.table.table-config-list td.key{width:1px;white-space:nowrap;text-align:right;padding-right:15px}.table.table-config-list td.value{text-align:left}.table.table-config-list td.value input{width:4em;padding:0 5px;text-align:right}.table.table-config-list td.value .unit{margin-left:5px}.table.table-config-list td.value .desc{color:#999;margin-left:15px;display:inline-block}.table>thead>tr>th{padding:5px 5px;outline:none;white-space:nowrap;font-weight:normal;text-align:center;background-color:#ededed}.table>tbody>tr>td{padding:5px;text-align:center;vertical-align:middle}.table>tbody>tr>td .nowrap{white-space:nowrap}.table-data td.loading{text-align:left;padding:20px}.table-data .btn-group.open .dropdown-toggle{-webkit-box-shadow:none;box-shadow:none}.table.table-data thead .sorting,.table.table-data thead .sorting_asc,.table.table-data thead .sorting_desc{cursor:pointer}.table.table-data thead .sorting:after,.table.table-data thead .sorting_asc:after,.table.table-data thead .sorting_desc:after{bottom:4px;padding-left:5px;display:inline-block;font-family:'FontAwesome';opacity:.8}.table.table-data thead .sorting:after{opacity:.2;content:"\f0dc"}.table.table-data thead .sorting_asc:after{content:"\f0de"}.table.table-data thead .sorting_desc:after{content:"\f0dd"}.host-name{font-size:16px}.host-name-desc{cursor:pointer}.host-ip{font-size:12px;color:#999;display:inline-block;white-space:nowrap;font-family:Monaco,Lucida Console,Consolas,Courier,'Courier New',monospace;overflow:hidden;text-overflow:ellipsis}.td-ip-list{padding-right:20px;padding-left:5px}.td-ip-show-more{font-size:14px;width:12px;float:right;display:block}.td-ip-item{min-width:12em;width:12em;height:18px;padding:2px 4px;margin:1px 0;color:#333;text-align:center;white-space:nowrap;border-radius:9px;line-height:11px;font-size:11px;background:#dfdfdf !important}.td-ip-item span{display:inline-block;font-family:Monaco,Lucida Console,Consolas,Courier,'Courier New',monospace;font-size:11px;font-weight:400}.td-ip-item a{display:inline-block;width:14px;float:right;font-size:14px}.btn-group-sm>.btn{padding:3px 5px;font-size:12px}.pop-menu-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1040}.form-group{margin-bottom:5px}.badge{padding:3px 6px;border-radius:10px;font-size:13px;font-weight:400;background-color:#999}.badge.badge-sm{font-size:12px;padding:3px 5px;margin-top:0;border-radius:8px;text-shadow:none}.badge.badge-sup{margin-left:-8px;margin-top:-16px}.badge.badge-ignore{background-color:#e5e5e5;color:#999}.badge.badge-info{background-color:#33b7d0}.badge.badge-primary{background-color:#348fe2}.badge.badge-success{background-color:#368142}.badge.badge-warning{background-color:#f57523}.badge.badge-danger{background-color:#d34242}.btn-success .badge{color:#fff}.label{display:inline-block;padding:5px 10px;margin:2px;font-size:13px;font-weight:400;background-color:#999}.label.label-sm{font-size:12px;padding:3px 8px 4px 8px;margin-top:0;border-radius:3px}.label.label-ignore{background-color:#e5e5e5;color:#aaa;text-shadow:-1px -1px 1px #fff}.label.label-info{background-color:#33b7d0}.label.label-primary{background-color:#348fe2}.label.label-success{background-color:#368142}.label.label-warning{background-color:#f57523}.label.label-danger{background-color:#d34242}.progress.progress-sm{height:18px;margin-bottom:2px;background-color:#aaa}.progress.progress-sm.button{cursor:pointer}.progress.progress-sm .progress-bar{display:block;font-size:11px;float:none}.col-sm-1,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9,.col-sm-10,.col-sm-11,.col-sm-12{padding-right:5px;padding-left:5px}.input-group :-moz-placeholder{color:#d2d2d2}.input-group ::-moz-placeholder{color:#d2d2d2}.input-group input:-ms-input-placeholder,.input-group textarea:-ms-input-placeholder{color:#d2d2d2}.input-group input::-webkit-input-placeholder,.input-group textarea::-webkit-input-placeholder{color:#d2d2d2}.modal .modal-content{border-radius:0}.modal .modal-header .close{margin-top:-4px;margin-right:-6px}.modal .modal-header .close:hover{color:#9c3023;opacity:1}.modal .modal-header .close:active,.modal .modal-header .close:focus,.modal .modal-header .close:visited{-webkit-appearance:none}.modal .form-horizontal .form-group,.modal .row{margin-left:0;margin-right:0}.alert{border-radius:0;padding:5px;margin-bottom:10px}.dropdown-menu{min-width:0;font-size:13px}.form-control-sm{padding:3px 5px;font-size:13px;height:inherit}.form-group .control-label.require{color:#505050;font-weight:bold}.form-group .control-label.require:before{font-weight:normal;color:#ac4e43;position:absolute;margin-left:-1.2em;margin-top:1px;content:"\f069";font-size:8px;font-family:'FontAwesome'}.form-group .control-desc{padding-top:6px;color:#999}label.form-control-static input{display:inline-block;position:relative;margin-top:4px}.control-desc .popover{max-width:none;font-size:13px}body{padding:0;margin:0}#page-content{margin-bottom:44px}#page-footer nav.navbar{min-height:24px;height:24px;line-height:24px;background-color:#cdcdcd;font-size:12px;color:#6d6d6d}#page-footer nav.navbar .container{height:24px}#page-footer nav.navbar p{margin:0 auto;text-align:center}.page-header{box-shadow:0 0 3px rgba(0,0,0,0.5);min-height:48px;top:0;width:100%;height:48px;margin:0 0 10px;border:none;background-color:#2a2a2a}.page-header .top-navbar{min-height:48px;height:48px;line-height:47px;background-color:#3a3a3a;color:#ccc}.page-header .top-navbar a{color:#d5d5d5}.page-header .top-navbar a:hover{color:#5a8fee}.page-header .top-navbar .brand{float:left;display:inline-block;padding:12px 0;margin:0}.page-header .top-navbar .brand .site-logo{display:block;width:86px;height:24px;background:url(../img/site-logo-small.png) no-repeat}.page-header .top-navbar .breadcrumb-container{float:left;display:inline-block;margin:0;padding:0}.page-header .top-navbar .breadcrumb-container .breadcrumb{background-color:#3a3a3a;margin:0;border-radius:0;border:none;padding:0 0 0 20px;font-size:16px;color:#ccc}.page-header .top-navbar .breadcrumb-container .breadcrumb>li+li:before{font-size:18px;padding:0 5px;color:#555;content:'|'}.page-header .top-navbar .breadcrumb-container .breadcrumb>li.title{font-size:18px}.page-header .top-navbar .breadcrumb-container .breadcrumb>li.sub-title{font-size:14px;color:#b3b3b3;line-height:47px}.page-header .top-navbar .status-container{float:right}.info-box{width:100%;margin:30px auto}.info-box .info-icon-box{z-index:-1;position:absolute;min-height:194px;overflow:hidden}.info-box .info-icon-box .fa{margin-top:30px;font-size:164px}.info-box .info-message-box{min-height:328px;border:1px solid #fff;background-color:rgba(255,255,255,0.76);box-shadow:2px 2px 3px rgba(0,0,0,0.3);padding:15px 20px 35px 30px;margin-left:98.4px}.info-box .info-message-box .title{font-size:180%;margin:15px 0}.info-box .info-message-box hr{margin:10px 0 20px;border-top:none;border-bottom:1px dashed #d3d3d3}.content-box{background-color:#fff;padding:20px;box-shadow:1px 1px 1px rgba(0,0,0,0.3)}.content-box .welcome-message .fa{display:block;color:#ff272a;font-size:18px;float:left}.content-box .welcome-message span{display:block;line-height:18px;padding-left:23px}.content-box .table{width:auto;margin-left:20px}.content-box .table td{border-top:1px dotted #ddd;padding:5px}.content-box .table td.key{text-align:right}.content-box .table td.value{text-align:left;font-weight:bold}.content-box .table tr:first-child td{border-top:none}.content-box table.form{width:auto;margin-left:20px}.content-box table.form td{padding:5px;line-height:1.42857143;vertical-align:middle}.content-box table.form td.key{text-align:right}.content-box table.form td label{margin-bottom:0}.content-box table.form td .form-control{height:30px;padding:5px 10px;font-size:inherit;line-height:inherit}.content-box h1 .fa-spin{color:#aaa}.content-box h1{font-size:180%}.content-box h2{font-size:140%}.content-box .op_box{display:block;padding:5px;border-radius:3px;margin:5px 0}.content-box .op_error{background-color:#cc3632;border:1px solid #9c2a26;color:#fff}.content-box .op_wait{background:rgba(255,255,255,0.3)}.content-box .steps-detail{display:none;margin:10px;padding:10px;border:1px solid #b4b4b4;background-color:#dcdcdc}.content-box .steps-detail p{padding-left:5px;margin:2px 0 2px 1px}.content-box .steps-detail p.error{color:#fff;margin:2px 0 2px 0;background-color:#cc3632;border:1px solid #9c2a26}.content-box .alert.alert-warning{color:#6a542d;border:1px solid #e2cab4;background-color:#ffe4cb}.content-box .error{color:#cc3632}#gritter-notice-wrapper{z-index:9999}.gritter-bottom,.gritter-item,.gritter-top{background:rgba(0,0,0,0.8) !important}.gritter-top{border-top-left-radius:3px;border-top-right-radius:3px}.gritter-bottom{border-bottom-left-radius:3px;border-bottom-right-radius:3px}.gritter-close,.gritter-light .gritter-close{left:auto !important;right:5px !important;top:5px !important;width:16px !important;height:16px !important;line-height:16px !important;display:block !important;border-radius:50%}.gritter-close:before,.gritter-light .gritter-close:before{content:'\f00d' !important;font-family:FontAwesome !important;font-size:9px !important;width:16px !important;height:16px !important;line-height:16px !important;color:#fff !important;text-indent:0 !important;position:absolute !important;text-align:center !important;right:0 !important;top:0 !important}.gritter-title{font-size:13px !important;line-height:16px !important;padding-bottom:5px !important;font-weight:400 !important;color:#fff !important;text-shadow:none !important}.gritter-item{color:#aaa !important;font-size:13px !important;padding:2px 15px 5px !important}.gritter-error .gritter-bottom,.gritter-error .gritter-item,.gritter-error .gritter-top{background:rgba(123,32,32,0.9) !important}.gritter-error .gritter-title{color:#fff !important}.gritter-error .gritter-item{color:#ddd !important}.gritter-error .gritter-close{left:auto !important;right:5px !important;top:5px !important;width:16px !important;height:16px !important;line-height:16px !important;display:block !important;border-radius:50%;background:#e33b3b !important}.gritter-success .gritter-bottom,.gritter-success .gritter-item,.gritter-success .gritter-top{background:rgba(1,65,16,0.9) !important}.gritter-success .gritter-title{color:#ddd !important}.gritter-success .gritter-item{color:#ccc !important}.gritter-success .gritter-close{background:#0eb320 !important}#gritter-notice-wrapper{width:320px;max-width:480px}/*# sourceMappingURL=single.css.map */ \ No newline at end of file +@charset "utf-8";html{font-size:13px}body{font-family:-apple-system,system-ui,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,"PingFang SC","Hiragino Sans GB","Microsoft YaHei",sans-serif;background-color:#e9e9e9;color:#333}html,body{height:100%}#page-container{min-width:1260px}a{text-decoration:none}a:link{text-decoration:none}a:hover{text-decoration:none}a:active{text-decoration:none}a:visited{text-decoration:none}select{outline:none}label{font-weight:normal}.clear-float{clear:both}.bigger{font-size:120%}.normal-text{font-size:13px;color:#333}.mono{font-family:Monaco,Lucida Console,Consolas,Courier,'Courier New',monospace}hr.hr-sm{margin-top:5px;margin-bottom:5px}.btn-single-line{white-space:nowrap}.btn-single-line .btn:first-child{border-top-left-radius:3px;border-bottom-left-radius:3px}.btn-single-line .btn:last-child{border-top-right-radius:3px;border-bottom-right-radius:3px}.remote-action-group{margin-bottom:3px;height:28px}.remote-action-group ul{display:block;height:28px;margin:0;padding:0}.remote-action-group ul li{float:left;position:relative;display:block;height:28px;padding:4px 5px;background-color:#eee;border-top:1px solid #ccc;border-right:1px solid #ccc;border-bottom:1px solid #ccc}.remote-action-group ul li.remote-action-btn{background:none;padding:0;border:none}.remote-action-group ul li.remote-action-input{background:none;padding:4px 0}.remote-action-group ul li.remote-action-input select{border:none}.remote-action-group ul li.remote-action-chk-protocol{width:86px}.remote-action-group ul li.remote-action-state{text-align:center;white-space:nowrap}.remote-action-group ul li.remote-action-state.state-disabled{background-color:#e5e5e5;color:#aaa;text-shadow:-1px -1px 1px #fff}.remote-action-group ul li.remote-action-state.state-disabled>i.fa{color:#b53a2f}.remote-action-group ul li.remote-action-username,.remote-action-group ul li.remote-action-name,.remote-action-group ul li.remote-action-protocol{width:96px;text-align:center;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.remote-action-group ul li.remote-action-username{font-size:90%;color:#999}.remote-action-group ul li.remote-action-name,.remote-action-group ul li.remote-action-protocol,.remote-action-group ul li.remote-action-chk-protocol{color:#000}.remote-action-group ul li.remote-action-name,.remote-action-group ul li.remote-action-chk-protocol{font-weight:bold}.remote-action-group ul li.remote-action-password,.remote-action-group ul li.remote-action-sshkey,.remote-action-group ul li.remote-action-noauth{text-align:center;padding:4px 8px;width:45px}.remote-action-group ul li.remote-action-password{background-color:#e3ffe3;color:#999}.remote-action-group ul li.remote-action-sshkey{background-color:#fbe9c8;color:#666}.remote-action-group ul li.remote-action-noauth{background-color:#e0e0e0;color:#666}.remote-action-group ul li .btn{line-height:1.5;margin:0;padding:4px 8px;font-size:12px;border-radius:0}.remote-action-group ul li label{padding:0;display:block;float:left;margin-top:1px;cursor:pointer}.remote-action-group ul li input[type=checkbox]{display:block;float:left;margin:3px 5px 0 0}.remote-action-group ul li select{margin-top:-3px}.remote-action-group ul li:first-child{border-left:1px solid #ccc;border-top-left-radius:4px;border-bottom-left-radius:4px}.remote-action-group ul li.remote-action-btn:first-child{border:none}.remote-action-group ul li.remote-action-btn:first-child .btn{border-top-left-radius:4px;border-bottom-left-radius:4px}.remote-action-group ul li:last-child{border-top-right-radius:4px;border-bottom-right-radius:4px}.remote-action-group ul li.remote-action-btn:last-child{border:none}.remote-action-group ul li.remote-action-btn:last-child .btn{border-top-right-radius:4px;border-bottom-right-radius:4px}.remote-info-group{margin-bottom:3px;height:28px}.remote-info-group ul{display:inline-block;height:28px;margin:0;padding:0}.remote-info-group ul li{float:left;position:relative;display:block;height:28px;padding:4px 5px;border-top:1px solid #ccc;border-right:1px solid #ccc;border-bottom:1px solid #ccc}.remote-info-group ul li.remote-action-btn{background:none;padding:0;border:none}.remote-info-group ul li.remote-action-input{background:none;padding:4px 0}.remote-info-group ul li.remote-action-input select{border:none}.remote-info-group ul li label{padding:0;display:block;float:left;margin-top:1px;cursor:pointer}.remote-info-group ul li select{margin-top:-3px}.remote-info-group ul li:first-child{border-left:1px solid #ccc;border-top-left-radius:4px;border-bottom-left-radius:4px}.remote-info-group ul li:last-child{border-top-right-radius:4px;border-bottom-right-radius:4px}hr.small{margin:5px 0}.dlg-protocol-group{margin-bottom:3px}.dlg-protocol-group ul{display:block;height:28px;margin:0;padding:0}.dlg-protocol-group ul li{float:left;position:relative;display:block;height:28px;padding:4px 5px;background-color:#eee;border-top:1px solid #ccc;border-right:1px solid #ccc;border-bottom:1px solid #ccc}.dlg-protocol-group ul li.item-name{width:120px}.dlg-protocol-group ul li.item-btn{background:none;padding:0;border:none}.dlg-protocol-group ul li.item-input{background:none;border:none;padding:0}.dlg-protocol-group ul li .form-control{line-height:1.5;margin:0;padding:4px 5px;font-size:12px;height:28px;border-radius:0;border-left:none;width:100px}.dlg-protocol-group ul li label{padding:0;display:block;float:left;margin-top:1px;cursor:pointer}.dlg-protocol-group ul li input[type=checkbox]{display:block;float:left;margin:3px 5px 0 0}.dlg-protocol-group ul li:first-child{border-left:1px solid #ccc;border-top-left-radius:4px;border-bottom-left-radius:4px}.dlg-protocol-group ul li:first-child .btn,.dlg-protocol-group ul li:first-child .form-control{border-top-left-radius:4px;border-bottom-left-radius:4px}.dlg-protocol-group ul li:last-child{border-top-right-radius:4px;border-bottom-right-radius:4px}.dlg-protocol-group ul li:last-child .btn,.dlg-protocol-group ul li:last-child .form-control{border-top-right-radius:4px;border-bottom-right-radius:4px}.os-icon-windows:after{color:#00bcf6;content:"\f17a";font-size:18px;width:24px;height:24px;line-height:24px;display:inline-block;font-family:'FontAwesome'}.os-icon-linux:after{color:#fff;content:"\f17c";font-size:18px;width:24px;height:24px;line-height:24px;background-color:#333;border-radius:50%;display:inline-block;font-family:'FontAwesome'}.os-icon-macos:after{color:#a7a7a7;content:"\f179";font-size:20px;width:24px;height:24px;line-height:24px;display:inline-block;font-family:'FontAwesome'}.os-icon-ubuntu:after,.os-icon-debian:after,.os-icon-centos:after,.os-icon-redhat:after{content:" ";width:24px;height:24px;line-height:24px;display:inline-block}.os-icon-ubuntu:after{background:url(../img/os-icon/ubuntu-24x24.png) no-repeat}.os-icon-debian:after{background:url(../img/os-icon/debian-24x24.png) no-repeat}.os-icon-centos:after{background:url(../img/os-icon/centos-24x24.png) no-repeat}.os-icon-redhat:after{background:url(../img/os-icon/redhat-24x24.png) no-repeat}.disable-bg{position:absolute;background:url(../img/css/disable-bg.png) repeat;opacity:.45;z-index:990}.disable-message{display:inline-block;font-size:160%;position:absolute;padding:20px 40px;border:1px solid #2b0002;background-color:#65181a;color:#fff;opacity:.85;z-index:991}.table{margin-bottom:10px}.table>thead>tr>th{vertical-align:middle;border-bottom:2px solid #ddd}.table.table-info-list{width:auto}.table.table-info-list td{border-top:1px dotted #ddd;padding:5px 5px;vertical-align:top}.table.table-info-list td.key{text-align:right;width:1px;white-space:nowrap}.table.table-info-list td.value{text-align:left;font-family:Monaco,Lucida Console,Consolas,Courier,'Courier New',monospace;color:#767676}.table.table-info-list td .error{color:#cc3632;font-weight:bold}.table.table-info-list.table-info-list-lite{width:100%}.table.table-info-list.table-info-list-lite td{padding:5px 5px}.table.table-info-list.table-info-list-lite td.value{font-weight:normal}.table.table-info-list tr:first-child td{border-top:none}.table.table-config-list{width:100%}.table.table-config-list td{border:none;padding:5px}.table.table-config-list td.title{text-align:left;font-size:110%;font-weight:bolder}.table.table-config-list td.key{width:1px;white-space:nowrap;text-align:right;padding-right:15px}.table.table-config-list td.value{text-align:left}.table.table-config-list td.value input{width:4em;padding:0 5px;text-align:right}.table.table-config-list td.value .unit{margin-left:5px}.table.table-config-list td.value .desc{color:#999;margin-left:15px;display:inline-block}.table>thead>tr>th{padding:5px 5px;outline:none;white-space:nowrap;font-weight:normal;text-align:center;background-color:#ededed}.table>tbody>tr>td{padding:5px;text-align:center;vertical-align:middle}.table>tbody>tr>td .nowrap{white-space:nowrap}.table-data td.loading{text-align:left;padding:20px}.table-data .btn-group.open .dropdown-toggle{-webkit-box-shadow:none;box-shadow:none}.table.table-data thead .sorting,.table.table-data thead .sorting_asc,.table.table-data thead .sorting_desc{cursor:pointer}.table.table-data thead .sorting:after,.table.table-data thead .sorting_asc:after,.table.table-data thead .sorting_desc:after{bottom:4px;padding-left:5px;display:inline-block;font-family:'FontAwesome';opacity:.8}.table.table-data thead .sorting:after{opacity:.2;content:"\f0dc"}.table.table-data thead .sorting_asc:after{content:"\f0de"}.table.table-data thead .sorting_desc:after{content:"\f0dd"}.host-name{font-size:16px}.host-name-desc{cursor:pointer}.host-ip{font-size:12px;color:#999;display:inline-block;white-space:nowrap;font-family:Monaco,Lucida Console,Consolas,Courier,'Courier New',monospace;overflow:hidden;text-overflow:ellipsis}.td-ip-list{padding-right:20px;padding-left:5px}.td-ip-show-more{font-size:14px;width:12px;float:right;display:block}.td-ip-item{min-width:12em;width:12em;height:18px;padding:2px 4px;margin:1px 0;color:#333;text-align:center;white-space:nowrap;border-radius:9px;line-height:11px;font-size:11px;background:#dfdfdf !important}.td-ip-item span{display:inline-block;font-family:Monaco,Lucida Console,Consolas,Courier,'Courier New',monospace;font-size:11px;font-weight:400}.td-ip-item a{display:inline-block;width:14px;float:right;font-size:14px}.btn-group-sm>.btn{padding:3px 5px;font-size:12px}.pop-menu-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1040}.form-group{margin-bottom:5px}.badge{padding:3px 6px;border-radius:10px;font-size:13px;font-weight:400;background-color:#999}.badge.badge-sm{font-size:12px;padding:3px 5px;margin-top:0;border-radius:8px;text-shadow:none}.badge.badge-sup{margin-left:-8px;margin-top:-16px}.badge.badge-ignore{background-color:#e5e5e5;color:#999}.badge.badge-info{background-color:#33b7d0}.badge.badge-primary{background-color:#348fe2}.badge.badge-success{background-color:#368142}.badge.badge-warning{background-color:#f57523}.badge.badge-danger{background-color:#d34242}.btn-success .badge{color:#fff}.label{display:inline-block;padding:5px 10px;margin:2px;font-size:13px;font-weight:400;background-color:#999}.label.label-sm{font-size:12px;padding:3px 8px 4px 8px;margin-top:0;border-radius:3px}.label.label-ignore{background-color:#e5e5e5;color:#aaa;text-shadow:-1px -1px 1px #fff}.label.label-info{background-color:#33b7d0}.label.label-primary{background-color:#348fe2}.label.label-success{background-color:#368142}.label.label-warning{background-color:#f57523}.label.label-danger{background-color:#d34242}.progress.progress-sm{height:18px;margin-bottom:2px;background-color:#aaa}.progress.progress-sm.button{cursor:pointer}.progress.progress-sm .progress-bar{display:block;font-size:11px;float:none}.col-sm-1,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9,.col-sm-10,.col-sm-11,.col-sm-12{padding-right:5px;padding-left:5px}.input-group :-moz-placeholder{color:#d2d2d2}.input-group ::-moz-placeholder{color:#d2d2d2}.input-group input:-ms-input-placeholder,.input-group textarea:-ms-input-placeholder{color:#d2d2d2}.input-group input::-webkit-input-placeholder,.input-group textarea::-webkit-input-placeholder{color:#d2d2d2}.modal .modal-content{border-radius:0}.modal .modal-header .close{margin-top:-4px;margin-right:-6px}.modal .modal-header .close:hover{color:#9c3023;opacity:1}.modal .modal-header .close:active,.modal .modal-header .close:focus,.modal .modal-header .close:visited{-webkit-appearance:none}.modal .form-horizontal .form-group,.modal .row{margin-left:0;margin-right:0}.alert{border-radius:0;padding:5px;margin-bottom:10px}.dropdown-menu{min-width:0;font-size:13px}.form-control-sm{padding:3px 5px;font-size:13px;height:inherit}.form-group .control-label.require{color:#505050;font-weight:bold}.form-group .control-label.require:before{font-weight:normal;color:#ac4e43;position:absolute;margin-left:-1.2em;margin-top:1px;content:"\f069";font-size:8px;font-family:'FontAwesome'}.form-group .control-desc{padding-top:6px;color:#999}label.form-control-static input{display:inline-block;position:relative;margin-top:4px}.control-desc .popover{max-width:none;font-size:13px}body{padding:0;margin:0}#page-content{margin-bottom:44px}#page-footer nav.navbar{min-height:24px;height:24px;line-height:24px;background-color:#cdcdcd;font-size:12px;color:#6d6d6d}#page-footer nav.navbar .container{height:24px}#page-footer nav.navbar p{margin:0 auto;text-align:center}.page-header{box-shadow:0 0 3px rgba(0,0,0,0.5);min-height:48px;top:0;width:100%;height:48px;margin:0 0 10px;border:none;background-color:#2a2a2a}.page-header .top-navbar{min-height:48px;height:48px;line-height:47px;background-color:#3a3a3a;color:#ccc}.page-header .top-navbar a{color:#d5d5d5}.page-header .top-navbar a:hover{color:#5a8fee}.page-header .top-navbar .brand{float:left;display:inline-block;padding:12px 0;margin:0}.page-header .top-navbar .brand .site-logo{display:block;width:86px;height:24px;background:url(../img/site-logo-small.png) no-repeat}.page-header .top-navbar .breadcrumb-container{float:left;display:inline-block;margin:0;padding:0}.page-header .top-navbar .breadcrumb-container .breadcrumb{background-color:#3a3a3a;margin:0;border-radius:0;border:none;padding:0 0 0 20px;font-size:16px;color:#ccc}.page-header .top-navbar .breadcrumb-container .breadcrumb>li+li:before{font-size:18px;padding:0 5px;color:#555;content:'|'}.page-header .top-navbar .breadcrumb-container .breadcrumb>li.title{font-size:18px}.page-header .top-navbar .breadcrumb-container .breadcrumb>li.sub-title{font-size:14px;color:#b3b3b3;line-height:47px}.page-header .top-navbar .status-container{float:right}.op_box{display:block;padding:5px;margin:0}.op_box.op_error{background-color:#ffb8b5;border:1px solid #d47e7b;color:#333}.op_box.op_wait{background:#e5e5e5;border:1px solid #a8a8a8;color:#333}.op_box.op_success{background:#acf1b2;border:1px solid #82df82;color:#333}.info-box{width:100%;margin:30px auto}.info-box .info-icon-box{z-index:-1;position:absolute;min-height:194px;overflow:hidden}.info-box .info-icon-box .fa{margin-top:30px;font-size:164px}.info-box .info-message-box{min-height:328px;border:1px solid #fff;background-color:rgba(255,255,255,0.76);box-shadow:2px 2px 3px rgba(0,0,0,0.3);padding:15px 20px 35px 30px;margin-left:98.4px}.info-box .info-message-box .title{font-size:180%;margin:15px 0}.info-box .info-message-box hr{margin:10px 0 20px;border-top:none;border-bottom:1px dashed #d3d3d3}.info-box .op_box{margin:5px 0;text-align:center}.content-box{background-color:#fff;padding:20px;box-shadow:1px 1px 1px rgba(0,0,0,0.3)}.content-box .welcome-message .fa{display:block;color:#ff272a;font-size:18px;float:left}.content-box .welcome-message span{display:block;line-height:18px;padding-left:23px}.content-box .table{width:auto;margin-left:20px}.content-box .table td{border-top:1px dotted #ddd;padding:5px}.content-box .table td.key{text-align:right}.content-box .table td.value{text-align:left;font-weight:bold}.content-box .table tr:first-child td{border-top:none}.content-box table.form{width:auto;margin-left:20px}.content-box table.form td{padding:5px;line-height:1.42857143;vertical-align:middle}.content-box table.form td.key{text-align:right}.content-box table.form td label{margin-bottom:0}.content-box table.form td .form-control{height:30px;padding:5px 10px;font-size:inherit;line-height:inherit}.content-box h1 .fa-spin{color:#aaa}.content-box h1{font-size:180%}.content-box h2{font-size:140%}.content-box .op_box{margin:5px 0}.content-box .steps-detail{display:none;margin:10px;padding:10px;border:1px solid #b4b4b4;background-color:#dcdcdc}.content-box .steps-detail p{padding-left:5px;margin:2px 0 2px 1px}.content-box .steps-detail p.error{color:#fff;margin:2px 0 2px 0;background-color:#cc3632;border:1px solid #9c2a26}.content-box .alert.alert-warning{color:#6a542d;border:1px solid #e2cab4;background-color:#ffe4cb}.content-box .error{color:#cc3632}#gritter-notice-wrapper{z-index:9999}.gritter-bottom,.gritter-item,.gritter-top{background:rgba(0,0,0,0.8) !important}.gritter-top{border-top-left-radius:3px;border-top-right-radius:3px}.gritter-bottom{border-bottom-left-radius:3px;border-bottom-right-radius:3px}.gritter-close,.gritter-light .gritter-close{left:auto !important;right:5px !important;top:5px !important;width:16px !important;height:16px !important;line-height:16px !important;display:block !important;border-radius:50%}.gritter-close:before,.gritter-light .gritter-close:before{content:'\f00d' !important;font-family:FontAwesome !important;font-size:9px !important;width:16px !important;height:16px !important;line-height:16px !important;color:#fff !important;text-indent:0 !important;position:absolute !important;text-align:center !important;right:0 !important;top:0 !important}.gritter-title{font-size:13px !important;line-height:16px !important;padding-bottom:5px !important;font-weight:400 !important;color:#fff !important;text-shadow:none !important}.gritter-item{color:#aaa !important;font-size:13px !important;padding:2px 15px 5px !important}.gritter-error .gritter-bottom,.gritter-error .gritter-item,.gritter-error .gritter-top{background:rgba(123,32,32,0.9) !important}.gritter-error .gritter-title{color:#fff !important}.gritter-error .gritter-item{color:#ddd !important}.gritter-error .gritter-close{left:auto !important;right:5px !important;top:5px !important;width:16px !important;height:16px !important;line-height:16px !important;display:block !important;border-radius:50%;background:#e33b3b !important}.gritter-success .gritter-bottom,.gritter-success .gritter-item,.gritter-success .gritter-top{background:rgba(1,65,16,0.9) !important}.gritter-success .gritter-title{color:#ddd !important}.gritter-success .gritter-item{color:#ccc !important}.gritter-success .gritter-close{background:#0eb320 !important}#gritter-notice-wrapper{width:320px;max-width:480px}/*# sourceMappingURL=single.css.map */ \ No newline at end of file diff --git a/server/www/teleport/static/js/auth/login.js b/server/www/teleport/static/js/auth/login.js index a13455d..055371a 100644 --- a/server/www/teleport/static/js/auth/login.js +++ b/server/www/teleport/static/js/auth/login.js @@ -72,7 +72,6 @@ $app.on_init = function (cb_stack) { $app.dom.area_captcha.slideUp(100); }); - $app.dom.btn_login.click($app.login_account); $app.dom.captcha_image.click(function () { @@ -173,13 +172,12 @@ $app.login_account = function () { $app.do_account_login(str_username, str_password, str_captcha, str_oath, is_remember); } else { + $app.dom.btn_login.removeAttr('disabled'); $app.hide_op_box(); $app.show_op_box('error', tp_error_msg(ret.code, ret.message)); $app.dom.captcha_image.attr('src', '/auth/captcha?h=36&rnd=' + Math.random()); $app.dom.input_captcha.focus().select().val(''); } - - $app.dom.btn_login.removeAttr('disabled'); }, function () { $app.hide_op_box(); @@ -232,9 +230,9 @@ $app.init_blur_bg = function () { }; $app._update_blur_bg = function () { - for(;;) { + for (; ;) { var img_id = Math.floor(Math.random() * (BLUR_BG_IMG.length)); - if(img_id !== $app.last_img_idx) { + if (img_id !== $app.last_img_idx) { $app.last_img_idx = img_id; break; } @@ -251,9 +249,9 @@ $app.init_slogan = function () { }; $app._update_slogan = function () { - for(;;) { + for (; ;) { var msg_id = Math.floor(Math.random() * (SLOGAN.length)); - if(msg_id !== $app.last_slogan_idx) { + if (msg_id !== $app.last_slogan_idx) { $app.last_slogan_idx = msg_id; break; } diff --git a/server/www/teleport/static/js/teleport/common.js b/server/www/teleport/static/js/teleport/common.js index 935e8e5..97ad9c7 100644 --- a/server/www/teleport/static/js/teleport/common.js +++ b/server/www/teleport/static/js/teleport/common.js @@ -4,12 +4,13 @@ "use strict"; -$tp.notify_error = function (message_, title_) { +$tp.notify_error = function (message_, title_, timeout_) { var _title = title_ || ''; + var _t = timeout_ || 15000; $.gritter.add({ //sticky:true, class_name: 'gritter-error', - time: 10000, + time: _t, title: ' 错误:' + _title, text: message_ }); diff --git a/server/www/teleport/static/js/tp-utils.js b/server/www/teleport/static/js/tp-utils.js index c60a7a4..5e95b12 100644 --- a/server/www/teleport/static/js/tp-utils.js +++ b/server/www/teleport/static/js/tp-utils.js @@ -169,6 +169,7 @@ function tp_format_datetime(timestamp, format) { } var base64KeyStr = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/="; + function tp_base64_encode(input) { var output = ""; var chr1, chr2, chr3 = ""; @@ -236,6 +237,7 @@ function tp_get_file_name(path) { } var g_unique_id = (new Date()).valueOf(); + function tp_generate_id() { return g_unique_id++; } @@ -251,6 +253,7 @@ function htmlEncode(_s) { s = s.replace(/\"/g, """); return s; } + // ///*2.用正则表达式实现html解码*/ //function htmlDecode(_s) { @@ -274,11 +277,35 @@ function tp_sleep4debug(duration) { // 获取长度为len的随机字符串 function tp_gen_random_string(len) { len = len || 32; - var _chars = 'ABCDEFGHJKMNPQRSTWXYZabcdefhijkmnprstwxyz2345678'; // 默认去掉了容易混淆的字符oOLl,9gq,Vv,Uu,I1 + var _chars = 'ABCDEFGHJKMNPQRSTWXYZabcdefhijkmnprstwxyz2345678'; // 默认去掉了容易混淆的字符oO,Ll,9gq,Vv,Uu,I1 var max_pos = _chars.length; var ret = ''; for (var i = 0; i < len; i++) { ret += _chars.charAt(Math.floor(Math.random() * max_pos)); } return ret; -} \ No newline at end of file +} + +// 弱密码检测 +function tp_check_strong_password(p) { + var s = 0; + if (p.length < 8) + return false; + + for (var i = 0; i < p.length; ++i) { + var c = p.charCodeAt(i); + if (c >= 48 && c <= 57) // 数字 + s |= 1; + else if (c >= 65 && c <= 90) // 大写字母 + s |= 2; + else if (c >= 97 && c <= 122) // 小写字母 + s |= 4; + else + s |= 8; + } + + if((s&1) && (s&2) && (s&4)) + return true; + else + return false; +} diff --git a/server/www/teleport/static/js/user/reset-password.js b/server/www/teleport/static/js/user/reset-password.js index 81fe3c4..f739f47 100644 --- a/server/www/teleport/static/js/user/reset-password.js +++ b/server/www/teleport/static/js/user/reset-password.js @@ -5,62 +5,262 @@ $app.on_init = function (cb_stack) { title: $('#title'), icon_bg: $('#icon-bg'), - err_area: $('#error-area'), - err_message: $('#err-message'), - err_actions: $('#err-actions'), + op_message: null, - find_password_area: $('#find-my-password'), - username: $('#username'), - email: $('#email'), - captcha_image: $('#captcha-image'), - captcha: $('#captcha'), - btn_send_email: $('#btn-send-email'), - send_result:$('#send-result'), + error: { + area: $('#area-error'), + message: $('#area-error [data-field="message"]') + }, - password_area: $('#password-area') + find: { + area: $('#area-find-password'), + captcha_image: $('#area-find-password [data-field="captcha-image"]'), + input_username: $('#area-find-password [data-field="input-username"]'), + input_email: $('#area-find-password [data-field="input-email"]'), + input_captcha: $('#area-find-password [data-field="input-captcha"]'), + btn_submit: $('#area-find-password [data-field="btn-submit"]'), + message: $('#area-find-password [data-field="message"]') + }, + + set_password: { + area: $('#area-set-password'), + info: $('#area-set-password [data-field="info"]'), + input_password: $('#area-set-password [data-field="input-password"]'), + btn_switch_password: $('#area-set-password [data-field="btn-switch-password"]'), + btn_switch_password_icon: $('#area-set-password [data-field="btn-switch-password"] i'), + btn_submit: $('#area-set-password [data-field="btn-submit"]'), + message: $('#area-set-password [data-field="message"]') + } }; - $app.dom.captcha_image.click(function () { + $app.dom.find.captcha_image.click(function () { $(this).attr('src', '/auth/captcha?h=28&rnd=' + Math.random()); - $app.dom.captcha.focus().val(''); + $app.dom.find.input_captcha.focus().val(''); }); - $app.dom.btn_send_email.click(function() { - $app.on_send_email(); + $app.dom.find.btn_submit.click(function () { + $app.on_send_find_password_email(); }); - $app.options.mode = 3; + $app.dom.find.input_username.keydown(function (event) { + if (event.which === 13) { + $app.dom.find.input_email.focus(); + } else { + $('[data-toggle="popover"]').popover('hide'); + } + }); + $app.dom.find.input_email.keydown(function (event) { + if (event.which === 13) { + $app.dom.find.input_captcha.focus(); + } else { + $('[data-toggle="popover"]').popover('hide'); + } + }); + $app.dom.find.input_captcha.keydown(function (event) { + if (event.which === 13) { + $app.on_send_find_password_email(); + } else { + $('[data-toggle="popover"]').popover('hide'); + } + }); + + $app.dom.set_password.btn_submit.click(function () { + $app.on_set_new_password(); + }); + + $app.dom.set_password.input_password.keydown(function (event) { + if (event.which === 13) { + $app.on_set_new_password(); + } else { + $('[data-toggle="popover"]').popover('hide'); + } + }); + + $app.dom.set_password.btn_switch_password.click(function () { + if ('password' === $app.dom.set_password.input_password.attr('type')) { + $app.dom.set_password.input_password.attr('type', 'text'); + $app.dom.set_password.btn_switch_password_icon.removeClass('fa-eye').addClass('fa-eye-slash') + } else { + $app.dom.set_password.input_password.attr('type', 'password'); + $app.dom.set_password.btn_switch_password_icon.removeClass('fa-eye-slash').addClass('fa-eye') + } + }); if ($app.options.mode === 1) { // show 'find-my-password' page + $app.dom.op_message = $app.dom.find.message; $app.dom.title.text('重置密码'); - $app.dom.icon_bg.addClass('fa fa-search-plus').css('color', '#4366de'); - $app.dom.captcha_image.attr('src', '/auth/captcha?h=28&rnd=' + Math.random()); - $app.dom.find_password_area.show(); - $app.dom.username.focus(); + $app.dom.icon_bg.addClass('fa fa-search-plus').css('color', '#286090'); + $app.dom.find.captcha_image.attr('src', '/auth/captcha?h=28&rnd=' + Math.random()); + $app.dom.find.area.show(); + $app.dom.find.input_username.focus(); } else if ($app.options.mode === 2) { - // show 'password-expired' page + // show 'error' page $app.dom.icon_bg.addClass('fa fa-warning').css('color', '#ff6242'); if ($app.options.code === TPE_NOT_EXISTS) { $app.dom.title.text('链接无效'); - $app.dom.err_message.html('当前使用的密码重置链接无效,可能已经因过期而被清除!密码重置链接仅在24小时内有效,请及时设置您的新密码!'); + $app.dom.error.message.html('当前使用的密码重置链接无效,可能已经因过期而被清除!密码重置链接仅在24小时内有效,请及时设置您的新密码!'); } else if ($app.options.code === TPE_EXPIRED) { $app.dom.title.text('链接已过期'); - $app.dom.err_message.html('当前使用的密码重置链接已经过期!密码重置链接仅在24小时内有效,请及时设置您的新密码!'); + $app.dom.error.message.html('当前使用的密码重置链接已经过期!密码重置链接仅在24小时内有效,请及时设置您的新密码!'); + } else if ($app.options.code === TPE_NETWORK) { + $app.dom.title.text('功能未启用'); + $app.dom.error.message.html('系统尚未配置邮件发送功能,无法进行密码找回操作!'); + } else if ($app.options.code === TPE_PRIVILEGE) { + $app.dom.title.text('功能已禁用'); + $app.dom.error.message.html('根据系统配置,禁止进行密码找回操作!'); } else { - $app.dom.title.text('更新密码'); + $app.dom.title.text('发生错误!'); + $app.dom.error.message.html('很抱歉发生了错误:' + tp_error_msg($app.options.code)); } - $app.dom.err_area.show(); + $app.dom.error.area.show(); } else if ($app.options.mode === 3) { // show 'set-new-password' page + $app.dom.op_message = $app.dom.set_password.message; $app.dom.title.text('重置密码'); $app.dom.icon_bg.addClass('fa fa-info-circle').css('color', '#357a3c'); - $app.dom.password_area.show(); + if ($app.options.force_strong) + $app.dom.set_password.info.show(); + $app.dom.set_password.area.show(); } cb_stack.exec(); }; -$app.on_send_email = function() { - +$app.hide_op_box = function () { + $app.dom.op_message.hide(); +}; + +$app.show_op_box = function (op_type, op_msg) { + $app.dom.op_message.html(op_msg); + $app.dom.op_message.removeClass().addClass('op_box op_' + op_type); + $app.dom.op_message.show(); +}; + +$app.on_send_find_password_email = function () { + $app.hide_op_box(); + var str_username = $app.dom.find.input_username.val(); + var str_email = $app.dom.find.input_email.val(); + var str_captcha = $app.dom.find.input_captcha.val(); + + if (str_username.length === 0) { + $app.show_op_box('error', '账号未填写!'); + $app.dom.find.input_username.attr('data-content', "请填写您的账号!").focus().popover('show'); + // $app.dom.find.input_username.focus(); + return; + } + + if (str_email.length === 0) { + $app.show_op_box('error', '邮箱未填写!'); + $app.dom.find.input_email.attr('data-content', "请填写您的邮箱!").focus().popover('show'); + // $app.dom.find.input_email.focus(); + return; + } + + if (str_captcha.length !== 4) { + $app.show_op_box('error', '验证码错误!'); + $app.dom.find.input_captcha.attr('data-content', "验证码为4位数字和字母的组合,请重新填写!").focus().select().popover('show'); + return; + } + + $app.dom.find.btn_submit.attr('disabled', 'disabled'); + $tp.ajax_post_json('/auth/verify-captcha', {captcha: str_captcha}, + function (ret) { + if (ret.code === TPE_OK) { + // 验证成功 + $app.hide_op_box(); + $app.show_op_box('wait', ' 正在发送密码重置确认函,请稍候...'); + $app.do_send_reset_email(str_username, str_email, str_captcha); + } + else { + $app.dom.find.btn_submit.removeAttr('disabled'); + $app.hide_op_box(); + $app.show_op_box('error', tp_error_msg(ret.code, ret.message)); + $app.dom.captcha_image.attr('src', '/auth/captcha?h=28&rnd=' + Math.random()); + $app.dom.input_captcha.focus().select().val(''); + } + }, + function () { + $app.hide_op_box(); + $app.show_op_box('error', '很抱歉,无法连接服务器!请稍后再试一次!'); + $app.dom.find.btn_submit.removeAttr('disabled'); + } + ); +}; + +$app.do_send_reset_email = function (str_username, str_email, str_captcha) { + $tp.ajax_post_json('/user/do-reset-password', { + mode: 3, + username: str_username, + email: str_email, + captcha: str_captcha + }, + function (ret) { + $app.dom.find.btn_submit.removeAttr('disabled'); + if (ret.code === TPE_OK) { + $app.show_op_box('success', '密码重置确认函已发送!'); + } else { + $app.hide_op_box(); + var msg = ''; + if (ret.code === TPE_NOT_EXISTS) + msg = tp_error_msg(ret.code, '没有此用户'); + else + msg = tp_error_msg(ret.code, ret.message); + $app.show_op_box('error', msg); + } + }, + function () { + $app.dom.find.btn_submit.removeAttr('disabled'); + $app.hide_op_box(); + $app.show_op_box('error', '网络故障,密码重置确认函发送失败!'); + }, + 15000 + ); +}; + +$app.on_set_new_password = function () { + $app.hide_op_box(); + var str_password = $app.dom.set_password.input_password.val(); + + if (str_password.length === 0) { + $app.show_op_box('error', '密码未填写!'); + $app.dom.set_password.input_password.attr('data-content', "请设置您的新密码!").focus().popover('show'); + return; + } + + if ($app.options.force_strong) { + if (!tp_check_strong_password(str_password)) { + $app.show_op_box('error', '抱歉,不能使用弱密码!'); + $app.dom.set_password.input_password.attr('data-content', "请设置强密码:至少8位,必须包含大写字母、小写字母以及数字!").focus().popover('show'); + return; + } + } + + $tp.ajax_post_json('/user/do-reset-password', { + mode: 4, + token: $app.options.token, + password: str_password + }, + function (ret) { + $app.dom.find.btn_submit.removeAttr('disabled'); + if (ret.code === TPE_OK) { + $app.show_op_box('success', '密码已重置,正在转到登录界面!'); + setTimeout(function () { + window.location.href = '/'; + }, 2000); + } else { + var msg = ''; + if (ret.code === TPE_NOT_EXISTS) + msg = tp_error_msg(ret.code, '无效的密码重置链接!'); + else + msg = tp_error_msg(ret.code, ret.message); + $app.show_op_box('error', msg); + } + }, + function () { + $app.dom.find.btn_submit.removeAttr('disabled'); + $app.hide_op_box(); + $app.show_op_box('error', '网络故障,密码重置失败!'); + } + ); }; diff --git a/server/www/teleport/static/js/user/user-list.js b/server/www/teleport/static/js/user/user-list.js index 419a9c6..0f46fe4 100644 --- a/server/www/teleport/static/js/user/user-list.js +++ b/server/www/teleport/static/js/user/user-list.js @@ -989,10 +989,8 @@ $app.create_dlg_reset_password = function () { dlg.do_send_reset_email = function () { dlg.dom.btn_send_reset_email.attr('disabled', 'disabled'); $tp.ajax_post_json('/user/do-reset-password', { - id: dlg.field_id, mode: 1, - // email: dlg.field_email, - password: '' + id: dlg.field_id }, function (ret) { dlg.dom.btn_send_reset_email.removeAttr('disabled'); @@ -1020,9 +1018,8 @@ $app.create_dlg_reset_password = function () { } $tp.ajax_post_json('/user/do-reset-password', { - id: dlg.field_id, mode: 2, - // email: '', + id: dlg.field_id, password: dlg.field_password }, function (ret) { diff --git a/server/www/teleport/static/less/single.less b/server/www/teleport/static/less/single.less index b288115..bfdc4d3 100644 --- a/server/www/teleport/static/less/single.less +++ b/server/www/teleport/static/less/single.less @@ -40,13 +40,6 @@ body { } } -//@header-height: @top-navbar-height; // + @top-toolbar-height; - -// 顶部状态栏 -//.page-header-fixed { -//padding-top: @header-height; -//} - .page-header { //border: none; box-shadow: 0 0 3px rgba(0, 0, 0, .5); @@ -166,6 +159,37 @@ body { } } +.op_box { + display: block; + padding: 5px; + //border-radius: 3px; + //text-align: center; + //margin: 5px 20px 10px 20px; + //margin: 5px 0; + margin: 0; + + &.op_error { + //background: rgba(255, 5, 0, 0.5); + background-color: #ffb8b5; + border: 1px solid #d47e7b; + color: #333; + } + + &.op_wait { + //background: rgba(255, 255, 255, 0.3); + background: #e5e5e5; + border: 1px solid #a8a8a8; + color: #333; + } + + &.op_success { + //background: rgba(255, 255, 255, 0.3); + background: #acf1b2; + border: 1px solid #82df82; + color: #333; + } +} + // for error/reset-password page .info-box { @error-icon-size: 164px; @@ -203,11 +227,16 @@ body { hr { //border-top: 1px solid #d3d3d3; //border-bottom: 1px solid #fff; - margin:10px 0 20px; + margin: 10px 0 20px; border-top: none; border-bottom: 1px dashed #d3d3d3; } } + + .op_box { + margin: 5px 0; + text-align: center; + } } // for maintenance page @@ -293,25 +322,9 @@ body { } .op_box { - display: block; - padding: 5px; - border-radius: 3px; - //text-align: center; - //margin: 5px 20px 10px 20px; margin: 5px 0; } - .op_error { - //background: rgba(255, 5, 0, 0.5); - background-color: #cc3632; - border: 1px solid #9c2a26; - color: #fff; - } - - .op_wait { - background: rgba(255, 255, 255, 0.3); - } - .steps-detail { display: none; margin: 10px; diff --git a/server/www/teleport/view/page_base.mako b/server/www/teleport/view/page_base.mako index 03afea9..8da8521 100644 --- a/server/www/teleport/view/page_base.mako +++ b/server/www/teleport/view/page_base.mako @@ -18,11 +18,14 @@