# NodeJS

### Требования

Чтобы иметь возможность декодировать токен JWT с помощью языка JavaScript, необходимо установить пакет `jsonwebtoken`.

Лучший способ установить его - через менеджер пакетов `npm`:

```bash
$ npm install jsonwebtoken
```

### Использование jsonwebtoken

Во-первых, необходимо импортировать пакет jsonwebtoken:

```javascript
const jwt = require('jsonwebtoken');
```

Во-вторых, необходимо прочитать и сохранить публичный ключ (используемый для расшифровки токена). Нужно заранее получить его заранее и хранить рядом с проектом (в данном случае `./keys/id_rsa.pub`).

```javascript
const PUBLIC_KEY = fs.readFileSync('/path/to/public/key_public.pem'); // get public key
```

Затем необходимо реализовать функцию для проверки токена с использованием публичного ключа:

```javascript
function verifyJwt(token) {
    try {
        return jwt.verify(token, PUBLIC_KEY, { algorithms: ['RS256'] });
    }
    catch(e) {
        return;
    }
}
```

```javascript
result = verifyJwt(token);
```

### Результат

Если токен правильный и срок его действия не истек, после использования `jwt_verify` будет получен декодированную структуру JWT:

```javascript
{
  "challenge_id": "3aa67786-d8cb-4ed5-ae83-ae7ace27e372",
  "result": 94,
  "iat": 1578001068,
  "exp": 1578001128
}
```

Результат проверки бот/не бот можно получить из поля `result`.
