117 lines
2.8 KiB
JavaScript
117 lines
2.8 KiB
JavaScript
'use strict';
|
|
var Client = require('pg').Client;
|
|
var promisify = require('util').promisify;
|
|
|
|
var defaults = {
|
|
tableName: 'acme_challenge'
|
|
};
|
|
|
|
module.exports.create = function(config) {
|
|
|
|
var tableName = config.tableName || defaults.tableName;
|
|
var databaseUrl = config.databaseUrl;
|
|
var client;
|
|
|
|
return {
|
|
init: function(opts) {
|
|
console.log('init');
|
|
client = new Client({
|
|
connectionString: databaseUrl
|
|
});
|
|
|
|
var dropTableQuery = 'DROP TABLE IF EXISTS "' + tableName + '" CASCADE;';
|
|
var createTableQuery = 'CREATE TABLE IF NOT EXISTS "' + tableName + '" (' +
|
|
'"id" SERIAL , ' +
|
|
'"domain" VARCHAR(255) NOT NULL, ' +
|
|
'"tokenName" VARCHAR(255), ' +
|
|
'"keyAuthorization" VARCHAR(255), PRIMARY KEY ("id"));';
|
|
|
|
return client.connect().then(function() {
|
|
return client.query(dropTableQuery + createTableQuery)
|
|
.then(function(res) {
|
|
// console.log(res);
|
|
|
|
return null;
|
|
}).catch(function(err) {
|
|
console.error(err.stack);
|
|
throw err;
|
|
});
|
|
}).catch(function(err) {
|
|
console.error('Unable to connect to the database:', err);
|
|
throw err;
|
|
});
|
|
|
|
},
|
|
|
|
set: function(data) {
|
|
// console.log('Add Key Auth URL', data);
|
|
|
|
var ch = data.challenge;
|
|
|
|
var setQuery = 'INSERT INTO "'+tableName+'" ("id","domain","tokenName","keyAuthorization") VALUES (DEFAULT,$1,$2,$3) RETURNING *;';
|
|
var setValues = [ch.identifier.value,ch.token,ch.keyAuthorization];
|
|
|
|
return client.query(setQuery,setValues)
|
|
.then(function(res) {
|
|
// console.log(res);
|
|
console.log(
|
|
'acmeChallenge auto-generated ID:',
|
|
res.rows[0].id
|
|
);
|
|
return true;
|
|
|
|
}).catch(function(err) {
|
|
console.error(err.stack);
|
|
throw err;
|
|
});
|
|
|
|
},
|
|
get: function(data) {
|
|
// console.log('List Key Auth URL', data);
|
|
|
|
var ch = data.challenge;
|
|
|
|
var getQuery = 'SELECT "id", "domain", "tokenName", "keyAuthorization" FROM "'+tableName+'" AS "acme_challenge" WHERE "acme_challenge"."domain" = $1 AND "acme_challenge"."tokenName" = $2 LIMIT 1;';
|
|
var getValues = [ch.identifier.value,ch.token];
|
|
|
|
return client.query(getQuery,getValues)
|
|
.then(function(res) {
|
|
// console.log(res);
|
|
var acmeChallenge = res.rows[0];
|
|
if (acmeChallenge) {
|
|
return {
|
|
keyAuthorization: acmeChallenge.keyAuthorization
|
|
};
|
|
}
|
|
return null;
|
|
|
|
|
|
}).catch(function(err) {
|
|
console.error(err.stack);
|
|
throw err;
|
|
});
|
|
},
|
|
|
|
remove: function(data) {
|
|
var ch = data.challenge;
|
|
|
|
var deleteQuery = 'DELETE FROM "'+tableName+'" WHERE "domain" = $1 AND "tokenName" = $2';
|
|
var deleteValues = [ch.identifier.value,ch.token];
|
|
|
|
return client.query(deleteQuery,deleteValues)
|
|
.then(function(res) {
|
|
// console.log(res);
|
|
return null;
|
|
|
|
}).catch(function(err) {
|
|
console.error(err.stack);
|
|
throw err;
|
|
});
|
|
|
|
}
|
|
};
|
|
};
|
|
|
|
// close connection
|
|
// client.end();
|