Plugin Directory

Changeset 2952902


Ignore:
Timestamp:
08/13/2023 02:50:17 PM (3 years ago)
Author:
speedify
Message:

Releasing version 3.6.2

Location:
auto-install-free-ssl
Files:
277 added
6 edited

Legend:

Unmodified
Added
Removed
  • auto-install-free-ssl/trunk/FreeSSLAuto/src/Acme/AcmeV2.php

    r2946395 r2952902  
    565565   
    566566    /**
    567      *
    568      *
    569      * Generate SSL
     567     * Step 3 of Generate SSL
     568     * Improved since 3.6.2
     569     *
    570570     * @param $domains
    571571     * @param $reuseCsr
     
    599599            $this->logger->exception_sse_friendly( "Invalid response code: " . $this->client->getLastCode() . ", " . json_encode( $result ), __FILE__, __LINE__ );
    600600            //since 3.6.1, Don't translate exception message
    601         }
    602        
    603         $location = $result['certificate'];
    604         // waiting loop
    605         $certificates = [];
    606         while ( 1 ) {
    607             //$this->client->getLastLinks();
    608             $result = $this->client->get( $location, null, true );
    609             $this->logger->log( __( "Location value", 'auto-install-free-ssl' ) . ": " . $location );
    610            
    611             if ( 202 === $this->client->getLastCode() ) {
    612                 $sec = __( "1", 'auto-install-free-ssl' );
    613                 /* translators: %s: Number of second */
    614                 $this->logger->log( sprintf( __( "Certificate generation pending, sleeping %s second.", 'auto-install-free-ssl' ), $sec ) );
    615                 sleep( 1 );
    616             } elseif ( 200 === $this->client->getLastCode() ) {
    617                 $this->logger->log( __( "We have got a certificate! YAY!", 'auto-install-free-ssl' ) );
    618                 $certificates = explode( "\n\n", $result );
    619                 break;
     601            return false;
     602        }
     603       
     604       
     605        if ( empty($result['certificate']) ) {
     606            $this->logger->exception_sse_friendly( "The 'certificate' key (location value) is empty in the last response from Let's Encrypt™. Please try again after some time.", __FILE__, __LINE__ );
     607            return false;
     608        } else {
     609            $location = $result['certificate'];
     610            // waiting loop
     611            $certificates = [];
     612            while ( 1 ) {
     613                //$this->client->getLastLinks();
     614                $result = $this->client->get( $location, null, true );
     615                $this->logger->log( __( "Location value", 'auto-install-free-ssl' ) . ": " . $location );
     616               
     617                if ( 202 === $this->client->getLastCode() ) {
     618                    $sec = __( "1", 'auto-install-free-ssl' );
     619                    /* translators: %s: Number of second */
     620                    $this->logger->log( sprintf( __( "Certificate generation pending, sleeping %s second.", 'auto-install-free-ssl' ), $sec ) );
     621                    sleep( 1 );
     622                } elseif ( 200 === $this->client->getLastCode() ) {
     623                    $this->logger->log( __( "We have got a certificate! YAY!", 'auto-install-free-ssl' ) );
     624                    $certificates = explode( "\n\n", $result );
     625                    break;
     626                } else {
     627                    //$this->logger->exception_sse_friendly(__( "Can't get a certificate: HTTP code", 'auto-install-free-ssl' ) . ": ". $this->client->getLastCode(), __FILE__, __LINE__);
     628                    $this->logger->exception_sse_friendly( "Can't get a certificate: HTTP code: " . $this->client->getLastCode(), __FILE__, __LINE__ );
     629                    //since 3.6.1, Don't translate exception message.
     630                    $certificates = [];
     631                    break;
     632                    //return false;
     633                }
     634           
     635            }
     636           
     637            if ( empty($certificates) ) {
     638                //$this->logger->exception_sse_friendly(__( "No certificates generated", 'auto-install-free-ssl' ), __FILE__, __LINE__);
     639                $this->logger->exception_sse_friendly( "No certificates generated. Please try again.", __FILE__, __LINE__ );
     640                //since 3.6.1, Don't translate exception message.
     641                return false;
    620642            } else {
    621                 //$this->logger->exception_sse_friendly(__( "Can't get a certificate: HTTP code", 'auto-install-free-ssl' ) . ": ". $this->client->getLastCode(), __FILE__, __LINE__);
    622                 $this->logger->exception_sse_friendly( "Can't get a certificate: HTTP code: " . $this->client->getLastCode(), __FILE__, __LINE__ );
    623                 //since 3.6.1, Don't translate exception message.
    624             }
    625        
    626         }
    627        
    628         if ( empty($certificates) ) {
    629             //$this->logger->exception_sse_friendly(__( "No certificates generated", 'auto-install-free-ssl' ), __FILE__, __LINE__);
    630             $this->logger->exception_sse_friendly( "No certificates generated", __FILE__, __LINE__ );
    631             //since 3.6.1, Don't translate exception message.
    632         }
    633        
    634         $this->logger->log( __( "Saving Certificate (CRT) certificate.pem", 'auto-install-free-ssl' ) );
    635         file_put_contents( $domainPath . DS . 'certificate.pem', $certificates[0] );
    636         $this->logger->log( __( "Saving (CABUNDLE) cabundle.pem", 'auto-install-free-ssl' ) );
    637         file_put_contents( $domainPath . DS . 'cabundle.pem', $certificates[1] );
    638         $this->logger->log( __( "Saving fullchain.pem", 'auto-install-free-ssl' ) );
    639         file_put_contents( $domainPath . DS . 'fullchain.pem', $result );
    640         /* translators: "Let's Encrypt" is a nonprofit SSL certificate authority. */
    641         $this->logger->log_v2( 'SUCCESS', __( "Done!!!! Let's Encrypt™ ACME V2 SSL certificate successfully issued!!", 'auto-install-free-ssl' ), [
    642             'event' => 'gist',
    643         ] );
    644         update_option( 'aifs_number_of_ssl_generated', get_option( 'aifs_number_of_ssl_generated' ) + 1 );
    645         //@since 3.4.0
    646         delete_option( 'aifs_is_generated_ssl_installed' );
    647         //@since 3.4.0
    648         return true;
     643                $this->logger->log( __( "Saving Certificate (CRT) certificate.pem", 'auto-install-free-ssl' ) );
     644                file_put_contents( $domainPath . DS . 'certificate.pem', $certificates[0] );
     645                $this->logger->log( __( "Saving (CABUNDLE) cabundle.pem", 'auto-install-free-ssl' ) );
     646                file_put_contents( $domainPath . DS . 'cabundle.pem', $certificates[1] );
     647                $this->logger->log( __( "Saving fullchain.pem", 'auto-install-free-ssl' ) );
     648                file_put_contents( $domainPath . DS . 'fullchain.pem', $result );
     649                /* translators: "Let's Encrypt" is a nonprofit SSL certificate authority. */
     650                $this->logger->log_v2( 'SUCCESS', __( "Done!!!! Let's Encrypt™ ACME V2 SSL certificate successfully issued!!", 'auto-install-free-ssl' ), [
     651                    'event' => 'gist',
     652                ] );
     653                update_option( 'aifs_number_of_ssl_generated', get_option( 'aifs_number_of_ssl_generated' ) + 1 );
     654                //@since 3.4.0
     655                delete_option( 'aifs_is_generated_ssl_installed' );
     656                //@since 3.4.0
     657                return true;
     658            }
     659       
     660        }
     661   
    649662    }
    650663   
  • auto-install-free-ssl/trunk/FreeSSLAuto/src/Admin/ForceSSL.php

    r2946395 r2952902  
    370370                           
    371371                            if ( strcmp( $ssl_details['domain_site']['error_cause'], $ssl_details['domain_other_version']['error_cause'] ) == 0 ) {
    372                                 $text_display .= __( "Error cause", 'auto-install-free-ssl' ) . ": " . $ssl_details['domain_site']['error_cause'] . ".";
     372                                $text_display .= "<br />" . __( "Error cause", 'auto-install-free-ssl' ) . ": " . $ssl_details['domain_site']['error_cause'] . ".";
    373373                            } else {
    374                                 $text_display .= __( "Error cause for", 'auto-install-free-ssl' ) . " " . $ssl_details['domain_site']['url'] . ": " . $ssl_details['domain_site']['error_cause'] . ". " . __( "Error cause for", 'auto-install-free-ssl' ) . " " . $ssl_details['domain_other_version']['url'] . ": " . $ssl_details['domain_other_version']['error_cause'] . ".";
     374                                $text_display .= "<br />" . __( "Error cause for", 'auto-install-free-ssl' ) . " " . $ssl_details['domain_site']['url'] . ": " . $ssl_details['domain_site']['error_cause'] . ". " . __( "Error cause for", 'auto-install-free-ssl' ) . " " . $ssl_details['domain_other_version']['url'] . ": " . $ssl_details['domain_other_version']['error_cause'] . ".";
    375375                            }
    376376                       
     
    434434                update_option( 'home', str_ireplace( 'http:', 'https:', get_option( 'home' ) ) );
    435435                //redirect to plugin main page, so that HTTPS be forced immediately. This will send the user to the login page over HTTPS.
     436               
    436437                if ( !is_ssl() ) {
    437438                    //$redirect_url = "https://".aifs_get_domain()."/wp-login.php?redirect_to=".urlencode(admin_url('admin.php?page=auto_install_free_ssl'));
    438439                    wp_redirect( admin_url( 'admin.php?page=auto_install_free_ssl' ) );
     440                    exit;
    439441                }
     442           
    440443            } else {
    441444                //Update siteurl and home options with HTTP
    442445                update_option( 'siteurl', str_ireplace( 'https:', 'http:', get_option( 'siteurl' ) ) );
    443446                update_option( 'home', str_ireplace( 'https:', 'http:', get_option( 'home' ) ) );
     447                $success_text = __( "Force HTTPS has been Deactivated successfully, and you have reverted to HTTP.", 'auto-install-free-ssl' );
     448                $this->logger->write_log( 'info', $success_text, [
     449                    'event' => 'ping',
     450                ] );
    444451                //Display success message (Deactivated)
    445                 aifs_add_flash_notice( __( "Force HTTPS has been Deactivated successfully, and you have reverted to HTTP.", 'auto-install-free-ssl' ) );
     452                aifs_add_flash_notice( $success_text );
    446453            }
    447454       
  • auto-install-free-ssl/trunk/FreeSSLAuto/src/Admin/GenerateSSLmanually.php

    r2946395 r2952902  
    11751175                    if ( $freessl->step3GenerateSSL( $this->return_array_step1['domains_array'], false, $this->return_array_step1 ) ) {
    11761176                        //return true;
     1177                        //reload option to keep 'response_final' saved in step3GenerateSSL
     1178                        $this->return_array_step1 = get_option('aifs_return_array_step1_manually');
     1179
    11771180                        //update option
    11781181                        $this->return_array_step1['current_step_number'] = 3;
     
    11951198                        //return false;
    11961199                        /* translators: %s: A domain name, e.g., example.com */
    1197                         echo "<h3 style='color: red'>". sprintf(__("Sorry, the SSL certificate was NOT issued to %s due to an error. Please check the log for details.", 'auto-install-free-ssl'), ("<em>" . $this->return_array_step1['domains_array'][0] . "</em>")) ."</h3>";
     1200                        $error_text .= "<span style='color: red'>". sprintf(__("Sorry, the SSL certificate was NOT issued to %s due to an error. Please check the log for details.", 'auto-install-free-ssl'), ("<em>" . $this->return_array_step1['domains_array'][0] . "</em>")) ."</span>";
     1201                        $error_text .=  " <span style='font-weight: bold;'>". __("Please try again later.", 'auto-install-free-ssl') ."</span>";
     1202
     1203                        //$this->logger->log_v2( 'error', sprintf("Sorry, the SSL certificate was NOT issued to %s due to an error. Please try again after some time.", ("<em>" . $this->return_array_step1['domains_array'][0] . "</em>")) );
     1204
     1205                        aifs_add_flash_notice($error_text, "error");
     1206                        $redirect_url = admin_url('admin.php?page=aifs_generate_ssl_manually');
     1207                        if($_POST['aifs_challenge_type'] == "dns-01"){
     1208                            $redirect_url .= '&tab='.$_POST['aifs_challenge_type'];
     1209                        }
     1210                        wp_redirect($redirect_url);
     1211                        exit;
    11981212                    }
    11991213
  • auto-install-free-ssl/trunk/FreeSSLAuto/src/Admin/HomeOptions.php

    r2921218 r2952902  
    2929
    3030use  AutoInstallFreeSSL\FreeSSLAuto\Acme\Factory as AcmeFactory ;
     31use  AutoInstallFreeSSL\FreeSSLAuto\Logger ;
    3132/**
    3233 * Home page options
     
    3738    public  $factory ;
    3839    public  $app_settings ;
     40    private  $logger ;
    3941    /**
    4042     * Start up
     
    4749        $this->factory = new Factory();
    4850        $this->app_settings = aifs_get_app_settings();
     51        $this->logger = new Logger();
    4952        add_action( 'admin_enqueue_scripts', array( $this, 'countdown_js_script' ) );
    5053    }
     
    5760    public function display()
    5861    {
     62        $this->log_all_ca_server_response_handler();
    5963        if ( aifs_is_free_version() ) {
    6064           
     
    7175                } else {
    7276                    wp_redirect( admin_url( 'admin.php?page=aifs_generate_ssl_manually' ) );
     77                    exit;
    7378                }
    7479           
     
    218223        $start_time = get_option( 'aifs_comparison_table_promo_start_time' );
    219224       
    220         if ( $this->factory->is_cpanel() && time() < $start_time + AIFS_COUNTDOWN_DURATION && (get_option( 'aifs_premium_plan_selected' ) >= 1 && time() < strtotime( "January 1, 2024" ) || time() > strtotime( "November 1, 2022" ) && time() < strtotime( "January 1, 2024" )) ) {
    221             $coupon_code = "20AutoInstall";
     225        if ( $this->factory->is_cpanel() && time() > strtotime( "August 19, 2023" ) && time() < strtotime( "September 19, 2023" ) ) {
     226            $coupon_code = false;
    222227            echo  '<div id="aifs-promo" class="aifs-promo"><p style="font-size: medium; margin: 0;">' ;
    223228            echo  '<span class="dashicons dashicons-arrow-down-alt" style="font-size: xx-large; color: #5F97FB;"></span> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;' ;
    224             $percentage = __( "20%", 'auto-install-free-ssl' );
    225             /* translators: %1$s: HTML code to make the color red of the text '%2$s discount!'. Please keep its order the same.    %2$s: Discount percentage (includes % sign) */
    226             echo  sprintf( __( 'Select any Pro plan asap to grab a %1$s %2$s discount!', 'auto-install-free-ssl' ), "<span style='color: red;'>", $percentage ) . "</span>" ;
    227             echo  '<img src="' . AIFS_URL . 'assets/img/fire.webp" style="margin-left: 2%; width 20px; height: 20px;"><span class="expires-in">' . __( "expires in", 'auto-install-free-ssl' ) . ' <span id="countdown" style=""></span></span>' ;
     229            echo  '<span class="expires-in" style="margin-right: 1%;">Limited time offer</span> 30% discount coupon: SUMMER_30, 40% discount coupon (lifetime only): SUMMER_40' ;
    228230            echo  '</p></div>' ;
    229             echo  '<script type="text/javascript">' . $this->countdown_js_script() . '</script>' ;
    230             //add_action( 'admin_enqueue_scripts', array($this, 'countdown_js_script') );
    231231        } else {
    232             $coupon_code = false;
     232           
     233            if ( $this->factory->is_cpanel() && time() < $start_time + AIFS_COUNTDOWN_DURATION && (get_option( 'aifs_premium_plan_selected' ) >= 1 && time() < strtotime( "January 1, 2024" ) || time() > strtotime( "November 1, 2022" ) && time() < strtotime( "January 1, 2024" )) ) {
     234                $coupon_code = "20AutoInstall";
     235                echo  '<div id="aifs-promo" class="aifs-promo"><p style="font-size: medium; margin: 0;">' ;
     236                echo  '<span class="dashicons dashicons-arrow-down-alt" style="font-size: xx-large; color: #5F97FB;"></span> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;' ;
     237                $percentage = __( "20%", 'auto-install-free-ssl' );
     238                /* translators: %1$s: HTML code to make the color red of the text '%2$s discount!'. Please keep its order the same.    %2$s: Discount percentage (includes % sign) */
     239                echo  sprintf( __( 'Select any Pro plan asap to grab a %1$s %2$s discount!', 'auto-install-free-ssl' ), "<span style='color: red;'>", $percentage ) . "</span>" ;
     240                echo  '<img src="' . AIFS_URL . 'assets/img/fire.webp" style="margin-left: 2%; width 20px; height: 20px;"><span class="expires-in">' . __( "expires in", 'auto-install-free-ssl' ) . ' <span id="countdown" style=""></span></span>' ;
     241                echo  '</p></div>' ;
     242                echo  '<script type="text/javascript">' . $this->countdown_js_script() . '</script>' ;
     243                //add_action( 'admin_enqueue_scripts', array($this, 'countdown_js_script') );
     244            } else {
     245                $coupon_code = false;
     246            }
     247       
    233248        }
    234249       
     
    758773   
    759774    /**
     775     * Log or stop logging all responses received from the Let's Encrypt™ server.
     776     * @since 3.6.2
     777     */
     778    public function log_all_ca_server_response_handler()
     779    {
     780       
     781        if ( isset( $_GET['log_all_ca_server_response'] ) ) {
     782           
     783            if ( aifs_is_free_version() && get_option( 'aifs_free_plan_selected' ) ) {
     784                $redirect_url = admin_url( 'admin.php?page=aifs_generate_ssl_manually' );
     785            } else {
     786                $redirect_url = admin_url( 'admin.php?page=auto_install_free_ssl' );
     787            }
     788           
     789            $common_text = __( "Settings successfully updated!", 'auto-install-free-ssl' ) . " ";
     790            if ( $_GET['log_all_ca_server_response'] == "yes" ) {
     791               
     792                if ( update_option( 'aifs_log_all_ca_server_response', 1 ) ) {
     793                    $success_text = $common_text . __( "We'll log all responses from the Let's Encrypt™ server.", 'auto-install-free-ssl' );
     794                    $this->logger->write_log( 'info', $success_text, [
     795                        'event' => 'ping',
     796                    ] );
     797                    aifs_add_flash_notice( $success_text );
     798                    wp_redirect( $redirect_url );
     799                    exit;
     800                }
     801           
     802            }
     803            if ( $_GET['log_all_ca_server_response'] == "no" ) {
     804               
     805                if ( delete_option( 'aifs_log_all_ca_server_response' ) ) {
     806                    $success_text = $common_text . __( "We have stopped logging all responses from the Let's Encrypt™ server.", 'auto-install-free-ssl' );
     807                    $this->logger->write_log( 'info', $success_text, [
     808                        'event' => 'ping',
     809                    ] );
     810                    aifs_add_flash_notice( $success_text );
     811                    wp_redirect( $redirect_url );
     812                    exit;
     813                }
     814           
     815            }
     816        }
     817   
     818    }
     819   
     820    /**
    760821     * Display message after successful payment
    761822     *
  • auto-install-free-ssl/trunk/auto-install-free-ssl.php

    r2946395 r2952902  
    77 * Plugin URI:  https://freessl.tech
    88 * Description: Generate & install Free SSL Certificates, activate force HTTPS redirect with one click to fix insecure links & mixed content warnings, and get automatic Renewal Reminders.
    9  * Version:     3.6.1
     9 * Version:     3.6.2
    1010 * Requires at least: 4.1
    1111 * Requires PHP:      5.6
  • auto-install-free-ssl/trunk/readme.txt

    r2946402 r2952902  
    77Requires at least: 4.1
    88Tested up to: 6.3
    9 Stable tag: 3.6.1
     9Stable tag: 3.6.2
    1010Requires PHP: 5.6
    1111Development location: https://freessl.tech
     
    2727
    2828
    29 `    343,500+ DOWNLOADS!!`
     29`    348,500+ DOWNLOADS!!`
    3030
    3131
     
    5050* One-click revert to HTTP if required.
    5151* Automatic renewal reminder by email and admin notice before the SSL expiry date.
     52The free SSL certificate issued by Let's Encrypt™ expires in 90 days. They recommend renewing 30 days before expiry. Please check the FAQ section to learn why the lifetime is 90 days.
    5253
    5354 
     
    7374* SSL installation training for non-cPanel websites.
    7475* If needed, you can revoke any SSL certificate and change your Let's Encrypt™ account key.
     76If your WordPress website is hosted on a VPS or dedicated server and you don't have cPanel, **Automatic Installation** of the Free SSL Certificate is still possible. Please get in touch with us after purchase.
    7577
    7678[BUY PREMIUM VERSION](https://freessl.tech/free-ssl-certificate-for-wordpress-website/?utm_source=wp_org&utm_medium=description&utm_campaign=aifs_free&utm_content=premium_features)
     
    2612631. Now refresh the website's home page. You'll see the padlock.
    262264
     265 
     266
     267**Troubleshooting**
     268
     269Access the 'Log' menu within the ‘Auto-Install Free SSL’ menu in the left-hand sidebar. Be sure to review the log for any insights.
     270
     271If you encounter issues with the Let's Encrypt™ API connection and wish to log Let's Encrypt™ server response details for each API call, you can achieve this by writing the following URL in the address bar by replacing 'www.example.com' with your domain name, and hit enter:
     272
     273 ` http://www.example.com/wp-admin/admin.php?page=auto_install_free_ssl&log_all_ca_server_response=yes `
     274
     275To stop logging all responses from the Let's Encrypt™ server, replace ‘yes’ with ‘no’ in the above URL.
     276
     277Please check the existing topics in the WordPress [support forum](https://wordpress.org/support/plugin/auto-install-free-ssl) before creating a new topic for support or reporting a bug.
     278
    263279
    264280
     
    307323Please visit the plugin's 'Force HTTPS' page and click the 'Activate Force HTTPS' button.
    308324
     325= After installing an SSL certificate, I clicked the 'Activate Force HTTPS' button. But I got this error: "No valid SSL is installed". How can I fix it? =
     326
     327This is a temporary issue. You may wait 24 hours or follow these steps:
     328
     329Please access your website with HTTPS (e.g., https://example.com). If you are sure that the SSL certificate is installed correctly and the padlock is visible, please log in to your WordPress dashboard, open a new tab, write the following URL in the address bar by replacing 'www.example.com' with your domain name, and hit enter:
     330
     331 ` http://www.example.com/wp-admin/admin.php?page=aifs_force_https&aifsaction=aifs_force_https_override&checked_ssl_manually=done&valid_ssl_installed=yes `
     332
    309333= How do I deactivate the HTTPS redirect? =
    310334
     
    312336
    313337Alternatively, open the email you received after activating the HTTPS redirect (or Force HTTPS) and click the link to deactivate HTTPS redirect and revert to HTTP. The subject line of that email is "'Auto-Install Free SSL' has activated Force HTTPS on your website YourDomain.com". [Replace YourDomain.com with your WordPress website's domain].
     338
     339= Are my website's WWW and non-WWW versions included in the free SSL certificate? =
     340
     341If your website is accessible with WWW and non-WWW versions of the domain name (e.g., www.example.com and example.com) and both A record points to the same IP address, our plugin will include both versions in the free SSL certificate.
     342
     343= Why is the validity of the free SSL certificate 90 days? Is it a trial? =
     344
     345The validity period of free SSL certificates being 90 days is not a trial but rather a design choice of Let's Encrypt™ that prioritizes security. With shorter validity periods, Let's Encrypt™ encourages frequent certificate renewal, ensuring that websites always have up-to-date and secure certificates. This approach reduces the potential impact of compromised certificates.
     346
     347The [premium version](https://freessl.tech/free-ssl-certificate-for-wordpress-website/?utm_source=wp_org&utm_medium=faq&utm_campaign=aifs_free&utm_content=faq_11) of this plugin renews SSL certificates automatically. Automated renewal processes also make it easier for website owners to maintain security without manual intervention. While the 90-day validity might seem short, the automated renewal process ensures seamless and continuous protection for your website's users.
     348
     349Please [click here](https://letsencrypt.org/2015/11/09/why-90-days.html) to learn the statement of Let's Encrypt™.
     350
     351= Does this plugin generate free SSL certificates for bare IP addresses (e.g., https://204.12.132.37)? =
     352
     353Let's Encrypt™ issues SSL certificates for domain names rather than bare IP addresses. Free SSL certificates are designed to secure domain names, providing encrypted connections between users and websites. Using SSL certificates with domain names is considered the industry's best practice.
     354
     355If you're looking to secure a website, it's recommended to associate a domain name with the IP address rather than using the bare IP address. This enhances the user experience and aligns with security and usability standards.
    314356
    315357= [Pro] Why do you need my cPanel password (or API Token) when other Let's Encrypt clients don't? =
Note: See TracChangeset for help on using the changeset viewer.