From fe4885959a617e38f290f052c67b28ac75b37caa Mon Sep 17 00:00:00 2001 From: NosovK Date: Fri, 1 Nov 2024 01:40:04 +0100 Subject: [PATCH] poc of different providers implementation --- api/fs-provider.js | 38 ++++++++++++++++++++++++++++++++++++++ api/memory-provider.js | 14 ++++++++++++++ api/sendpulse.js | 31 ++++--------------------------- example.js | 9 ++++++--- package.json | 2 +- 5 files changed, 63 insertions(+), 31 deletions(-) create mode 100644 api/fs-provider.js create mode 100644 api/memory-provider.js diff --git a/api/fs-provider.js b/api/fs-provider.js new file mode 100644 index 0000000..9764aa5 --- /dev/null +++ b/api/fs-provider.js @@ -0,0 +1,38 @@ +var fs = require('fs'); +/** + * Create directory + * + * @param directory + */ +function mkdirSyncRecursive(directory) { + var path = directory.replace(/\/$/, '').split('/'); + for (var i = 1; i <= path.length; i++) { + var segment = path.slice(0, i).join('/'); + segment.length > 0 && !fs.existsSync(segment) ? fs.mkdirSync(segment) : null; + } +}; + +class fsProvider { + constructor(path) { + + if (!fs.existsSync(path)) { + mkdirSyncRecursive(path); + } + if (path.substr(-1) !== '/') { + path += '/'; + } + this.path = path; + } + getToken(hashName) { + if (fs.existsSync(this.path + hashName)) { + return fs.readFileSync(this.path + hashName, {encoding: 'utf8'}); + } else { + return ""; + } + } + setToken(hashName, token) { + fs.writeFileSync(this.path + hashName, token); + } +} + +module.exports = fsProvider; \ No newline at end of file diff --git a/api/memory-provider.js b/api/memory-provider.js new file mode 100644 index 0000000..75fbe6b --- /dev/null +++ b/api/memory-provider.js @@ -0,0 +1,14 @@ + +class memoryProvider { + constructor() { + this.store = {}; + } + getToken(hashName) { + return this.store[hashName] || ""; + } + setToken(hashName, token) { + return this.store[hashName] = token; + } +} + +module.exports = memoryProvider; \ No newline at end of file diff --git a/api/sendpulse.js b/api/sendpulse.js index ea5e140..24038c8 100644 --- a/api/sendpulse.js +++ b/api/sendpulse.js @@ -12,12 +12,11 @@ var https = require('https'); var crypto = require('crypto'); -var fs = require('fs'); var API_URL = 'api.sendpulse.com'; var API_USER_ID = ''; var API_SECRET = ''; -var TOKEN_STORAGE = ''; +var TOKEN_STORAGE; var TOKEN = ''; var ERRORS = { @@ -49,18 +48,6 @@ function base64(data) { return b.toString('base64'); } -/** - * Create directory - * - * @param directory - */ -function mkdirSyncRecursive(directory) { - var path = directory.replace(/\/$/, '').split('/'); - for (var i = 1; i <= path.length; i++) { - var segment = path.slice(0, i).join('/'); - segment.length > 0 && !fs.existsSync(segment) ? fs.mkdirSync(segment) : null; - } -}; /** * Sendpulse API initialization @@ -80,18 +67,8 @@ function init(user_id, secret, storage, callback) { } } - if (!fs.existsSync(TOKEN_STORAGE)) { - mkdirSyncRecursive(TOKEN_STORAGE); - } - - if (TOKEN_STORAGE.substr(-1) !== '/') { - TOKEN_STORAGE += '/'; - } - var hashName = md5(API_USER_ID + '::' + API_SECRET); - if (fs.existsSync(TOKEN_STORAGE + hashName)) { - TOKEN = fs.readFileSync(TOKEN_STORAGE + hashName, {encoding: 'utf8'}); - } + TOKEN = TOKEN_STORAGE.getToken(hashName) if (!TOKEN.length) { getToken(callback); @@ -207,9 +184,9 @@ function getToken(callback) { return; } - TOKEN = data.access_token; + TOKEN = data.access_token ?? ""; var hashName = md5(API_USER_ID + '::' + API_SECRET); - fs.writeFileSync(TOKEN_STORAGE + hashName, TOKEN); + TOKEN_STORAGE.setToken(hashName, TOKEN); callback(TOKEN) } } diff --git a/example.js b/example.js index ea9ae42..bc4a87b 100644 --- a/example.js +++ b/example.js @@ -5,7 +5,9 @@ * https://sendpulse.com/api */ -var sendpulse = require("sendpulse-api"); +var sendpulse = require("./api/sendpulse"); +// var memoryProvider = require("./api/memory-provider"); +var fsProvider = require("./api/fs-provider"); /* * https://login.sendpulse.com/settings/#api @@ -14,9 +16,10 @@ var sendpulse = require("sendpulse-api"); var API_USER_ID="USER_ID"; var API_SECRET="USER_SECRET"; -var TOKEN_STORAGE="/tmp/"; +var provider = new fsProvider("./tmp/"); +// var provider = new memoryProvider(); -sendpulse.init(API_USER_ID, API_SECRET, TOKEN_STORAGE, function(token) { +sendpulse.init(API_USER_ID, API_SECRET, provider, function(token) { if (token && token.is_error) { // error handling } diff --git a/package.json b/package.json index 57effaf..5a9ecab 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "sendpulse-api", - "version": "1.1.7", + "version": "1.1.8", "description": "A simple SendPulse REST client library and example for Node.js", "main": "index.js", "scripts": {