Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Added config module to members service
no-issue This is for a central place to retrive member related settings from
- Loading branch information
Showing
2 changed files
with
114 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,112 @@ | ||
const {URL} = require('url'); | ||
const settingsCache = require('../settings/cache'); | ||
const ghostVersion = require('../../lib/ghost-version'); | ||
const crypto = require('crypto'); | ||
const common = require('../../lib/common'); | ||
const urlUtils = require('../../lib/url-utils'); | ||
|
||
// NOTE: the function is an exact duplicate of one in GhostMailer should be extracted | ||
// into a common lib once it needs to be reused anywhere else again | ||
function getDomain() { | ||
const domain = urlUtils.urlFor('home', true).match(new RegExp('^https?://([^/:?#]+)(?:[/:?#]|$)', 'i')); | ||
return domain && domain[1]; | ||
} | ||
|
||
function getEmailFromAddress() { | ||
const subscriptionSettings = settingsCache.get('members_subscription_settings') || {}; | ||
|
||
return `${subscriptionSettings.fromAddress || 'noreply'}@${getDomain()}`; | ||
} | ||
|
||
const getApiUrl = ({version, type}) => { | ||
const {href} = new URL( | ||
urlUtils.getApiPath({version, type}), | ||
urlUtils.urlFor('admin', true) | ||
); | ||
return href; | ||
}; | ||
|
||
const siteUrl = urlUtils.getSiteUrl(); | ||
const membersApiUrl = getApiUrl({version: 'v3', type: 'members'}); | ||
|
||
function getStripePaymentConfig() { | ||
const subscriptionSettings = settingsCache.get('members_subscription_settings'); | ||
|
||
const stripePaymentProcessor = subscriptionSettings.paymentProcessors.find( | ||
paymentProcessor => paymentProcessor.adapter === 'stripe' | ||
); | ||
|
||
if (!stripePaymentProcessor || !stripePaymentProcessor.config) { | ||
return null; | ||
} | ||
|
||
if (!stripePaymentProcessor.config.public_token || !stripePaymentProcessor.config.secret_token) { | ||
return null; | ||
} | ||
|
||
const webhookHandlerUrl = new URL('/members/webhooks/stripe', siteUrl); | ||
|
||
const checkoutSuccessUrl = new URL(siteUrl); | ||
checkoutSuccessUrl.searchParams.set('stripe', 'success'); | ||
const checkoutCancelUrl = new URL(siteUrl); | ||
checkoutCancelUrl.searchParams.set('stripe', 'cancel'); | ||
|
||
return { | ||
publicKey: stripePaymentProcessor.config.public_token, | ||
secretKey: stripePaymentProcessor.config.secret_token, | ||
checkoutSuccessUrl: checkoutSuccessUrl.href, | ||
checkoutCancelUrl: checkoutCancelUrl.href, | ||
webhookHandlerUrl: webhookHandlerUrl.href, | ||
product: stripePaymentProcessor.config.product, | ||
plans: stripePaymentProcessor.config.plans, | ||
appInfo: { | ||
name: 'Ghost', | ||
partner_id: 'pp_partner_DKmRVtTs4j9pwZ', | ||
version: ghostVersion.original, | ||
url: 'https://ghost.org/' | ||
} | ||
}; | ||
} | ||
|
||
function getAuthSecret() { | ||
const hexSecret = settingsCache.get('members_email_auth_secret'); | ||
if (!hexSecret) { | ||
common.logging.warn('Could not find members_email_auth_secret, using dynamically generated secret'); | ||
return crypto.randomBytes(64); | ||
} | ||
const secret = Buffer.from(hexSecret, 'hex'); | ||
if (secret.length < 64) { | ||
common.logging.warn('members_email_auth_secret not large enough (64 bytes), using dynamically generated secret'); | ||
return crypto.randomBytes(64); | ||
} | ||
return secret; | ||
} | ||
|
||
function getAllowSelfSignup() { | ||
const subscriptionSettings = settingsCache.get('members_subscription_settings'); | ||
return subscriptionSettings.allowSelfSignup; | ||
} | ||
|
||
function getTokenConfig() { | ||
return { | ||
issuer: membersApiUrl, | ||
publicKey: settingsCache.get('members_public_key'), | ||
privateKey: settingsCache.get('members_private_key') | ||
}; | ||
} | ||
|
||
function getSigninURL(token, type) { | ||
const signinURL = new URL(siteUrl); | ||
signinURL.searchParams.set('token', token); | ||
signinURL.searchParams.set('action', type); | ||
return signinURL.href; | ||
} | ||
|
||
module.exports = { | ||
getEmailFromAddress, | ||
getStripePaymentConfig, | ||
getAllowSelfSignup, | ||
getAuthSecret, | ||
getTokenConfig, | ||
getSigninURL | ||
}; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters