Skip to content

Instantly share code, notes, and snippets.

@sailsinaction
Last active January 31, 2022 17:53
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save sailsinaction/22601ba11f523acccd67 to your computer and use it in GitHub Desktop.
Save sailsinaction/22601ba11f523acccd67 to your computer and use it in GitHub Desktop.
Chapter 7 - Gists
.d8888b. 888 888 8888888888 .d8888b. d8b 888
d88P Y88b 888 888 d88P d88P Y88b Y8P 888
888 888 888 888 d88P 888 888 888
888 88888b. 8888b. 88888b. 888888 .d88b. 888d888 d88P 888 888 .d8888b 888888 .d8888b
888 888 "88b "88b 888 "88b 888 d8P Y8b 888P" 88888888 888 88888 888 88K 888 88K
888 888 888 888 .d888888 888 888 888 88888888 888 d88P 888888 888 888 888 "Y8888b. 888 "Y8888b.
Y88b d88P 888 888 888 888 888 d88P Y88b. Y8b. 888 d88P Y88b d88P 888 X88 Y88b. X88
"Y8888P" 888 888 "Y888888 88888P" "Y888 "Y8888 888 d88P "Y8888P88 888 88888P' "Y888 88888P'
888
888
888
/**
* UserController
*
* @description :: Server-side logic for managing users
* @help :: See http://sailsjs.org/#!/documentation/concepts/Controllers
*/
module.exports = {
signup: function(req, res) {
// email is required
if (_.isUndefined(req.param('email'))) {
return res.badRequest('An email address is required!');
}
// password is required
if (_.isUndefined(req.param('password'))) {
return res.badRequest('A password is required!');
}
// password must be at least 6 characters
if (req.param('password').length < 6) {
return res.badRequest('Password must be at least 6 characters!');
}
// username is required
if (_.isUndefined(req.param('username'))) {
return res.badRequest('A username is required!');
}
// username must be at least 6 characters
if (req.param('username').length < 6) {
return res.badRequest('Username must be at least 6 characters!');
}
// Username must contain only numbers and letters.
if (!_.isString(req.param('username')) || req.param('username').match(/[^a-z0-9]/i)) {
return res.badRequest('Invalid username: must consist of numbers and letters only.');
}
// build up the user into a dictionary
var options = {
email: req.param('email'),
username: req.param('username'),
password: req.param('password')
};
// respond with the new user dictionary
return res.json(options);
}
};
/**
* UserController
*
* @description :: Server-side logic for managing users
* @help :: See http://sailsjs.org/#!/documentation/concepts/Controllers
*/
var Emailaddresses = require('machinepack-emailaddresses');
module.exports = {
signup: function(req, res) {
// email is required
if (_.isUndefined(req.param('email'))) {
return res.badRequest('An email address is required!');
}
// password is required
if (_.isUndefined(req.param('password'))) {
return res.badRequest('A password is required!');
}
// password must be at least 6 characters
if (req.param('password').length < 6) {
return res.badRequest('Password must be at least 6 characters!');
}
// username is required
if (_.isUndefined(req.param('username'))) {
return res.badRequest('A username is required!');
}
// username must be at least 6 characters
if (req.param('username').length < 6) {
return res.badRequest('Username must be at least 6 characters!');
}
// Username must contain only numbers and letters.
if (!_.isString(req.param('username')) || req.param('username').match(/[^a-z0-9]/i)) {
return res.badRequest('Invalid username: must consist of numbers and letters only.');
}
// Determine whether or not the provided string is an email address.
Emailaddresses.validate({
string: req.param('email'),
}).exec({
// An unexpected error occurred.
error: function(err) {
return res.serverError(err);
},
// The provided string is not an email address.
invalid: function() {
return res.badRequest('Doesn\'t look like an email address to me!');
},
// OK.
success: function() {
// build up the user into a dictionary
var options = {
email: req.param('email'),
username: req.param('username'),
password: req.param('password')
};
// respond with the new user dictionary
return res.json(options);
},
});
}
};
/**
* UserController
*
* @description :: Server-side logic for managing users
* @help :: See http://sailsjs.org/#!/documentation/concepts/Controllers
*/
var Emailaddresses = require('machinepack-emailaddresses');
var Passwords = require('machinepack-passwords');
module.exports = {
signup: function(req, res) {
// email is required
if (_.isUndefined(req.param('email'))) {
return res.badRequest('An email address is required!');
}
// password is required
if (_.isUndefined(req.param('password'))) {
return res.badRequest('A password is required!');
}
// password must be at least 6 characters
if (req.param('password').length < 6) {
return res.badRequest('Password must be at least 6 characters!');
}
// username is required
if (_.isUndefined(req.param('username'))) {
return res.badRequest('A username is required!');
}
// username must be at least 6 characters
if (req.param('username').length < 6) {
return res.badRequest('Username must be at least 6 characters!');
}
// Username must contain only numbers and letters.
if (!_.isString(req.param('username')) || req.param('username').match(/[^a-z0-9]/i)) {
return res.badRequest('Invalid username: must consist of numbers and letters only.');
}
// Determine whether or not the provided string is an email address.
Emailaddresses.validate({
string: req.param('email'),
}).exec({
// An unexpected error occurred.
error: function(err) {
return res.serverError(err);
},
// The provided string is not an email address.
invalid: function() {
return res.badRequest('Doesn\'t look like an email address to me!');
},
// OK.
success: function() {
Passwords.encryptPassword({
password: req.param('password'),
}).exec({
error: function(err) {
return res.serverError(err);
},
success: function(result) {
return res.json(result);
}
});
}
});
}
};
/**
* UserController
*
* @description :: Server-side logic for managing users
* @help :: See http://sailsjs.org/#!/documentation/concepts/Controllers
*/
var Emailaddresses = require('machinepack-emailaddresses');
var Passwords = require('machinepack-passwords');
var Gravatar = require('machinepack-gravatar');
module.exports = {
signup: function(req, res) {
// email is required
if (_.isUndefined(req.param('email'))) {
return res.badRequest('An email address is required!');
}
// password is required
if (_.isUndefined(req.param('password'))) {
return res.badRequest('A password is required!');
}
// password must be at least 6 characters
if (req.param('password').length < 6) {
return res.badRequest('Password must be at least 6 characters!');
}
// username is required
if (_.isUndefined(req.param('username'))) {
return res.badRequest('A username is required!');
}
// username must be at least 6 characters
if (req.param('username').length < 6) {
return res.badRequest('Username must be at least 6 characters!');
}
// Username must contain only numbers and letters.
if (!_.isString(req.param('username')) || req.param('username').match(/[^a-z0-9]/i)) {
return res.badRequest('Invalid username: must consist of numbers and letters only.');
}
// Determine whether or not the provided string is an email address.
Emailaddresses.validate({
string: req.param('email'),
}).exec({
// An unexpected error occurred.
error: function(err) {
return res.serverError(err);
},
// The provided string is not an email address.
invalid: function() {
return res.badRequest('Doesn\'t look like an email address to me!');
},
// OK.
success: function() {
// Encrypt the password
Passwords.encryptPassword({
password: req.param('password'),
}).exec({
error: function(err) {
return res.serverError(err);
},
success: function(result) {
try {
// Create Gravatar URL
var gravatarURL = Gravatar.getImageUrl({
emailAddress: req.param('email'),
}).execSync();
} catch(err) {
return res.serverError(err);
}
// Build up options dictionary
var options = {
email: req.param('email'),
username: req.param('username'),
encryptedPassword: result,
gravatarURL: gravatarURL
};
return res.json(options);
}
});
}
});
}
};
/**
* UserController
*
* @description :: Server-side logic for managing users
* @help :: See http://sailsjs.org/#!/documentation/concepts/Controllers
*/
var Emailaddresses = require('machinepack-emailaddresses');
var Passwords = require('machinepack-passwords');
var Gravatar = require('machinepack-gravatar');
module.exports = {
signup: function(req, res) {
// email is required
if (_.isUndefined(req.param('email'))) {
return res.badRequest('An email address is required!');
}
// password is required
if (_.isUndefined(req.param('password'))) {
return res.badRequest('A password is required!');
}
// password must be at least 6 characters
if (req.param('password').length < 6) {
return res.badRequest('Password must be at least 6 characters!');
}
// username is required
if (_.isUndefined(req.param('username'))) {
return res.badRequest('A username is required!');
}
// username must be at least 6 characters
if (req.param('username').length < 6) {
return res.badRequest('Username must be at least 6 characters!');
}
// Username must contain only numbers and letters.
if (!_.isString(req.param('username')) || req.param('username').match(/[^a-z0-9]/i)) {
return res.badRequest('Invalid username: must consist of numbers and letters only.');
}
// Determine whether or not the provided string is an email address.
Emailaddresses.validate({
string: req.param('email'),
}).exec({
// An unexpected error occurred.
error: function(err) {
return res.serverError(err);
},
// The provided string is not an email address.
invalid: function() {
return res.badRequest('Doesn\'t look like an email address to me!');
},
// OK.
success: function() {
// Encrypt the password
Passwords.encryptPassword({
password: req.param('password'),
}).exec({
error: function(err) {
return res.serverError(err);
},
success: function(result) {
try {
// Create Gravatar URL
var gravatarURL = Gravatar.getImageUrl({
emailAddress: req.param('email'),
}).execSync();
} catch(err) {
return res.serverError(err);
}
// Build up options dictionary
var options = {
email: req.param('email'),
username: req.param('username'),
encryptedPassword: result,
gravatarURL: gravatarURL
};
User.create(options).exec(function (err, createdUser) {
if (err) {
return res.negotiate(err);
}
return res.json(createdUser);
});
}
});
}
});
}
};
angular.module('brushfire').controller('signupPageController', ['$scope', '$http', 'toastr', function($scope, $http, toastr){
// set-up loading state
$scope.signupForm = {
loading: false
};
$scope.submitSignupForm = function(){
// Set the loading state (i.e. show loading spinner)
$scope.signupForm.loading = true;
// Submit a POST request to /user [This is using blueprints.]
// $http.post('/user', {
// // Submit a POST request to Sails. [The signup action has been created.]
$http.post('/user/signup', {
email: $scope.signupForm.email,
username: $scope.signupForm.username,
password: $scope.signupForm.password
})
.then(function onSuccess(sailsResponse){
// Redirect to the profile page [This is after we have a profile page built]
// window.location = '#/profile/' + sailsResponse.data.id;
// Redirect to the user blueprint record [This is before we have the profile page built]
window.location = '/user/' + sailsResponse.data.id;
})
.catch(function onError(sailsResponse){
console.log(sailsResponse.data.invalidAttributes);
// Handle known error type(s).
if (sailsResponse.status == 409) {
toastr.error(sailsResponse.data);
$scope.signupForm.errorMsg = 'An unexpected error occurred: ' + (sailsResponse.data || sailsResponse.status);
return;
}
if (sailsResponse.data.invalidAttributes) {
$scope.signupForm.errorMsg = 'An unexpected error occurred: ' + (JSON.stringify(sailsResponse.data.invalidAttributes));
return;
}
// Handle unknown error type(s).
$scope.signupForm.errorMsg = 'An unexpected error occurred: ' + (JSON.stringify(sailsResponse.data) || sailsResponse.status);
})
.finally(function eitherWay(){
$scope.signupForm.loading = false;
});
};
}]);
/**
* UserController
*
* @description :: Server-side logic for managing users
* @help :: See http://sailsjs.org/#!/documentation/concepts/Controllers
*/
var Emailaddresses = require('machinepack-emailaddresses');
var Passwords = require('machinepack-passwords');
var Gravatar = require('machinepack-gravatar');
module.exports = {
signup: function(req, res) {
// email is required
if (_.isUndefined(req.param('email'))) {
return res.badRequest('An email address is required!');
}
// password is required
if (_.isUndefined(req.param('password'))) {
return res.badRequest('A password is required!');
}
// password must be at least 6 characters
if (req.param('password').length < 6) {
return res.badRequest('Password must be at least 6 characters!');
}
// username is required
if (_.isUndefined(req.param('username'))) {
return res.badRequest('A username is required!');
}
// username must be at least 6 characters
if (req.param('username').length < 6) {
return res.badRequest('Username must be at least 6 characters!');
}
// Username must contain only numbers and letters.
if (!_.isString(req.param('username')) || req.param('username').match(/[^a-z0-9]/i)) {
return res.badRequest('Invalid username: must consist of numbers and letters only.');
}
// Determine whether or not the provided string is an email address.
Emailaddresses.validate({
string: req.param('email'),
}).exec({
// An unexpected error occurred.
error: function(err) {
return res.serverError(err);
},
// The provided string is not an email address.
invalid: function() {
return res.badRequest('Doesn\'t look like an email address to me!');
},
// OK.
success: function() {
// Encrypt the password
Passwords.encryptPassword({
password: req.param('password'),
}).exec({
error: function(err) {
return res.serverError(err);
},
success: function(result) {
try {
// Create Gravatar URL
var gravatarURL = Gravatar.getImageUrl({
emailAddress: req.param('email'),
}).execSync();
} catch(err) {
return res.serverError(err);
}
// Build up options
var options = {
email: req.param('email'),
username: req.param('username'),
encryptedPassword: result,
gravatarURL: gravatarURL
};
User.create(options).exec(function(err, createdUser) {
if (err) {
if (err.invalidAttributes && err.invalidAttributes.email && err.invalidAttributes.email[0] && err.invalidAttributes.email[0].rule === 'unique') {
return res.send(409, 'Email address is already taken by another user, please try again.');
}
if (err.invalidAttributes && err.invalidAttributes.username && err.invalidAttributes.username[0] && err.invalidAttributes.username[0].rule === 'unique') {
return res.send(409, 'Username is already taken by another user, please try again.');
}
return res.negotiate(err);
}
return res.json(createdUser);
});
}
});
}
});
}
};
angular.module('brushfire').controller('signupPageController', ['$scope', '$http', 'toastr', function($scope, $http, toastr){
// set-up loading state
$scope.signupForm = {
loading: false
};
$scope.submitSignupForm = function(){
// Set the loading state (i.e. show loading spinner)
$scope.signupForm.loading = true;
// Submit a POST request to /user [This is using blueprints.]
// $http.post('/user', {
// // Submit a POST request to Sails. [The signup action has been created.]
$http.post('/user/signup', {
email: $scope.signupForm.email,
username: $scope.signupForm.username,
password: $scope.signupForm.password
})
.then(function onSuccess(sailsResponse){
// Redirect to the profile page [This is after we have a profile page built]
// window.location = '#/profile/' + sailsResponse.data.id;
// Redirect to the user blueprint record [This is before we have the profile page built]
window.location = '/user/' + sailsResponse.data.id;
})
.catch(function onError(sailsResponse){
console.log(sailsResponse.data.invalidAttributes);
// Handle known error type(s).
if (sailsResponse.status == 409) {
toastr.error(sailsResponse.data);
// $scope.signupForm.errorMsg = 'An unexpected error occurred: ' + (sailsResponse.data || sailsResponse.status);
return;
}
if (sailsResponse.data.invalidAttributes) {
$scope.signupForm.errorMsg = 'An unexpected error occurred: ' + (JSON.stringify(sailsResponse.data.invalidAttributes));
return;
}
// Handle unknown error type(s).
$scope.signupForm.errorMsg = 'An unexpected error occurred: ' + (JSON.stringify(sailsResponse.data) || sailsResponse.status);
})
.finally(function eitherWay(){
$scope.signupForm.loading = false;
});
};
}]);
module.exports = function alreadyInUse (err){
// Get access to `res`
// (since the arguments are up to us)
var res = this.res;
if (err.invalidAttributes.email) {
return res.send(409, 'Email address is already taken by another user, please try again.');
}
if (err.invalidAttributes.username) {
return res.send(409, 'Username is already taken by another user, please try again.');
}
};
/**
* UserController
*
* @description :: Server-side logic for managing users
* @help :: See http://sailsjs.org/#!/documentation/concepts/Controllers
*/
var Emailaddresses = require('machinepack-emailaddresses');
var Passwords = require('machinepack-passwords');
var Gravatar = require('machinepack-gravatar');
module.exports = {
signup: function(req, res) {
// email is required
if (_.isUndefined(req.param('email'))) {
return res.badRequest('An email address is required!');
}
// password is required
if (_.isUndefined(req.param('password'))) {
return res.badRequest('A password is required!');
}
// password must be at least 6 characters
if (req.param('password').length < 6) {
return res.badRequest('Password must be at least 6 characters!');
}
// username is required
if (_.isUndefined(req.param('username'))) {
return res.badRequest('A username is required!');
}
// username must be at least 6 characters
if (req.param('username').length < 6) {
return res.badRequest('Username must be at least 6 characters!');
}
// Username must contain only numbers and letters.
if (!_.isString(req.param('username')) || req.param('username').match(/[^a-z0-9]/i)) {
return res.badRequest('Invalid username: must consist of numbers and letters only.');
}
// Determine whether or not the provided string is an email address.
Emailaddresses.validate({
string: req.param('email'),
}).exec({
// An unexpected error occurred.
error: function(err) {
return res.serverError(err);
},
// The provided string is not an email address.
invalid: function() {
return res.badRequest('Doesn\'t look like an email address to me!');
},
// OK.
success: function() {
// Encrypt the password
Passwords.encryptPassword({
password: req.param('password'),
}).exec({
error: function(err) {
return res.serverError(err);
},
success: function(result) {
try {
// Create Gravatar URL
var gravatarURL = Gravatar.getImageUrl({
emailAddress: req.param('email'),
}).execSync();
} catch(err) {
return res.serverError(err);
}
// Build up options
var options = {
email: req.param('email'),
username: req.param('username'),
encryptedPassword: result,
gravatarURL: gravatarURL
};
User.create(options).exec(function(err, createdUser) {
if (err) {
if (err.invalidAttributes && err.invalidAttributes.email && err.invalidAttributes.email[0] && err.invalidAttributes.email[0].rule === 'unique') {
return res.alreadyInUse(err);
}
if (err.invalidAttributes && err.invalidAttributes.username && err.invalidAttributes.username[0] && err.invalidAttributes.username[0].rule === 'unique') {
return res.alreadyInUse(err);
}
return res.negotiate(err);
}
return res.json(createdUser);
});
}
});
}
});
}
};
/**
* Bootstrap
* (sails.config.bootstrap)
*
* An asynchronous bootstrap function that runs before your Sails app gets lifted.
* This gives you an opportunity to set up your data model, run jobs, or perform some special logic.
*
* For more information on bootstrapping your app, check out:
* http://sailsjs.org/#!/documentation/reference/sails.config/sails.config.bootstrap.html
*/
module.exports.bootstrap = function(cb) {
// Return the number of records in the video model
Video.count().exec(function(err, numVideos) {
if (err) {
return cb(err);
}
// If there's at least one log the number to the console.
if (numVideos > 0) {
// return cb();
return createTestUsers();
}
// Add machinepack-youtube as a depedency
var Youtube = require('machinepack-youtube');
// List Youtube videos which match the specified search query.
Youtube.searchVideos({
query: 'grumpy cat',
apiKey: sails.config.google.apiKey,
limit: 15,
}).exec({
// An unexpected error occurred.
error: function(err) {
},
// OK.
success: function(foundVideos) {
_.each(foundVideos, function(video) {
video.src = 'https://www.youtube.com/embed/' + video.id;
delete video.description;
delete video.publishedAt;
delete video.id;
delete video.url;
});
Video.create(foundVideos).exec(function(err, videoRecordsCreated) {
if (err) {
return cb(err);
}
// return cb();
return createTestUsers();
});
},
});
});
function createTestUsers() {
var Passwords = require('machinepack-passwords');
var Gravatar = require('machinepack-gravatar');
User.findOne({
email: 'sailsinaction@gmail.com'
}).exec(function(err, foundUser) {
if (foundUser){
return cb();
}
Passwords.encryptPassword({
password: 'abc123',
}).exec({
error: function(err) {
return cb(err);
},
success: function(result) {
var options = {};
try {
options.gravatarURL = Gravatar.getImageUrl({
emailAddress: 'sailsinaction@gmail.com'
}).execSync();
} catch (err) {
return cb(err);
}
options.email = 'sailsinaction@gmail.com';
options.encryptedPassword = result;
options.username = 'sailsinaction';
options.deleted = false;
options.admin = false;
options.banned = false;
User.create(options).exec(function(err, createdUser) {
if (err) {
return cb(err);
}
return cb();
});
}
});
});
}
};
/**
* UserController
*
* @description :: Server-side logic for managing users
* @help :: See http://sailsjs.org/#!/documentation/concepts/Controllers
*/
var Emailaddresses = require('machinepack-emailaddresses');
var Passwords = require('machinepack-passwords');
var Gravatar = require('machinepack-gravatar');
module.exports = {
signup: function(req, res) {
// email is required
if (_.isUndefined(req.param('email'))) {
return res.badRequest('An email address is required!');
}
// password is required
if (_.isUndefined(req.param('password'))) {
return res.badRequest('A password is required!');
}
// password must be at least 6 characters
if (req.param('password').length < 6) {
return res.badRequest('Password must be at least 6 characters!');
}
// username is required
if (_.isUndefined(req.param('username'))) {
return res.badRequest('A username is required!');
}
// username must be at least 6 characters
if (req.param('username').length < 6) {
return res.badRequest('Username must be at least 6 characters!');
}
// Username must contain only numbers and letters.
if (!_.isString(req.param('username')) || req.param('username').match(/[^a-z0-9]/i)) {
return res.badRequest('Invalid username: must consist of numbers and letters only.');
}
// Determine whether or not the provided string is an email address.
Emailaddresses.validate({
string: req.param('email'),
}).exec({
// An unexpected error occurred.
error: function(err) {
return res.serverError(err);
},
// The provided string is not an email address.
invalid: function() {
return res.badRequest('Doesn\'t look like an email address to me!');
},
// OK.
success: function() {
// Encrypt the password
Passwords.encryptPassword({
password: req.param('password'),
}).exec({
error: function(err) {
return res.serverError(err);
},
success: function(result) {
try {
// Create Gravatar URL
var gravatarURL = Gravatar.getImageUrl({
emailAddress: req.param('email'),
}).execSync();
} catch(err) {
return res.serverError(err);
}
// Build up options
var options = {
email: req.param('email'),
username: req.param('username'),
encryptedPassword: result,
gravatarURL: gravatarURL
};
User.create(options).exec(function(err, createdUser) {
if (err) {
if (err.invalidAttributes && err.invalidAttributes.email && err.invalidAttributes.email[0] && err.invalidAttributes.email[0].rule === 'unique') {
return res.alreadyInUse(err);
}
if (err.invalidAttributes && err.invalidAttributes.username && err.invalidAttributes.username[0] && err.invalidAttributes.username[0].rule === 'unique') {
return res.alreadyInUse(err);
}
return res.negotiate(err);
}
return res.json(createdUser);
});
}
});
}
});
},
profile: function(req, res) {
User.findOne(req.param('id')).exec(function foundUser(err, user) {
if (err) return res.negotiate(err);
// Handle no user being found
if (!user) return res.notFound();
// Build up user options
var options = {
email: user.email,
username: user.username,
gravatarURL: user.gravatarURL,
deleted: user.deleted,
admin: user.admin,
banned: user.banned,
id: user.id
};
// Return the user
return res.json(user);
});
}
};
angular.module('brushfire').controller('signupPageController', ['$scope', '$http', 'toastr', function($scope, $http, toastr){
// set-up loading state
$scope.signupForm = {
loading: false
};
$scope.submitSignupForm = function(){
// Set the loading state (i.e. show loading spinner)
$scope.signupForm.loading = true;
// Submit a POST request to /user [This is using blueprints.]
// $http.post('/user', {
// // Submit a POST request to Sails. [The signup action has been created.]
$http.post('/user/signup', {
email: $scope.signupForm.email,
username: $scope.signupForm.username,
password: $scope.signupForm.password
})
.then(function onSuccess(sailsResponse){
// Redirect to the profile page [This is after we have a profile page built]
window.location = '#/profile/' + sailsResponse.data.id;
// Redirect to the user blueprint record [This is before we have the profile page built]
// window.location = '/user/' + sailsResponse.data.id;
})
.catch(function onError(sailsResponse){
console.log(sailsResponse.data.invalidAttributes);
// Handle known error type(s).
if (sailsResponse.status == 409) {
toastr.error(sailsResponse.data);
// $scope.signupForm.errorMsg = 'An unexpected error occurred: ' + (sailsResponse.data || sailsResponse.status);
return;
}
if (sailsResponse.data.invalidAttributes) {
$scope.signupForm.errorMsg = 'An unexpected error occurred: ' + (JSON.stringify(sailsResponse.data.invalidAttributes));
return;
}
// Handle unknown error type(s).
$scope.signupForm.errorMsg = 'An unexpected error occurred: ' + (JSON.stringify(sailsResponse.data) || sailsResponse.status);
})
.finally(function eitherWay(){
$scope.signupForm.loading = false;
});
};
}]);
/**
* UserController
*
* @description :: Server-side logic for managing users
* @help :: See http://sailsjs.org/#!/documentation/concepts/Controllers
*/
var Emailaddresses = require('machinepack-emailaddresses');
var Passwords = require('machinepack-passwords');
var Gravatar = require('machinepack-gravatar');
module.exports = {
signup: function(req, res) {
// email is required
if (_.isUndefined(req.param('email'))) {
return res.badRequest('An email address is required!');
}
// password is required
if (_.isUndefined(req.param('password'))) {
return res.badRequest('A password is required!');
}
// password must be at least 6 characters
if (req.param('password').length < 6) {
return res.badRequest('Password must be at least 6 characters!');
}
// username is required
if (_.isUndefined(req.param('username'))) {
return res.badRequest('A username is required!');
}
// username must be at least 6 characters
if (req.param('username').length < 6) {
return res.badRequest('Username must be at least 6 characters!');
}
// Username must contain only numbers and letters.
if (!_.isString(req.param('username')) || req.param('username').match(/[^a-z0-9]/i)) {
return res.badRequest('Invalid username: must consist of numbers and letters only.');
}
// Determine whether or not the provided string is an email address.
Emailaddresses.validate({
string: req.param('email'),
}).exec({
// An unexpected error occurred.
error: function(err) {
return res.serverError(err);
},
// The provided string is not an email address.
invalid: function() {
return res.badRequest('Doesn\'t look like an email address to me!');
},
// OK.
success: function() {
// Encrypt the password
Passwords.encryptPassword({
password: req.param('password'),
}).exec({
error: function(err) {
return res.serverError(err);
},
success: function(result) {
try {
// Create Gravatar URL
var gravatarURL = Gravatar.getImageUrl({
emailAddress: req.param('email'),
}).execSync();
} catch(err) {
return res.serverError(err);
}
// Build up options
var options = {
email: req.param('email'),
username: req.param('username'),
encryptedPassword: result,
gravatarURL: gravatarURL
};
User.create(options).exec(function(err, createdUser) {
if (err) {
if (err.invalidAttributes && err.invalidAttributes.email && err.invalidAttributes.email[0] && err.invalidAttributes.email[0].rule === 'unique') {
return res.alreadyInUse(err);
}
if (err.invalidAttributes && err.invalidAttributes.username && err.invalidAttributes.username[0] && err.invalidAttributes.username[0].rule === 'unique') {
return res.alreadyInUse(err);
}
return res.negotiate(err);
}
return res.json(createdUser);
});
}
});
}
});
},
profile: function(req, res) {
User.findOne(req.param('id')).exec(function foundUser(err, user) {
if (err) return res.negotiate(err);
// Handle no user being found
if (!user) return res.notFound();
// Build up user options
var options = {
email: user.email,
username: user.username,
gravatarURL: user.gravatarURL,
deleted: user.deleted,
admin: user.admin,
banned: user.banned,
id: user.id
};
// Return the user
return res.json(user);
});
},
delete: function(req, res) {
if (!req.param('id')){
return res.badRequest('id is a required parameter.');
}
User.destroy({
id: req.param('id')
}).exec(function (err, usersDestroyed){
if (err) return res.negotiate(err);
if (usersDestroyed.length === 0) {
return res.notFound();
}
return res.ok();
});
}
};
<!-- Error state -->
<div class="alert alert-info toggle" ng-show="userProfile.errorMsg">
<h5>Oops!</h5>
<p>Looks like an error occurred.</p>
<code>
{{userProfile.errorMsg}}
</code>
</div>
<!-- Loading state -->
<div ng-show="userProfile.loading">
<span class="overlord-loading-spinner fa fa-spinner"></span>
<span>Loading user data...</span>
</div>
<div ng-hide="userProfile.loading">
<div ng-hide="loading">
<div class="col-md-3">
<img src={{userProfile.properties.gravatarURL}}/>
</div>
</div>
</div>
<div class="col-md-3" ng-hide="userProfile.noProfile">
<h1>{{userProfile.properties.username}}</h1>
<h3> <a href="mailto:{{userProfile.properties.email}}">{{userProfile.properties.email}}</a></h3>
<div>
<a href="#/profile/edit/{{userProfile.properties.id}}" class="btn btn-lg btn-primary">Edit</a>
<!-- Hard Delete -->
<!-- <a ng-click="deleteProfile()" class="btn btn-lg btn-primary btn-danger">Delete</a> -->
<!-- Soft Delete -->
<a ng-click="removeProfile()" class="btn btn-lg btn-primary btn-danger">Delete</a>
</div>
</div>
/**
* UserController
*
* @description :: Server-side logic for managing users
* @help :: See http://sailsjs.org/#!/documentation/concepts/Controllers
*/
var Emailaddresses = require('machinepack-emailaddresses');
var Passwords = require('machinepack-passwords');
var Gravatar = require('machinepack-gravatar');
module.exports = {
signup: function(req, res) {
// email is required
if (_.isUndefined(req.param('email'))) {
return res.badRequest('An email address is required!');
}
// password is required
if (_.isUndefined(req.param('password'))) {
return res.badRequest('A password is required!');
}
// password must be at least 6 characters
if (req.param('password').length < 6) {
return res.badRequest('Password must be at least 6 characters!');
}
// username is required
if (_.isUndefined(req.param('username'))) {
return res.badRequest('A username is required!');
}
// username must be at least 6 characters
if (req.param('username').length < 6) {
return res.badRequest('Username must be at least 6 characters!');
}
// Username must contain only numbers and letters.
if (!_.isString(req.param('username')) || req.param('username').match(/[^a-z0-9]/i)) {
return res.badRequest('Invalid username: must consist of numbers and letters only.');
}
// Determine whether or not the provided string is an email address.
Emailaddresses.validate({
string: req.param('email'),
}).exec({
// An unexpected error occurred.
error: function(err) {
return res.serverError(err);
},
// The provided string is not an email address.
invalid: function() {
return res.badRequest('Doesn\'t look like an email address to me!');
},
// OK.
success: function() {
// Encrypt the password
Passwords.encryptPassword({
password: req.param('password'),
}).exec({
error: function(err) {
return res.serverError(err);
},
success: function(result) {
try {
// Create Gravatar URL
var gravatarURL = Gravatar.getImageUrl({
emailAddress: req.param('email'),
}).execSync();
} catch(err) {
return res.serverError(err);
}
// Build up options
var options = {
email: req.param('email'),
username: req.param('username'),
encryptedPassword: result,
gravatarURL: gravatarURL
};
User.create(options).exec(function(err, createdUser) {
if (err) {
if (err.invalidAttributes && err.invalidAttributes.email && err.invalidAttributes.email[0] && err.invalidAttributes.email[0].rule === 'unique') {
return res.alreadyInUse(err);
}
if (err.invalidAttributes && err.invalidAttributes.username && err.invalidAttributes.username[0] && err.invalidAttributes.username[0].rule === 'unique') {
return res.alreadyInUse(err);
}
return res.negotiate(err);
}
return res.json(createdUser);
});
}
});
}
});
},
profile: function(req, res) {
User.findOne(req.param('id')).exec(function foundUser(err, user) {
if (err) return res.negotiate(err);
// Handle no user being found
if (!user) return res.notFound();
// Build up user options
var options = {
email: user.email,
username: user.username,
gravatarURL: user.gravatarURL,
deleted: user.deleted,
admin: user.admin,
banned: user.banned,
id: user.id
};
// Return the user
return res.json(user);
});
},
delete: function(req, res) {
if (!req.param('id')){
return res.badRequest('id is a required parameter.');
}
User.destroy({
id: req.param('id')
}).exec(function (err, usersDestroyed){
if (err) return res.negotiate(err);
if (usersDestroyed.length === 0) {
return res.notFound();
}
return res.ok();
});
},
removeProfile: function(req, res) {
if (!req.param('id')){
return res.badRequest('id is a required parameter.');
}
User.update({
id: req.param('id')
},{
deleted: true
}, function(err, removedUser){
if (err) return res.negotiate(err);
if (removedUser.length === 0) {
return res.notFound();
}
return res.ok();
});
}
};
/**
* UserController
*
* @description :: Server-side logic for managing users
* @help :: See http://sailsjs.org/#!/documentation/concepts/Controllers
*/
var Emailaddresses = require('machinepack-emailaddresses');
var Passwords = require('machinepack-passwords');
var Gravatar = require('machinepack-gravatar');
module.exports = {
signup: function(req, res) {
// email is required
if (_.isUndefined(req.param('email'))) {
return res.badRequest('An email address is required!');
}
// password is required
if (_.isUndefined(req.param('password'))) {
return res.badRequest('A password is required!');
}
// password must be at least 6 characters
if (req.param('password').length < 6) {
return res.badRequest('Password must be at least 6 characters!');
}
// username is required
if (_.isUndefined(req.param('username'))) {
return res.badRequest('A username is required!');
}
// username must be at least 6 characters
if (req.param('username').length < 6) {
return res.badRequest('Username must be at least 6 characters!');
}
// Username must contain only numbers and letters.
if (!_.isString(req.param('username')) || req.param('username').match(/[^a-z0-9]/i)) {
return res.badRequest('Invalid username: must consist of numbers and letters only.');
}
// Determine whether or not the provided string is an email address.
Emailaddresses.validate({
string: req.param('email'),
}).exec({
// An unexpected error occurred.
error: function(err) {
return res.serverError(err);
},
// The provided string is not an email address.
invalid: function() {
return res.badRequest('Doesn\'t look like an email address to me!');
},
// OK.
success: function() {
// Encrypt the password
Passwords.encryptPassword({
password: req.param('password'),
}).exec({
error: function(err) {
return res.serverError(err);
},
success: function(result) {
try {
// Create Gravatar URL
var gravatarURL = Gravatar.getImageUrl({
emailAddress: req.param('email'),
}).execSync();
} catch(err) {
return res.serverError(err);
}
// Build up options
var options = {
email: req.param('email'),
username: req.param('username'),
encryptedPassword: result,
gravatarURL: gravatarURL
};
User.create(options).exec(function(err, createdUser) {
if (err) {
if (err.invalidAttributes && err.invalidAttributes.email && err.invalidAttributes.email[0] && err.invalidAttributes.email[0].rule === 'unique') {
return res.alreadyInUse(err);
}
if (err.invalidAttributes && err.invalidAttributes.username && err.invalidAttributes.username[0] && err.invalidAttributes.username[0].rule === 'unique') {
return res.alreadyInUse(err);
}
return res.negotiate(err);
}
return res.json(createdUser);
});
}
});
}
});
},
profile: function(req, res) {
User.findOne(req.param('id')).exec(function foundUser(err, user) {
if (err) return res.negotiate(err);
// Handle no user being found
if (!user) return res.notFound();
// Build up user options
var options = {
email: user.email,
username: user.username,
gravatarURL: user.gravatarURL,
deleted: user.deleted,
admin: user.admin,
banned: user.banned,
id: user.id
};
// Return the user
return res.json(user);
});
},
delete: function(req, res) {
if (!req.param('id')){
return res.badRequest('id is a required parameter.');
}
User.destroy({
id: req.param('id')
}).exec(function (err, usersDestroyed){
if (err) return res.negotiate(err);
if (usersDestroyed.length === 0) {
return res.notFound();
}
return res.ok();
});
},
removeProfile: function(req, res) {
if (!req.param('id')){
return res.badRequest('id is a required parameter.');
}
User.update({
id: req.param('id')
},{
deleted: true
}, function(err, removedUser){
if (err) return res.negotiate(err);
if (removedUser.length === 0) {
return res.notFound();
}
return res.ok();
});
},
restoreProfile: function(req, res) {
User.findOne({
email: req.param('email')
}, function foundUser(err, user) {
if (err) return res.negotiate(err);
if (!user) return res.notFound();
Passwords.checkPassword({
passwordAttempt: req.param('password'),
encryptedPassword: user.encryptedPassword
}).exec({
error: function(err) {
return res.negotiate(err);
},
incorrect: function() {
return res.notFound();
},
success: function() {
User.update({
id: user.id
}, {
deleted: false
}).exec(function(err, updatedUser) {
return res.json(updatedUser);
});
}
});
});
}
};
/**
* UserController
*
* @description :: Server-side logic for managing users
* @help :: See http://sailsjs.org/#!/documentation/concepts/Controllers
*/
var Emailaddresses = require('machinepack-emailaddresses');
var Passwords = require('machinepack-passwords');
var Gravatar = require('machinepack-gravatar');
module.exports = {
signup: function(req, res) {
// email is required
if (_.isUndefined(req.param('email'))) {
return res.badRequest('An email address is required!');
}
// password is required
if (_.isUndefined(req.param('password'))) {
return res.badRequest('A password is required!');
}
// password must be at least 6 characters
if (req.param('password').length < 6) {
return res.badRequest('Password must be at least 6 characters!');
}
// username is required
if (_.isUndefined(req.param('username'))) {
return res.badRequest('A username is required!');
}
// username must be at least 6 characters
if (req.param('username').length < 6) {
return res.badRequest('Username must be at least 6 characters!');
}
// Username must contain only numbers and letters.
if (!_.isString(req.param('username')) || req.param('username').match(/[^a-z0-9]/i)) {
return res.badRequest('Invalid username: must consist of numbers and letters only.');
}
// Determine whether or not the provided string is an email address.
Emailaddresses.validate({
string: req.param('email'),
}).exec({
// An unexpected error occurred.
error: function(err) {
return res.serverError(err);
},
// The provided string is not an email address.
invalid: function() {
return res.badRequest('Doesn\'t look like an email address to me!');
},
// OK.
success: function() {
// Encrypt the password
Passwords.encryptPassword({
password: req.param('password'),
}).exec({
error: function(err) {
return res.serverError(err);
},
success: function(result) {
try {
// Create Gravatar URL
var gravatarURL = Gravatar.getImageUrl({
emailAddress: req.param('email'),
}).execSync();
} catch(err) {
return res.serverError(err);
}
// Build up options
var options = {
email: req.param('email'),
username: req.param('username'),
encryptedPassword: result,
gravatarURL: gravatarURL
};
User.create(options).exec(function(err, createdUser) {
if (err) {
if (err.invalidAttributes && err.invalidAttributes.email && err.invalidAttributes.email[0] && err.invalidAttributes.email[0].rule === 'unique') {
return res.alreadyInUse(err);
}
if (err.invalidAttributes && err.invalidAttributes.username && err.invalidAttributes.username[0] && err.invalidAttributes.username[0].rule === 'unique') {
return res.alreadyInUse(err);
}
return res.negotiate(err);
}
return res.json(createdUser);
});
}
});
}
});
},
profile: function(req, res) {
User.findOne(req.param('id')).exec(function foundUser(err, user) {
if (err) return res.negotiate(err);
// Handle no user being found
if (!user) return res.notFound();
// Build up user options
var options = {
email: user.email,
username: user.username,
gravatarURL: user.gravatarURL,
deleted: user.deleted,
admin: user.admin,
banned: user.banned,
id: user.id
};
// Return the user
return res.json(options);
});
},
delete: function(req, res) {
if (!req.param('id')){
return res.badRequest('id is a required parameter.');
}
User.destroy({
id: req.param('id')
}).exec(function (err, usersDestroyed){
if (err) return res.negotiate(err);
if (usersDestroyed.length === 0) {
return res.notFound();
}
return res.ok();
});
},
removeProfile: function(req, res) {
if (!req.param('id')){
return res.badRequest('id is a required parameter.');
}
User.update({
id: req.param('id')
},{
deleted: true
}, function(err, removedUser){
if (err) return res.negotiate(err);
if (removedUser.length === 0) {
return res.notFound();
}
return res.ok();
});
},
restoreProfile: function(req, res) {
User.findOne({
email: req.param('email')
}, function foundUser(err, user) {
if (err) return res.negotiate(err);
if (!user) return res.notFound();
Passwords.checkPassword({
passwordAttempt: req.param('password'),
encryptedPassword: user.encryptedPassword
}).exec({
error: function(err) {
return res.negotiate(err);
},
incorrect: function() {
return res.notFound();
},
success: function() {
User.update({
id: user.id
}, {
deleted: false
}).exec(function(err, updatedUser) {
return res.json(updatedUser);
});
}
});
});
},
restoreGravatarURL: function(req, res) {
try {
var restoredGravatarURL = gravatarURL = Gravatar.getImageUrl({
emailAddress: req.param('email')
}).execSync();
return res.json(restoredGravatarURL);
} catch (err) {
return res.serverError(err);
}
}
};
/**
* UserController
*
* @description :: Server-side logic for managing users
* @help :: See http://sailsjs.org/#!/documentation/concepts/Controllers
*/
var Emailaddresses = require('machinepack-emailaddresses');
var Passwords = require('machinepack-passwords');
var Gravatar = require('machinepack-gravatar');
module.exports = {
signup: function(req, res) {
// email is required
if (_.isUndefined(req.param('email'))) {
return res.badRequest('An email address is required!');
}
// password is required
if (_.isUndefined(req.param('password'))) {
return res.badRequest('A password is required!');
}
// password must be at least 6 characters
if (req.param('password').length < 6) {
return res.badRequest('Password must be at least 6 characters!');
}
// username is required
if (_.isUndefined(req.param('username'))) {
return res.badRequest('A username is required!');
}
// username must be at least 6 characters
if (req.param('username').length < 6) {
return res.badRequest('Username must be at least 6 characters!');
}
// Username must contain only numbers and letters.
if (!_.isString(req.param('username')) || req.param('username').match(/[^a-z0-9]/i)) {
return res.badRequest('Invalid username: must consist of numbers and letters only.');
}
// Determine whether or not the provided string is an email address.
Emailaddresses.validate({
string: req.param('email'),
}).exec({
// An unexpected error occurred.
error: function(err) {
return res.serverError(err);
},
// The provided string is not an email address.
invalid: function() {
return res.badRequest('Doesn\'t look like an email address to me!');
},
// OK.
success: function() {
// Encrypt the password
Passwords.encryptPassword({
password: req.param('password'),
}).exec({
error: function(err) {
return res.serverError(err);
},
success: function(result) {
try {
// Create Gravatar URL
var gravatarURL = Gravatar.getImageUrl({
emailAddress: req.param('email'),
}).execSync();
} catch(err) {
return res.serverError(err);
}
// Build up options
var options = {
email: req.param('email'),
username: req.param('username'),
encryptedPassword: result,
gravatarURL: gravatarURL
};
User.create(options).exec(function(err, createdUser) {
if (err) {
if (err.invalidAttributes && err.invalidAttributes.email && err.invalidAttributes.email[0] && err.invalidAttributes.email[0].rule === 'unique') {
return res.alreadyInUse(err);
}
if (err.invalidAttributes && err.invalidAttributes.username && err.invalidAttributes.username[0] && err.invalidAttributes.username[0].rule === 'unique') {
return res.alreadyInUse(err);
}
return res.negotiate(err);
}
return res.json(createdUser);
});
}
});
}
});
},
profile: function(req, res) {
User.findOne(req.param('id')).exec(function foundUser(err, user) {
if (err) return res.negotiate(err);
// Handle no user being found
if (!user) return res.notFound();
// Build up user options
var options = {
email: user.email,
username: user.username,
gravatarURL: user.gravatarURL,
deleted: user.deleted,
admin: user.admin,
banned: user.banned,
id: user.id
};
// Return the user
return res.json(options);
});
},
delete: function(req, res) {
if (!req.param('id')){
return res.badRequest('id is a required parameter.');
}
User.destroy({
id: req.param('id')
}).exec(function (err, usersDestroyed){
if (err) return res.negotiate(err);
if (usersDestroyed.length === 0) {
return res.notFound();
}
return res.ok();
});
},
removeProfile: function(req, res) {
if (!req.param('id')){
return res.badRequest('id is a required parameter.');
}
User.update({
id: req.param('id')
},{
deleted: true
}, function(err, removedUser){
if (err) return res.negotiate(err);
if (removedUser.length === 0) {
return res.notFound();
}
return res.ok();
});
},
restoreProfile: function(req, res) {
User.findOne({
email: req.param('email')
}, function foundUser(err, user) {
if (err) return res.negotiate(err);
if (!user) return res.notFound();
Passwords.checkPassword({
passwordAttempt: req.param('password'),
encryptedPassword: user.encryptedPassword
}).exec({
error: function(err) {
return res.negotiate(err);
},
incorrect: function() {
return res.notFound();
},
success: function() {
User.update({
id: user.id
}, {
deleted: false
}).exec(function(err, updatedUser) {
return res.json(updatedUser);
});
}
});
});
},
restoreGravatarURL: function(req, res) {
try {
var restoredGravatarURL = gravatarURL = Gravatar.getImageUrl({
emailAddress: req.param('email')
}).execSync();
return res.json(restoredGravatarURL);
} catch (err) {
return res.serverError(err);
}
},
updateProfile: function(req, res) {
User.update({
id: req.param('id')
}, {
gravatarURL: req.param('gravatarURL')
}, function(err, updatedUser) {
if (err) return res.negotiate(err);
return res.json(updatedUser);
});
},
changePassword: function(req, res) {
if (_.isUndefined(req.param('password'))) {
return res.badRequest('A password is required!');
}
if (req.param('password').length < 6) {
return res.badRequest('Password must be at least 6 characters!');
}
Passwords.encryptPassword({
password: req.param('password'),
}).exec({
error: function(err) {
return res.serverError(err);
},
success: function(result) {
User.update({
id: req.param('id')
}, {
encryptedPassword: result
}).exec(function(err, updatedUser) {
if (err) {
return res.negotiate(err);
}
return res.json(updatedUser);
});
}
});
}
};
/**
* UserController
*
* @description :: Server-side logic for managing users
* @help :: See http://sailsjs.org/#!/documentation/concepts/Controllers
*/
var Emailaddresses = require('machinepack-emailaddresses');
var Passwords = require('machinepack-passwords');
var Gravatar = require('machinepack-gravatar');
module.exports = {
signup: function(req, res) {
// email is required
if (_.isUndefined(req.param('email'))) {
return res.badRequest('An email address is required!');
}
// password is required
if (_.isUndefined(req.param('password'))) {
return res.badRequest('A password is required!');
}
// password must be at least 6 characters
if (req.param('password').length < 6) {
return res.badRequest('Password must be at least 6 characters!');
}
// username is required
if (_.isUndefined(req.param('username'))) {
return res.badRequest('A username is required!');
}
// username must be at least 6 characters
if (req.param('username').length < 6) {
return res.badRequest('Username must be at least 6 characters!');
}
// Username must contain only numbers and letters.
if (!_.isString(req.param('username')) || req.param('username').match(/[^a-z0-9]/i)) {
return res.badRequest('Invalid username: must consist of numbers and letters only.');
}
// Determine whether or not the provided string is an email address.
Emailaddresses.validate({
string: req.param('email'),
}).exec({
// An unexpected error occurred.
error: function(err) {
return res.serverError(err);
},
// The provided string is not an email address.
invalid: function() {
return res.badRequest('Doesn\'t look like an email address to me!');
},
// OK.
success: function() {
// Encrypt the password
Passwords.encryptPassword({
password: req.param('password'),
}).exec({
error: function(err) {
return res.serverError(err);
},
success: function(result) {
try {
// Create Gravatar URL
var gravatarURL = Gravatar.getImageUrl({
emailAddress: req.param('email'),
}).execSync();
} catch(err) {
return res.serverError(err);
}
// Build up options
var options = {
email: req.param('email'),
username: req.param('username'),
encryptedPassword: result,
gravatarURL: gravatarURL
};
User.create(options).exec(function(err, createdUser) {
if (err) {
if (err.invalidAttributes && err.invalidAttributes.email && err.invalidAttributes.email[0] && err.invalidAttributes.email[0].rule === 'unique') {
return res.alreadyInUse(err);
}
if (err.invalidAttributes && err.invalidAttributes.username && err.invalidAttributes.username[0] && err.invalidAttributes.username[0].rule === 'unique') {
return res.alreadyInUse(err);
}
return res.negotiate(err);
}
return res.json(createdUser);
});
}
});
}
});
},
profile: function(req, res) {
User.findOne(req.param('id')).exec(function foundUser(err, user) {
if (err) return res.negotiate(err);
// Handle no user being found
if (!user) return res.notFound();
// Build up user options
var options = {
email: user.email,
username: user.username,
gravatarURL: user.gravatarURL,
deleted: user.deleted,
admin: user.admin,
banned: user.banned,
id: user.id
};
// Return the user
return res.json(options);
});
},
delete: function(req, res) {
if (!req.param('id')){
return res.badRequest('id is a required parameter.');
}
User.destroy({
id: req.param('id')
}).exec(function (err, usersDestroyed){
if (err) return res.negotiate(err);
if (usersDestroyed.length === 0) {
return res.notFound();
}
return res.ok();
});
},
removeProfile: function(req, res) {
if (!req.param('id')){
return res.badRequest('id is a required parameter.');
}
User.update({
id: req.param('id')
},{
deleted: true
}, function(err, removedUser){
if (err) return res.negotiate(err);
if (removedUser.length === 0) {
return res.notFound();
}
return res.ok();
});
},
restoreProfile: function(req, res) {
User.findOne({
email: req.param('email')
}, function foundUser(err, user) {
if (err) return res.negotiate(err);
if (!user) return res.notFound();
Passwords.checkPassword({
passwordAttempt: req.param('password'),
encryptedPassword: user.encryptedPassword
}).exec({
error: function(err) {
return res.negotiate(err);
},
incorrect: function() {
return res.notFound();
},
success: function() {
User.update({
id: user.id
}, {
deleted: false
}).exec(function(err, updatedUser) {
return res.json(updatedUser);
});
}
});
});
},
restoreGravatarURL: function(req, res) {
try {
var restoredGravatarURL = gravatarURL = Gravatar.getImageUrl({
emailAddress: req.param('email')
}).execSync();
return res.json(restoredGravatarURL);
} catch (err) {
return res.serverError(err);
}
},
updateProfile: function(req, res) {
User.update({
id: req.param('id')
}, {
gravatarURL: req.param('gravatarURL')
}, function(err, updatedUser) {
if (err) return res.negotiate(err);
return res.json(updatedUser);
});
},
changePassword: function(req, res) {
if (_.isUndefined(req.param('password'))) {
return res.badRequest('A password is required!');
}
if (req.param('password').length < 6) {
return res.badRequest('Password must be at least 6 characters!');
}
Passwords.encryptPassword({
password: req.param('password'),
}).exec({
error: function(err) {
return res.serverError(err);
},
success: function(result) {
User.update({
id: req.param('id')
}, {
encryptedPassword: result
}).exec(function(err, updatedUser) {
if (err) {
return res.negotiate(err);
}
return res.json(updatedUser);
});
}
});
},
adminUsers: function(req, res) {
User.find().exec(function(err, users){
if (err) return res.negotiate(err);
return res.json(users);
});
}
};
/**
* UserController
*
* @description :: Server-side logic for managing users
* @help :: See http://sailsjs.org/#!/documentation/concepts/Controllers
*/
var Emailaddresses = require('machinepack-emailaddresses');
var Passwords = require('machinepack-passwords');
var Gravatar = require('machinepack-gravatar');
module.exports = {
signup: function(req, res) {
// email is required
if (_.isUndefined(req.param('email'))) {
return res.badRequest('An email address is required!');
}
// password is required
if (_.isUndefined(req.param('password'))) {
return res.badRequest('A password is required!');
}
// password must be at least 6 characters
if (req.param('password').length < 6) {
return res.badRequest('Password must be at least 6 characters!');
}
// username is required
if (_.isUndefined(req.param('username'))) {
return res.badRequest('A username is required!');
}
// username must be at least 6 characters
if (req.param('username').length < 6) {
return res.badRequest('Username must be at least 6 characters!');
}
// Username must contain only numbers and letters.
if (!_.isString(req.param('username')) || req.param('username').match(/[^a-z0-9]/i)) {
return res.badRequest('Invalid username: must consist of numbers and letters only.');
}
// Determine whether or not the provided string is an email address.
Emailaddresses.validate({
string: req.param('email'),
}).exec({
// An unexpected error occurred.
error: function(err) {
return res.serverError(err);
},
// The provided string is not an email address.
invalid: function() {
return res.badRequest('Doesn\'t look like an email address to me!');
},
// OK.
success: function() {
// Encrypt the password
Passwords.encryptPassword({
password: req.param('password'),
}).exec({
error: function(err) {
return res.serverError(err);
},
success: function(result) {
try {
// Create Gravatar URL
var gravatarURL = Gravatar.getImageUrl({
emailAddress: req.param('email'),
}).execSync();
} catch(err) {
return res.serverError(err);
}
// Build up options
var options = {
email: req.param('email'),
username: req.param('username'),
encryptedPassword: result,
gravatarURL: gravatarURL
};
User.create(options).exec(function(err, createdUser) {
if (err) {
if (err.invalidAttributes && err.invalidAttributes.email && err.invalidAttributes.email[0] && err.invalidAttributes.email[0].rule === 'unique') {
return res.alreadyInUse(err);
}
if (err.invalidAttributes && err.invalidAttributes.username && err.invalidAttributes.username[0] && err.invalidAttributes.username[0].rule === 'unique') {
return res.alreadyInUse(err);
}
return res.negotiate(err);
}
return res.json(createdUser);
});
}
});
}
});
},
profile: function(req, res) {
User.findOne(req.param('id')).exec(function foundUser(err, user) {
if (err) return res.negotiate(err);
// Handle no user being found
if (!user) return res.notFound();
// Build up user options
var options = {
email: user.email,
username: user.username,
gravatarURL: user.gravatarURL,
deleted: user.deleted,
admin: user.admin,
banned: user.banned,
id: user.id
};
// Return the user
return res.json(options);
});
},
delete: function(req, res) {
if (!req.param('id')){
return res.badRequest('id is a required parameter.');
}
User.destroy({
id: req.param('id')
}).exec(function (err, usersDestroyed){
if (err) return res.negotiate(err);
if (usersDestroyed.length === 0) {
return res.notFound();
}
return res.ok();
});
},
removeProfile: function(req, res) {
if (!req.param('id')){
return res.badRequest('id is a required parameter.');
}
User.update({
id: req.param('id')
},{
deleted: true
}, function(err, removedUser){
if (err) return res.negotiate(err);
if (removedUser.length === 0) {
return res.notFound();
}
return res.ok();
});
},
restoreProfile: function(req, res) {
User.findOne({
email: req.param('email')
}, function foundUser(err, user) {
if (err) return res.negotiate(err);
if (!user) return res.notFound();
Passwords.checkPassword({
passwordAttempt: req.param('password'),
encryptedPassword: user.encryptedPassword
}).exec({
error: function(err) {
return res.negotiate(err);
},
incorrect: function() {
return res.notFound();
},
success: function() {
User.update({
id: user.id
}, {
deleted: false
}).exec(function(err, updatedUser) {
return res.json(updatedUser);
});
}
});
});
},
restoreGravatarURL: function(req, res) {
try {
var restoredGravatarURL = gravatarURL = Gravatar.getImageUrl({
emailAddress: req.param('email')
}).execSync();
return res.json(restoredGravatarURL);
} catch (err) {
return res.serverError(err);
}
},
updateProfile: function(req, res) {
User.update({
id: req.param('id')
}, {
gravatarURL: req.param('gravatarURL')
}, function(err, updatedUser) {
if (err) return res.negotiate(err);
return res.json(updatedUser);
});
},
changePassword: function(req, res) {
if (_.isUndefined(req.param('password'))) {
return res.badRequest('A password is required!');
}
if (req.param('password').length < 6) {
return res.badRequest('Password must be at least 6 characters!');
}
Passwords.encryptPassword({
password: req.param('password'),
}).exec({
error: function(err) {
return res.serverError(err);
},
success: function(result) {
User.update({
id: req.param('id')
}, {
encryptedPassword: result
}).exec(function(err, updatedUser) {
if (err) {
return res.negotiate(err);
}
return res.json(updatedUser);
});
}
});
},
adminUsers: function(req, res) {
User.find().exec(function(err, users){
if (err) return res.negotiate(err);
return res.json(users);
});
},
updateAdmin: function(req, res) {
User.update(req.param('id'), {
admin: req.param('admin')
}).exec(function(err, update){
if (err) return res.negotiate(err);
res.ok();
});
},
updateBanned: function(req, res) {
User.update(req.param('id'), {
banned: req.param('banned')
}).exec(function(err, update){
if (err) return res.negotiate(err);
res.ok();
});
},
updateDeleted: function(req, res) {
User.update(req.param('id'), {
deleted: req.param('deleted')
}).exec(function(err, update){
if (err) return res.negotiate(err);
res.ok();
});
}
};
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment