----- ====== OTP ====== ===== Background ===== * A One Time Password or OTP is a common method of user verification. * A user usually enters a **cell phone number** or an **email address**. * The system then sends a code via SMS to the cell phone number or via e-mail to the email address. * This code is used by the user to verify themselves to the system. * From February 2023, RADIUSdesk will provide support for OTP verification for Captive Portal (Hotspot) users. * We support the following ways to send the OTP: * SMS * Email * We support OTP with: * Permanent user registration * Click-To-Connet * The rest of this page deals with the configuration and technical details of the OTP functionality. ===== Activating the system for sending OTPs ===== * For RADIUSdesk to be able to send an OTP, you must configure the system so that it can send the OTP by email or SMS. * RADIUSdesk offers you the option of making a system-wide configuration, but you can also define settings per cloud, which then take precedence over the system-wide settings. * The following screenshot shows the email configuration: {{:radius:login_pages:sendgrid_config.png?nolink|}} * We support Sendgrid and normal SMTP as a means of transport for the email. * Once you have defined the configuration, click **Save**. * Once you have saved the configuration, you can test it by clicking on the **Test Email Settings** button. * You can also view the history of all emails that the system has sent with this particular configuration by clicking on the **Show Sent History** button. * In the following screenshot you can see the SMS configuration. {{:radius:login_pages:sms_config.png?nolink|}} * Most SMS providers have an API that you can use to send SMS. * RADIUSdesk allows you to specify two SMS providers. Both can be active, but the system will only use the first active one it finds. * As with the email settings, you can also test the SMS settings after configuration. * You can also view the history of all SMS that the system has sent with this particular configuration by clicking the **Show Sent History** button. * These settings can also be set per cloud. * Go to **Other** -> **Clouds**. * Simply select the cloud for which you want to add more specific settings and edit them. * These settings will then take precedence. ===== OTP for user registration ===== {{:radius:login_pages:user_registration.png?nolink|}} * The screenshot above should be self-explanatory. * However, there is one important point that should be mentioned when using email for OTP. * We are in a bit of a chicken and egg situation as the person needs internet access to check their email and receive the OTP. * So we will provide them with temporary internet access for this action. * This is what the **Temp login user** is for. * We recommend that you create a separate user with a special profile for this purpose. * The profile should be * Time limited. e.g. Session-Timeout should be 360 seconds (5minutes) * The bandwidth should be limited. * So the user who registers can retrieve the OTP from their email, but not much beyond that in terms of internet connection. * The email with the OTP also contains a link that the user can click on to confirm the OTP to the system. * This makes it easy when the WebView with the Captive Portal login page is closed while the user is retrieving the OTP from their email. ===== OTP For Click To Connect ===== {{:radius:login_pages:otp_click_to_connect.png?nolink|}} * With OTP for Click To Connect, there is one of two options. * If you choose the email option for the OTP, you will need to provide the user with temporary internet access again, as with user registration above. * If you choose the SMS option (the user's cell phone number), you do not need to do anything as the OTP will be delivered as an SMS. * We have also included a link in the email again for the user to conveniently confirm the OTP by clicking on the link. ===== Some Technical Items ===== ==== Expiry of the OTP ==== * The current expiry time for an OTP is two minutes. * This can be adjusted by editing the files **/var/www/html/cake4/rd_cake/src/Controller/RegisterUsersController.php** and **/var/www/html/cake4/rd_cake/src/Controller/DataCollectortsController.php** files. * Search for this line and adjust it accordingly. protected $valid_minutes = 2; //The time that an OTP will be valid (in minutes) * For the verification through the Email link we expire the OTP after** $valid_minutes times two**. (4minutes) ==== Disconnecting Temp Connection ==== * The URL link in the email leads to a redirection to a special CoovaChilli URL that logs the user out (http://1.0.0.0). * For this to happen, the user must be connected to the captive portal so that this URL can log them out. if($otp == $q_r->value){ $success = true; $this->{'PermanentUserOtps'}->patchEntity($q_r, ['status' => 'otp_confirmed']); $this->{'PermanentUserOtps'}->save($q_r); $user_id = $q_r->permanent_user_id; $q_pu = $this->{'PermanentUsers'}->find()->where(['PermanentUsers.id' =>$user_id])->first(); if($q_pu){ $this->{'PermanentUsers'}->patchEntity($q_pu, ['active' => 1]); $this->{'PermanentUsers'}->save($q_pu); } $this->response = $this->response->withHeader('Location', "http://1.0.0.0"); return $this->response; }else{ We are still looking for a similar way to disconnect users on a Mikrotik based Hotspot.