Skip to content

Commit

Permalink
cancel the graphics library dependencies
Browse files Browse the repository at this point in the history
  • Loading branch information
welkinwong committed Jul 8, 2017
1 parent 033b6d0 commit 400956f
Show file tree
Hide file tree
Showing 8 changed files with 20 additions and 238 deletions.
49 changes: 7 additions & 42 deletions core/controllers/account.controller.js
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
var logger = require('../../lib/logger.lib');
var sha1 = require('../services/sha1.service');
var usersService = require('../services/users.service');
var captcha = require('../../lib/captcha.lib');
// var captcha = require('../../lib/captcha.lib');

/**
* 检查是否登陆
Expand All @@ -22,19 +22,6 @@ exports.check = function (req, res, next) {
}
};

/**
* 登陆验证码
* @param {Object} req
* @param {Object} res
*/
exports.captcha = function (req, res) {
var source = captcha();

req.session.captcha = source.code;

res.status(200).json(source.dataURL);
};

/**
* 登陆
* @param {Object} req
Expand All @@ -51,16 +38,6 @@ exports.signIn = function (req, res) {
},
isEmail: { errorMessage: 'email 格式不正确' }
},
'captcha': {
notEmpty: {
options: [true],
errorMessage: 'captcha 不能为空'
},
isLength: {
options: [4, 4],
errorMessage: '验证码长度需为 4 位'
}
},
'password': {
notEmpty: {
options: [true],
Expand All @@ -82,43 +59,31 @@ exports.signIn = function (req, res) {

var email = req.body.email;
var password = req.body.password;
var captcha = req.body.captcha;
var autoSignIn = req.body.autoSignIn;

if (req.validationErrors()) {
logger.system().error(__filename, '参数验证失败', req.validationErrors());
return res.status(400).end();
}

if (captcha !== req.session.captcha) {
res.status(401).json({
error: {
code: 'WRONG_CAPTCHA',
message: '验证码错误'
}
});
return false;
}

usersService.one({ email: email, selectPassword: true }, function (err, user) {
if (err) {
logger[err.type]().error(__filename, err);
return res.status(500).end();
}

if (user && sha1(password) === user.password) {
delete req.session.captcha;
req.session.user = user._id;
if (autoSignIn) req.session.cookie.maxAge = 60 * 1000 * 60 * 24 * 90;

res.status(204).end();
} else {
res.status(401).json({
error: {
code: 'WRONG_EMAIL_OR_PASSWORD',
message: '用户名或密码错误'
}
});
res.status(401).json({
error: {
code: 'WRONG_EMAIL_OR_PASSWORD',
message: '用户名或密码错误'
}
});
}
});
};
Expand Down
4 changes: 0 additions & 4 deletions core/router.js
Original file line number Diff line number Diff line change
Expand Up @@ -36,10 +36,6 @@ module.exports = {
get: 'account.current',
put: [109001, 'account.update'],

'/captcha': {
get: 'account.captcha'
},

'/sign-in': {
put: 'account.signIn'
},
Expand Down
84 changes: 8 additions & 76 deletions core/services/media.service.js
Original file line number Diff line number Diff line change
Expand Up @@ -11,8 +11,6 @@ var mediaModel = require('../models/media.model');
var contentsModel = require('../models/contents.model');
var featuresModel = require('../models/features.model');
var categoriesModel = require('../models/categories.model');
var Canvas = require('canvas');
var Image = Canvas.Image;

/**
* 查询媒体
Expand Down Expand Up @@ -215,82 +213,16 @@ exports.save = function (options, callback) {
callback(null, folder);
});
}],
// 移动文件或者压缩图片并移动文件
// 移动文件
moveFileOrCompressImage: ['formParse', 'saveModel', 'mkdirFolder', function (callback, results) {
var regex = /^image\/(jpeg|png)$/;
var isJpgAndPng = regex.test(results.saveModel.type);

if (isJpgAndPng) {
var aftName = _.get(results.saveModel.type.match(regex), '[1]');

async.waterfall([
function (callback) {
fs.readFile(path.join(__dirname, '../../' + results.formParse.path), function (err, file) {
if (!file) {
var err = {
type: 'system',
error: '没有找到' + path.join(__dirname, '../../' + results.formParse.path)
};
return callback(err);
}

callback(null, file);
});
},
function (file, callback) {
var image = new Image;
image.src = file;

var width = image.width;
var height = image.height;

var canvas = new Canvas(width, height);
var ctx = canvas.getContext('2d');
ctx.drawImage(image, 0, 0, width, height);

var out = fs.createWriteStream(path.join(__dirname, results.mkdirFolder + '/' + results.saveModel.fileName));

var stream;

switch (aftName) {
case 'jpg':
case 'jpeg':
stream = canvas.jpegStream();
break;
case 'png':
stream = canvas.pngStream();
}

stream.on('data', function (chunk) {
out.write(chunk);
});
stream.on('end', function () {
callback();
});
},
function (callback) {
fs.unlink(path.join(__dirname, '../../' + results.formParse.path), function (err) {
callback(err);
});
}
], function (err) {
if (err) {
err.type = 'system';
return callback(err);
}

callback();
});
} else {
fs.rename(path.join(__dirname, '../../' + results.formParse.path), path.join(__dirname, results.mkdirFolder + '/' + results.saveModel.fileName), function (err) {
if (err) {
err.type = 'system';
return callback(err);
}
fs.rename(path.join(__dirname, '../../' + results.formParse.path), path.join(__dirname, results.mkdirFolder + '/' + results.saveModel.fileName), function (err) {
if (err) {
err.type = 'system';
return callback(err);
}

callback(null);
});
}
callback(null);
});
}]
}, function (err, results) {
if (err) return callback(err);
Expand Down
70 changes: 0 additions & 70 deletions lib/captcha.lib.js

This file was deleted.

6 changes: 3 additions & 3 deletions public/assets/admin/main.js

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion public/assets/admin/views.js

Large diffs are not rendered by default.

29 changes: 1 addition & 28 deletions src/admin/controllers/sign-in.controller.js
Original file line number Diff line number Diff line change
Expand Up @@ -8,54 +8,27 @@ angular.module('controllers').controller('signIn', ['$scope', '$timeout', '$stat
$scope.transmitting = false;
$scope.email = '';
$scope.password = '';
$scope.captcha = '';
$scope.captchaData = '';
$scope.autoSignIn = false;
$scope.wrongEmailOrPassword = false;
$scope.wrongCaptcha = false;

function resetEmailAndPassword () {
$scope.wrongEmailOrPassword = false;
}

function resetCaptcha () {
$scope.wrongCaptcha = false;
}

$scope.$watch('email', resetEmailAndPassword);
$scope.$watch('password', resetEmailAndPassword);
$scope.$watch('captcha', resetCaptcha);

$scope.getCaptcha = function () {
$http.get('/api/account/captcha')
.then(function (res) {
$scope.captchaData = res.data;
});
}; $scope.getCaptcha();

$scope.signIn = function () {
$scope.transmitting = true;

$http.put('/api/account/sign-in', {
email: $scope.email,
password: $scope.password,
captcha: $scope.captcha.toLowerCase(),
autoSignIn: $scope.autoSignIn
}).then(function () {
$state.go('main');
}, function (res) {
$scope.getCaptcha();

var data = res.data;

switch (_.get(data, 'error.code')) {
case 'WRONG_EMAIL_OR_PASSWORD':
$scope.wrongEmailOrPassword = true;
break;
case 'WRONG_CAPTCHA':
$scope.wrongCaptcha = true;
}

$scope.wrongEmailOrPassword = true;
$scope.animateShake = true;
$timeout(function () {
$scope.animateShake = false;
Expand Down
14 changes: 0 additions & 14 deletions src/admin/views/sign-in.view.html
Original file line number Diff line number Diff line change
Expand Up @@ -21,20 +21,6 @@ <h3 class="panel-title">欢迎回来</h3>
<input ng-model="password" ng-minlength="6" ng-disabled="transmitting" class="form-control" id="password" type="password" name="password" placeholder="请输入密码" aria-describedby="inputIconPwd" required>
</div>
</div>
<div class="row">
<div class="col-md-8">
<div ng-class="{ 'has-error': (signInForm.captcha.$touched && signInForm.captcha.$invalid) || wrongCaptcha }" class="form-group clear-bottom-margin">
<label class="sr-only" for="captcha">验证码:</label>
<div class="input-group">
<span class="input-group-addon" id="inputIconCaptcha"><i class="fa fa-code fa-fw"></i></span>
<input ng-model="captcha" minlength="4" maxlength="4" ng-pattern="/^[A-z0-9]+$/" ng-disabled="transmitting" class="form-control" id="captcha" type="text" name="captcha" placeholder="请输入验证码" aria-describedby="inputIconCaptcha" required>
</div>
</div>
</div>
<div class="col-md-4">
<img ng-click="getCaptcha()" ng-src="{{captchaData}}" class="pointer">
</div>
</div>
<div class="checkbox">
<label>
<input ng-model="autoSignIn" ng-disabled="transmitting" type="checkbox"> 下次自动登陆
Expand Down

0 comments on commit 400956f

Please sign in to comment.