Deployed the page to Github Pages.
This commit is contained in:
parent
1d79754e93
commit
2c89899458
62797 changed files with 6551425 additions and 15279 deletions
92
node_modules/firebase-tools/lib/api.js
generated
vendored
Normal file
92
node_modules/firebase-tools/lib/api.js
generated
vendored
Normal file
|
@ -0,0 +1,92 @@
|
|||
var request = require('request'),
|
||||
url = require('url'),
|
||||
querystring = require('querystring');
|
||||
|
||||
var api = {
|
||||
realtimeUrl: 'https://firebaseio.com',
|
||||
adminUrl: 'https://admin.firebase.com',
|
||||
uploadUrl: 'https://hosting.firebase.com',
|
||||
hostingUrl: 'https://firebaseapp.com',
|
||||
request: function(method, resource, data, authenticate, callback) {
|
||||
|
||||
// Runtime fetch of Auth singleton to prevent circular module dependencies
|
||||
var auth = require('./auth');
|
||||
|
||||
if ((typeof(data) === 'undefined') || !data) {
|
||||
data = {};
|
||||
}
|
||||
|
||||
if ((typeof(authenticate) !== 'undefined') && (authenticate)) {
|
||||
data.token = auth.token;
|
||||
}
|
||||
|
||||
var validMethods = ['GET', 'PUT', 'POST', 'DELETE'];
|
||||
|
||||
if (validMethods.indexOf(method) < 0) {
|
||||
method = 'GET';
|
||||
}
|
||||
|
||||
var options = {
|
||||
method: method,
|
||||
json: true
|
||||
};
|
||||
|
||||
var dataString = '';
|
||||
|
||||
if (method === 'GET') {
|
||||
dataString = querystring.stringify(data);
|
||||
var separator = resource.match(/\?/) ? '&' : '?';
|
||||
resource += separator + dataString;
|
||||
} else if (Object.keys(data).length > 0) {
|
||||
options.body = JSON.stringify(data, null, 2);
|
||||
}
|
||||
|
||||
options.url = this.adminUrl + resource;
|
||||
|
||||
request(options, function(err, response, body) {
|
||||
if (err) {
|
||||
console.log('SERVER ERROR'.red + ' - Please try again');
|
||||
process.exit(1);
|
||||
}
|
||||
setTimeout(callback, 0, response.statusCode, body);
|
||||
});
|
||||
},
|
||||
setRules: function(firebase, rules, authToken, callback) {
|
||||
request({
|
||||
url: api.realtimeUrl.replace(/\/\//, '//' + firebase + '.') + '/.settings/rules.json?auth=' + authToken,
|
||||
method: 'PUT',
|
||||
headers: {
|
||||
'Content-Type': 'application/json'
|
||||
},
|
||||
body: rules
|
||||
}, function(err, response, body) {
|
||||
if (err) {
|
||||
console.log('SERVER ERROR'.red + ' - Please try again');
|
||||
process.exit(1);
|
||||
}
|
||||
setTimeout(callback, 0, response.statusCode, body && JSON.parse(body));
|
||||
});
|
||||
}
|
||||
};
|
||||
|
||||
function possiblyOverride(apiVariable, envVariable) {
|
||||
if (typeof(process.env[envVariable]) !== 'undefined') {
|
||||
var urlParts = null;
|
||||
try {
|
||||
urlParts = url.parse(process.env[envVariable]);
|
||||
} catch (err) {
|
||||
urlParts = null;
|
||||
}
|
||||
|
||||
if (urlParts) {
|
||||
api[apiVariable] = process.env[envVariable];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
possiblyOverride('adminUrl', 'FIREBASE_ADMIN_URL');
|
||||
possiblyOverride('hostingUrl', 'FIREBASE_HOSTING_URL');
|
||||
possiblyOverride('realtimeUrl', 'FIREBASE_REALTIME_URL');
|
||||
possiblyOverride('uploadUrl', 'FIREBASE_UPLOAD_URL');
|
||||
|
||||
module.exports = api;
|
329
node_modules/firebase-tools/lib/auth.js
generated
vendored
Normal file
329
node_modules/firebase-tools/lib/auth.js
generated
vendored
Normal file
|
@ -0,0 +1,329 @@
|
|||
var prompt = require('prompt'),
|
||||
fs = require('fs'),
|
||||
path = require('path'),
|
||||
api = require('./api'),
|
||||
util = require('util'),
|
||||
chalk = require('chalk'),
|
||||
_when = require('when');
|
||||
|
||||
var auth = {
|
||||
configFile: path.join(
|
||||
(process.env.HOME || process.env.USERPROFILE),
|
||||
'.firebaserc'
|
||||
),
|
||||
maxRetries: 3,
|
||||
requireLogin: function(argv, callback) {
|
||||
var that = this;
|
||||
|
||||
if (argv.email && argv.password) {
|
||||
this._attemptLogin(argv, this.maxRetries, callback);
|
||||
} else if ((this.email.length === 0) || (this.token.length === 0)) {
|
||||
console.log('Please sign into your Firebase account to continue...');
|
||||
this._attemptLogin(argv, this.maxRetries, callback);
|
||||
} else {
|
||||
this._validate(function(err) {
|
||||
if (err) {
|
||||
console.log('Please sign into your Firebase account to continue...');
|
||||
that._attemptLogin(argv, that.maxRetries, callback);
|
||||
} else {
|
||||
setTimeout(callback, 0, null, that.email, that.token);
|
||||
}
|
||||
});
|
||||
}
|
||||
},
|
||||
_validate: function(callback) {
|
||||
api.request(
|
||||
'GET',
|
||||
'/token/validate',
|
||||
{
|
||||
cli: require('./firebase').version
|
||||
},
|
||||
true,
|
||||
function(statusCode, response) {
|
||||
if (typeof(callback) === 'function') {
|
||||
if (typeof(response.error) !== 'undefined') {
|
||||
console.log(chalk.red(response.error.message) + ' - Please update to at ' +
|
||||
'least v' + response.minCLI + ' by running ' +
|
||||
chalk.cyan('npm update -g ' + require('./firebase').name));
|
||||
process.exit(1);
|
||||
} else if (response.valid) {
|
||||
setTimeout(callback, 0, null);
|
||||
} else {
|
||||
setTimeout(callback, 0, new Error('Invalid Access Token'));
|
||||
}
|
||||
}
|
||||
}
|
||||
);
|
||||
},
|
||||
login: function(argv, callback) {
|
||||
this._attemptLogin(argv, this.maxRetries, callback);
|
||||
},
|
||||
_attemptLogin: function(argv, tries, callback) {
|
||||
var that = this;
|
||||
if (tries > 0) {
|
||||
if (tries !== this.maxRetries) {
|
||||
if (argv.silent) {
|
||||
console.log(chalk.red('Input Error') + ' - Email or password incorrect');
|
||||
process.exit(1);
|
||||
}
|
||||
console.log('Email or password incorrect, please try again');
|
||||
delete prompt.override.email;
|
||||
delete prompt.override.password;
|
||||
}
|
||||
this._loginRequest(argv, function(err, email, token) {
|
||||
if (err) {
|
||||
that._attemptLogin(argv, tries - 1, callback);
|
||||
} else {
|
||||
setTimeout(callback, 0, null, email, token);
|
||||
}
|
||||
});
|
||||
} else {
|
||||
console.log(chalk.red('Login Unsuccessful'));
|
||||
process.exit(1);
|
||||
}
|
||||
},
|
||||
_loginRequest: function(argv, callback) {
|
||||
var that = this,
|
||||
schema = [
|
||||
{
|
||||
name: 'email',
|
||||
description: 'Email:',
|
||||
pattern: /@/,
|
||||
message: 'Must be a valid email address',
|
||||
required: true,
|
||||
type: 'string'
|
||||
},{
|
||||
name: 'password',
|
||||
description: 'Password:',
|
||||
hidden: true,
|
||||
required: true,
|
||||
type: 'string'
|
||||
}
|
||||
];
|
||||
|
||||
if (this.email.length > 0) {
|
||||
schema[0].default = this.email;
|
||||
}
|
||||
|
||||
if (argv.silent) {
|
||||
for (var i in schema) {
|
||||
var item = schema[i];
|
||||
if (!prompt.override[item.name] || (item.pattern && !item.pattern.test(prompt.override[item.name]))) {
|
||||
console.log(chalk.red('Input Error') + ' - Not enough or invalid parameters specified while in silent mode');
|
||||
console.log('Required ' + chalk.bold(item.name) + ' parameter missing or invalid');
|
||||
process.exit(1);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
prompt.get(schema, function(err, result) {
|
||||
if (err) {
|
||||
if (typeof(callback) === 'function') {
|
||||
setTimeout(callback, 0, new Error('Error Getting User Input'));
|
||||
}
|
||||
return;
|
||||
}
|
||||
that.email = result.email;
|
||||
that._authenticate.bind(that)(result.email, result.password, callback);
|
||||
});
|
||||
},
|
||||
_authenticate: function(email, password, callback) {
|
||||
var data = {
|
||||
email: email,
|
||||
password: password,
|
||||
rememberMe: true,
|
||||
cli: require('./firebase').version
|
||||
};
|
||||
api.request(
|
||||
'GET',
|
||||
'/account/login',
|
||||
data,
|
||||
false,
|
||||
this._handleLogin.bind(this, callback)
|
||||
);
|
||||
},
|
||||
_handleLogin: function(callback, statusCode, response) {
|
||||
var token = response.adminToken;
|
||||
if (token) {
|
||||
this.token = token;
|
||||
this.saveConfig(callback);
|
||||
} else if (typeof(response.error) !== 'undefined') {
|
||||
if (typeof(response.minCLI) === 'undefined') {
|
||||
if (typeof(callback) === 'function') {
|
||||
setTimeout(callback, 0, new Error('Email or Password Invalid'));
|
||||
}
|
||||
} else {
|
||||
console.log(chalk.red(response.error.message) + ' - Please update to at ' +
|
||||
'least v' + response.minCLI + ' by running ' +
|
||||
chalk.cyan('npm update -g ' + require('./firebase').name));
|
||||
process.exit(1);
|
||||
}
|
||||
}
|
||||
},
|
||||
saveConfig: function(callback) {
|
||||
var data = {
|
||||
email: this.email,
|
||||
token: this.token
|
||||
};
|
||||
var dataString = JSON.stringify(data, null, 2) + '\n';
|
||||
try {
|
||||
fs.writeFileSync(this.configFile, dataString);
|
||||
} catch (err) {
|
||||
if (typeof(callback) === 'function') {
|
||||
setTimeout(callback, 0, new Error('Could Not Save Settings'));
|
||||
}
|
||||
return;
|
||||
}
|
||||
if (typeof(callback) === 'function') {
|
||||
setTimeout(callback, 0, null, this.email, this.token);
|
||||
}
|
||||
},
|
||||
logout: function(deleteSettings, callback) {
|
||||
var that = this;
|
||||
this._invalidateToken(function(err) {
|
||||
if (err) {
|
||||
setTimeout(callback, 0, err);
|
||||
}
|
||||
if (deleteSettings) {
|
||||
try {
|
||||
fs.unlinkSync(that.configFile);
|
||||
} catch (e) {
|
||||
setTimeout(callback, 0, e);
|
||||
return;
|
||||
}
|
||||
setTimeout(callback, 0, null);
|
||||
} else {
|
||||
that.token = '';
|
||||
that.saveConfig(callback);
|
||||
}
|
||||
});
|
||||
},
|
||||
_invalidateToken: function(callback) {
|
||||
if (this.token.length > 0) {
|
||||
var url = '/account/token';
|
||||
api.request('DELETE', url, {}, true, function(statusCode, response) {
|
||||
setTimeout(callback, 0, null);
|
||||
});
|
||||
} else {
|
||||
if (typeof(callback) === 'function') {
|
||||
setTimeout(callback, 0, null);
|
||||
}
|
||||
}
|
||||
},
|
||||
checkCanAccess: function(firebase, callback) {
|
||||
var url = '/firebase/' + firebase + '/token';
|
||||
api.request('GET', url, {}, true, function(statusCode, response) {
|
||||
if (!response.error) {
|
||||
setTimeout(callback, 0, null, response);
|
||||
} else {
|
||||
setTimeout(callback, 0, new Error('Permission Denied'));
|
||||
}
|
||||
});
|
||||
},
|
||||
updateRules: function(firebase, authToken, rules, callback) {
|
||||
var rulesString;
|
||||
if (rules) {
|
||||
if (!fs.existsSync(rules)) {
|
||||
console.log(chalk.red('Security Rules Error') + ' - specified security' +
|
||||
' rules file does not exist');
|
||||
process.exit(1);
|
||||
}
|
||||
try {
|
||||
rulesString = fs.readFileSync(rules, 'utf8');
|
||||
} catch (err) {
|
||||
console.log(chalk.red('Security Rules Error') + ' - couldn\'t read security ' +
|
||||
'rules');
|
||||
process.exit(1);
|
||||
}
|
||||
if (rulesString.length === 0) {
|
||||
console.log(chalk.red('Security Rules Error') + ' - couldn\'t read security ' +
|
||||
'rules');
|
||||
process.exit(1);
|
||||
}
|
||||
console.log('Updating security rules...');
|
||||
api.setRules(firebase, rulesString, authToken, callback);
|
||||
} else {
|
||||
setTimeout(callback, 0, 200, {});
|
||||
}
|
||||
},
|
||||
getFirebases: function(callback) {
|
||||
api.request('GET', '/account', {}, true, function(statusCode, response) {
|
||||
if (typeof(response.firebases) !== 'undefined') {
|
||||
var firebases = [];
|
||||
for (var firebase in response.firebases) {
|
||||
if (response.firebases.hasOwnProperty(firebase)) {
|
||||
firebases.push(firebase);
|
||||
}
|
||||
}
|
||||
if (typeof(callback) !== 'undefined') {
|
||||
setTimeout(callback, 0, null, firebases);
|
||||
}
|
||||
} else {
|
||||
if (typeof(callback) !== 'undefined') {
|
||||
setTimeout(callback, 0, new Error('Could not get list of Firebases'));
|
||||
}
|
||||
}
|
||||
});
|
||||
},
|
||||
getConfig: function() {
|
||||
var config = {};
|
||||
var data = fs.readFileSync(this.configFile, 'utf8');
|
||||
try {
|
||||
config = JSON.parse(data);
|
||||
} catch (e) {}
|
||||
return config;
|
||||
},
|
||||
listFirebases: function(argv) {
|
||||
return _when.promise(function(resolve, reject, notify) {
|
||||
auth.requireLogin(argv, function(err) {
|
||||
if (err) {
|
||||
var error = new Error('Login Unsuccessful');
|
||||
error.type = 'LOGIN';
|
||||
reject(error);
|
||||
} else {
|
||||
auth.getFirebases(function(err, firebases) {
|
||||
if (err) {
|
||||
var error = new Error('Could Not List Firebases');
|
||||
error.type = 'ACCOUNT';
|
||||
reject(error);
|
||||
} else {
|
||||
resolve({
|
||||
firebases: firebases,
|
||||
showFirebases: function() {
|
||||
console.log(chalk.yellow('----------------------------------------------------'));
|
||||
console.log(chalk.yellow(util.format('Your Firebase Apps %s', auth.email)));
|
||||
console.log(chalk.yellow('----------------------------------------------------'));
|
||||
console.log(firebases.join('\n'));
|
||||
console.log(chalk.yellow('----------------------------------------------------'));
|
||||
}
|
||||
});
|
||||
}
|
||||
});
|
||||
}
|
||||
});
|
||||
});
|
||||
}
|
||||
};
|
||||
|
||||
function initAuth() {
|
||||
try {
|
||||
var config = auth.getConfig();
|
||||
if (typeof(config.token) === 'string') {
|
||||
auth.token = config.token;
|
||||
} else {
|
||||
auth.token = '';
|
||||
}
|
||||
if (typeof(config.email) === 'string') {
|
||||
auth.email = config.email;
|
||||
} else {
|
||||
auth.email = '';
|
||||
}
|
||||
} catch (err) {
|
||||
auth.token = '';
|
||||
auth.email = '';
|
||||
}
|
||||
}
|
||||
|
||||
initAuth();
|
||||
|
||||
module.exports = auth;
|
Loading…
Add table
Add a link
Reference in a new issue