From 279541a669ca9b70847c7c25f265f1bf77bc8a51 Mon Sep 17 00:00:00 2001 From: Akif Rabbani Date: Sun, 24 Jan 2021 05:30:35 +0800 Subject: [PATCH] feat: new auth mechnasimn via http post (#99) * Added HTTP Authentication * Fixed sample config * Added filter by status code --- config.js | 7 +++++++ package.json | 1 + src/auth/HTTPAuth.ts | 45 ++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 53 insertions(+) create mode 100644 src/auth/HTTPAuth.ts diff --git a/config.js b/config.js index 4e8daae..c340251 100644 --- a/config.js +++ b/config.js @@ -67,4 +67,11 @@ module.exports = { validHosts: ['gmail.com'] } */ + + /** HTTP AUTH + authentication: 'HTTPAuth', + authenticationOptions: { + url: 'https://my-website.com/api/backend-login' + } + */ }; diff --git a/package.json b/package.json index 48c1c03..c76dc1c 100644 --- a/package.json +++ b/package.json @@ -31,6 +31,7 @@ "main": "dist/app.js", "dependencies": { "@hokify/node-ts-cache": "^5.4.1", + "axios": "^0.21.1", "debug": "^4.3.1", "imap-simple": "^5.0.0", "ldapauth-fork": "^5.0.1", diff --git a/src/auth/HTTPAuth.ts b/src/auth/HTTPAuth.ts new file mode 100644 index 0000000..13aed00 --- /dev/null +++ b/src/auth/HTTPAuth.ts @@ -0,0 +1,45 @@ +import axios from 'axios'; +import { IAuthentication } from '../types/Authentication'; + +interface IHTTPAuthOptions { + url: string; +} + +export class HTTPAuth implements IAuthentication { + private url: string; + + constructor(config: IHTTPAuthOptions) { + this.url = config.url; + } + + async authenticate(username: string, password: string) { + let success = false; + try { + await axios + .post( + this.url, + { + username, + password, + }, + { + validateStatus(status) { + return status >= 200 && status < 500; + }, + } + ) + .then((res) => { + console.log(`Code: ${res.status}`); + if (res.status === 200) { + success = true; + console.log('Return code 200, HTTP authentication successful'); + } else { + console.log('HTTP authentication failed'); + } + }); + } catch (err) { + console.error('HTTP response error'); + } + return success; + } +}