This is an old revision of the document!


OTP authenticator for php

  1. Create a python virtual environment in a location your web server can access:
    cd /home/user/html
    mkdir -p /home/user/html/pyotp-env
    sudo chown user:www-data /home/user/html/pyotp-env
    sudo chmod 770 /home/user/html/pyotp-env
  2. Create a virtual environment as apache2 user and activate it:
    sudo -s -u www-data
    python3 -m venv /home/user/html/pyotp-env
    source /home/user/html/pyotp-env/bin/activate
  3. Install pyotp:
    pip3 install pyotp
  4. Create the python script /home/user/html/pyotp-env/otp.py:
    # Python script to generate authenticator OTP
    import pyotp
    
    # Your Base32 secret key (provided when setting up 2FA)
    secret = "ABCDE1FGHIJK2LMN" 
    
    # Initialize TOTP
    totp = pyotp.TOTP(secret)
    
    # Generate the current 6-digit code
    current_code = totp.now()
    print(current_code)
  5. Check execution of pyotp:
    python3 /home/user/html/pyotp-env/otp.py
  6. Create a bash script:
    vim /home/user/html/otp.sh
    #!/bin/bash
    source /home/user/html/pyotp-env/bin/activate
    python3 /home/user/html/pyotp-env/otp.py
    deactivate
    exit 0
  7. Create a php web page which calls the script:
    vim /home/user/html/otptest.php
    <?php
    $output = shell_exec('/home/bco/html/otp.sh');
    echo $output;
  8. Give the scripts correct ownership and permissions:
    sudo chown www-data:www-data /home/bco/html/pyotp-env/otp.py
    sudo chown www-data:www-data /home/bco/html/otp.sh
    sudo chmod +x /home/bco/html/otp.sh