139 lines
4.3 KiB
JavaScript
139 lines
4.3 KiB
JavaScript
// A Config object provides information about how a specific app is
|
|
// configured.
|
|
// mount is the URL for the root of the API; includes http, domain, etc.
|
|
|
|
import cache from './cache';
|
|
|
|
function removeTrailingSlash(str) {
|
|
if (!str) {
|
|
return str;
|
|
}
|
|
if (str.endsWith("/")) {
|
|
str = str.substr(0, str.length-1);
|
|
}
|
|
return str;
|
|
}
|
|
|
|
export class Config {
|
|
constructor(applicationId: string, mount: string) {
|
|
let DatabaseAdapter = require('./DatabaseAdapter');
|
|
let cacheInfo = cache.apps.get(applicationId);
|
|
if (!cacheInfo) {
|
|
return;
|
|
}
|
|
|
|
this.applicationId = applicationId;
|
|
this.masterKey = cacheInfo.masterKey;
|
|
this.clientKey = cacheInfo.clientKey;
|
|
this.javascriptKey = cacheInfo.javascriptKey;
|
|
this.dotNetKey = cacheInfo.dotNetKey;
|
|
this.restAPIKey = cacheInfo.restAPIKey;
|
|
this.fileKey = cacheInfo.fileKey;
|
|
this.facebookAppIds = cacheInfo.facebookAppIds;
|
|
this.allowClientClassCreation = cacheInfo.allowClientClassCreation;
|
|
this.database = DatabaseAdapter.getDatabaseConnection(applicationId, cacheInfo.collectionPrefix);
|
|
|
|
this.serverURL = cacheInfo.serverURL;
|
|
this.publicServerURL = removeTrailingSlash(cacheInfo.publicServerURL);
|
|
this.verifyUserEmails = cacheInfo.verifyUserEmails;
|
|
this.appName = cacheInfo.appName;
|
|
|
|
this.hooksController = cacheInfo.hooksController;
|
|
this.filesController = cacheInfo.filesController;
|
|
this.pushController = cacheInfo.pushController;
|
|
this.loggerController = cacheInfo.loggerController;
|
|
this.userController = cacheInfo.userController;
|
|
this.authDataManager = cacheInfo.authDataManager;
|
|
this.customPages = cacheInfo.customPages || {};
|
|
this.mount = removeTrailingSlash(mount);
|
|
this.liveQueryController = cacheInfo.liveQueryController;
|
|
this.sessionLength = cacheInfo.sessionLength;
|
|
this.generateSessionExpiresAt = this.generateSessionExpiresAt.bind(this);
|
|
this.revokeSessionOnPasswordReset = cacheInfo.revokeSessionOnPasswordReset;
|
|
}
|
|
|
|
static validate(options) {
|
|
this.validateEmailConfiguration({
|
|
verifyUserEmails: options.verifyUserEmails,
|
|
appName: options.appName,
|
|
publicServerURL: options.publicServerURL
|
|
})
|
|
|
|
if (typeof options.revokeSessionOnPasswordReset !== 'boolean') {
|
|
throw 'revokeSessionOnPasswordReset must be a boolean value';
|
|
}
|
|
|
|
if (options.publicServerURL) {
|
|
if (!options.publicServerURL.startsWith("http://") && !options.publicServerURL.startsWith("https://")) {
|
|
throw "publicServerURL should be a valid HTTPS URL starting with https://"
|
|
}
|
|
}
|
|
|
|
this.validateSessionLength(options.sessionLength);
|
|
}
|
|
|
|
static validateEmailConfiguration({verifyUserEmails, appName, publicServerURL}) {
|
|
if (verifyUserEmails) {
|
|
if (typeof appName !== 'string') {
|
|
throw 'An app name is required when using email verification.';
|
|
}
|
|
if (typeof publicServerURL !== 'string') {
|
|
throw 'A public server url is required when using email verification.';
|
|
}
|
|
}
|
|
}
|
|
|
|
get mount() {
|
|
var mount = this._mount;
|
|
if (this.publicServerURL) {
|
|
mount = this.publicServerURL;
|
|
}
|
|
return mount;
|
|
}
|
|
|
|
set mount(newValue) {
|
|
this._mount = newValue;
|
|
}
|
|
|
|
static validateSessionLength(sessionLength) {
|
|
if(isNaN(sessionLength)) {
|
|
throw 'Session length must be a valid number.';
|
|
}
|
|
else if(sessionLength <= 0) {
|
|
throw 'Session length must be a value greater than 0.'
|
|
}
|
|
}
|
|
|
|
generateSessionExpiresAt() {
|
|
var now = new Date();
|
|
return new Date(now.getTime() + (this.sessionLength*1000));
|
|
}
|
|
|
|
get invalidLinkURL() {
|
|
return this.customPages.invalidLink || `${this.publicServerURL}/apps/invalid_link.html`;
|
|
}
|
|
|
|
get verifyEmailSuccessURL() {
|
|
return this.customPages.verifyEmailSuccess || `${this.publicServerURL}/apps/verify_email_success.html`;
|
|
}
|
|
|
|
get choosePasswordURL() {
|
|
return this.customPages.choosePassword || `${this.publicServerURL}/apps/choose_password`;
|
|
}
|
|
|
|
get requestResetPasswordURL() {
|
|
return `${this.publicServerURL}/apps/${this.applicationId}/request_password_reset`;
|
|
}
|
|
|
|
get passwordResetSuccessURL() {
|
|
return this.customPages.passwordResetSuccess || `${this.publicServerURL}/apps/password_reset_success.html`;
|
|
}
|
|
|
|
get verifyEmailURL() {
|
|
return `${this.publicServerURL}/apps/${this.applicationId}/verify_email`;
|
|
}
|
|
};
|
|
|
|
export default Config;
|
|
module.exports = Config;
|