Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/xruff/totpauth

Nette extension for Time-Based One-Time Password Algorithm
https://github.com/xruff/totpauth

2fa authentication nette nette-component nette-framework qr qrcode

Last synced: about 1 month ago
JSON representation

Nette extension for Time-Based One-Time Password Algorithm

Awesome Lists containing this project

README

        

TotpAuth
======

Nette extension for Time-Based One-Time Password Algorithm

Requirements
------------

Package requires PHP 7.0 or higher

- [tracy/tracy](https://github.com/tracy/tracy)
- [xruff/basedbmodel](https://github.com/xruff/basedbmodel)
- [oops/totp-authenticator](https://github.com/oops/totp-authenticator)
- [guzzlehttp/guzzle](https://github.com/oops/totp-authenticator)

Installation
------------

The best way to install XRuff/TotpAuth is using [Composer](http://getcomposer.org/):

```sh
$ composer require xruff/totpAuth
```

Scenario
------------

* logged user activate 2FA in account settings:
* see QR core
* scan it with [mobile application](https://play.google.com/store/apps/details?id=com.google.android.apps.authenticator2&hl=cs)
* and click "Confirm Code" button
* next login to your application:
* user log in standard way (login + password...) and see second login page with form with one field
* provide code from Authenticator mobile aplication
* pass through if provided code is right

Documentation
------------

Assumptions:

* create table `qr` in database, use schema from file `sql/qr.sql`
* `$user->indentity` have to contain properties `id` and `username`

Configuration in config.neon.

```yml
extensions:
totpAuth: XRuff\TotpAuth\DI\TotpAuthExtension

totpAuth:
issuer: NameOfMyApp # mandatory
identityKey: login # optional, Default is 'login' eg $user->identity->login
timeWindow: 1 # optional - time tolerance
codeSize: '300x300' # optional - size ofgenerated QR code
```

Presenter:

```php

use XRuff\TotpAuth\Auth;
use Nette\Application\UI;

class HomepagePresenter extends Nette\Application\UI\Presenter
{
/** @var Auth $auth */
public $auth;

public function __construct(Auth $auth)
{
$this->auth = $auth;
}

public function renderDefault() {
$this->template->qrCode = $this->auth->getQrBase64();
}

public function handleSaveUrl()
{
$this->auth->saveSecret();
$this->redirect('this');
}

public function handleResetUrl()
{
$this->auth->resetSecret();
$this->redirect('this');
}

protected function createComponentCodeForm()
{
$form = new UI\Form;
$form->addText('code', 'Code');
$form->addSubmit('submit', 'Auth me');
$form->onSuccess[] = [$this, 'codeFormSucceeded'];
return $form;
}

public function codeFormSucceeded(UI\Form $form, $values)
{
if ($this->auth->verify($values->code)) {
$this->flashMessage('Success!');
} else {
$this->flashMessage('Wrong code.');
}
$this->redirect('this');
}
}
```

default.latte:

```smarty
...
{if $qrCode}



Confirm Code (have been added to Mobile Authenticator App)
{else}
{control codeForm}
Reset auth code
{/if}
...
```

-----

Repository [https://github.com/XRuff/TotpAuth](https://github.com/XRuff/TotpAuth).