Procházet zdrojové kódy

Fixed register page bug and request certificate buig

Toby Chui před 4 měsíci
rodič
revize
48d757a2b3
3 změnil soubory, kde provedl 76 přidání a 17 odebrání
  1. 20 3
      web/components/cert.html
  2. 38 7
      web/components/httprp.html
  3. 18 7
      web/login.html

+ 20 - 3
web/components/cert.html

@@ -161,7 +161,9 @@
         msgbox("Requesting certificate via " + defaultCA  +"...");
 
         //Request ACME for certificate
+        let buttonOriginalHTML = "";
         if (btn != undefined){
+            buttonOriginalHTML = $(btn).html();
             $(btn).addClass('disabled');
             $(btn).html(`<i class="ui loading spinner icon"></i>`);
         }
@@ -169,11 +171,26 @@
         obtainCertificate(domain, dns, defaultCA.trim(), function(succ){
             if (btn != undefined){
                 $(btn).removeClass('disabled');
-                if (succ){
-                    $(btn).html(`<i class="ui green check icon"></i>`);
+                if ($(btn).hasClass("icon")){
+                    //Only change the button icon
+                    if (succ){
+                        $(btn).html(`<i class="ui green check icon"></i>`);
+                    }else{
+                        $(btn).html(`<i class="ui red times icon"></i>`);
+                    }
                 }else{
-                    $(btn).html(`<i class="ui red times icon"></i>`);
+                    //Show error or success icon with text
+                    if (succ){
+                        $(btn).html(`<i class="ui green check icon"></i> Requested`);
+                    }else{
+                        $(btn).html(`<i class="ui red times icon"></i> Error`);
+                    }
                 }
+
+                //Restore the button after 3 seconds
+                setTimeout(function(){
+                    $(btn).html(buttonOriginalHTML);
+                }, 3000);
                 
                 setTimeout(function(){
                     initManagedDomainCertificateList();

+ 38 - 7
web/components/httprp.html

@@ -350,15 +350,27 @@
                 let originalContent = $(column).html();
 
                 //Check if this host is covered within one of the certificates. If not, show the icon
-                let domainIsCovered = true;
+                let enableQuickRequestButton = true;
                 let domains = [payload.RootOrMatchingDomain]; //Domain for getting certificate if needed
                 for (var i = 0; i < payload.MatchingDomainAlias.length; i++){
                     let thisAliasName = payload.MatchingDomainAlias[i];
                     domains.push(thisAliasName);
                 }
-                if (true){
-                    domainIsCovered = false;
+
+                //Check if the domain or alias contains wildcard, if yes, disabled the get certificate button
+                if (payload.RootOrMatchingDomain.indexOf("*") > -1){
+                    enableQuickRequestButton = false;
+                }
+                
+                if (payload.MatchingDomainAlias != undefined){
+                    for (var i = 0; i < payload.MatchingDomainAlias.length; i++){
+                        if (payload.MatchingDomainAlias[i].indexOf("*") > -1){
+                            enableQuickRequestButton = false;
+                            break;
+                        }
+                    }
                 }
+
                 //encode the domain to DOM
                 let certificateDomains = encodeURIComponent(JSON.stringify(domains));
                 
@@ -371,9 +383,8 @@
                     </div><br>
                     <button class="ui basic compact tiny button" style="margin-left: 0.4em; margin-top: 0.4em;" onclick="editAliasHostnames('${uuid}');"><i class=" blue at icon"></i> Alias</button>
                     <button class="ui basic compact tiny button" style="margin-left: 0.4em; margin-top: 0.4em;" onclick="editAccessRule('${uuid}');"><i class="ui filter icon"></i> Access Rule</button>
-                    <button class="ui basic compact tiny ${domainIsCovered?"disabled":""} button" style="margin-left: 0.4em; margin-top: 0.4em;" onclick="requestCertificateForExistingHost('${uuid}', '${certificateDomains}');"><i class="green lock icon"></i> Get Certificate</button>
+                    <button class="ui basic compact tiny ${enableQuickRequestButton?"":"disabled"} button" style="margin-left: 0.4em; margin-top: 0.4em;" onclick="requestCertificateForExistingHost('${uuid}', '${certificateDomains}', this);"><i class="green lock icon"></i> Get Certificate</button>
                 `);
-                
 
                 $(".hostAccessRuleSelector").dropdown();
             }else{
@@ -536,9 +547,29 @@
         Certificate Shortcut
     */
 
-    function requestCertificateForExistingHost(hostUUID, RootAndAliasDomains){
+    function requestCertificateForExistingHost(hostUUID, RootAndAliasDomains, btn=undefined){
         RootAndAliasDomains = JSON.parse(decodeURIComponent(RootAndAliasDomains))
-        alert(RootAndAliasDomains.join(", "))
+        let renewDomainKey = RootAndAliasDomains.join(",");
+        let preferedACMEEmail = $("#prefACMEEmail").val();
+        if (preferedACMEEmail == ""){
+            msgbox("Preferred email for ACME registration not set", false);
+            return;
+        }
+        let defaultCA = $("#defaultCA").dropdown("get value");
+        if (defaultCA == ""){
+            defaultCA = "Let's Encrypt";
+        }
+
+        //Check if the root or the alias domain contain wildcard character, if yes, return error
+        for (var i = 0; i < RootAndAliasDomains.length; i++){
+            if (RootAndAliasDomains[i].indexOf("*") != -1){
+                msgbox("Wildcard domain can only be setup via ACME tool", false);
+                return;
+            }
+        }
+        
+        //Renew the certificate
+        renewCertificate(renewDomainKey, false, btn);
     }
 
     //Bind on tab switch events

+ 18 - 7
web/login.html

@@ -140,7 +140,7 @@
                         <div class="field registerOnly">
                             <div class="ui left icon input">
                                 <i class="lock icon"></i>
-                                <input id="repeatMagic" type="password" name="passwordconfirm" placeholder="Confirm Password">
+                                <input id="repeatMagic" type="password" name="passwordconfirm" placeholder="Confirm Password" >
                             </div>
                         </div>
                         <div class="field loginOnly" style="text-align: left;">
@@ -179,7 +179,7 @@
         </div>
     <script>
         AOS.init();
-
+        var registerMode = false;
         var redirectionAddress = "/";
         var loginAddress = "/api/auth/login";
         $(".checkbox").checkbox();
@@ -197,6 +197,7 @@
             $.get("/api/auth/userCount", function(data){
                 if (data == 0){
                     //Allow user creation
+                    registerMode = true;
                     $(".loginOnly").hide();
                     $(".registerOnly").show();
                 }
@@ -240,13 +241,23 @@
         $("input").on("keydown",function(event){
             if (event.keyCode === 13) {
                 event.preventDefault();
-                if ($(this).attr("id") == "magic"){
-                    login();
+                if (registerMode){
+                    //Register mode
+                    if ($(this).attr("id") == "repeatMagic"){
+                        $("#regsiterbtn").click();
+                    }else{
+                        //Focus to next field
+                        $(this).next().focus();
+                    }
                 }else{
-                    //Fuocus to password field
-                    $("#magic").focus();
+                    //Login mode
+                    if ($(this).attr("id") == "magic"){
+                        login();
+                    }else{
+                        //Fuocus to password field
+                        $("#magic").focus();
+                    }
                 }
-                
             }
         });