SecData.js
72 lines
| 2.0 KiB
| application/javascript
|
JavascriptLexer
|
|
r0 | define([ | |
| "dojo/_base/declare", "dojo/node!crypto"], function (declare, crypto) { | |||
| let SecData = declare(null, { | |||
| _state: null, | |||
| _token: null, | |||
| _authType: null, | |||
| constructor: function (authType) { | |||
| this._authType = authType; | |||
| }, | |||
| /** | |||
| * Проводит раунд аутентификации, изменяет текущее состояние. | |||
| * @param challenge {*} - данные для аутентификации, зависит от реализации, например, пароль. | |||
| * @retuns authResult {Object} - результат аутентификации { challenge : 'response data', code : AUTH_* }. | |||
| */ | |||
| doAuth: function (challenge) { | |||
| let password = challenge; | |||
| if (this.validateHash(password)) { | |||
| this._state = SecData.AUTH_SUCCESS; | |||
| } else { | |||
| this._state = SecData.AUTH_FAIL; | |||
| } | |||
| return { | |||
| code: this._state | |||
| }; | |||
| }, | |||
| getAuthState: function () { | |||
| return this._state; | |||
| }, | |||
| getAuthType: function () { | |||
| return this._authType; | |||
| }, | |||
| generateHash: function (password) { | |||
| return md5hex(password); | |||
| }, | |||
| parse: function (token) { | |||
| this._token = token; | |||
| }, | |||
| validateHash: function (password) { | |||
| return this.generateHash(password) == this._token; | |||
| } | |||
| }); | |||
| SecData.AUTH_SUCCESS = 0; | |||
| SecData.AUTH_INCOMPLETE = 1; | |||
| SecData.AUTH_FAIL = 2; | |||
| function md5hex() { | |||
| let md5 = crypto.createHash('md5'); | |||
| for (let i = 0; i < arguments.length; i++) | |||
| md5.update(String(arguments[i])); | |||
| return md5.digest('hex'); | |||
| } | |||
| let i = 0; | |||
| SecData.md5hex = md5hex; | |||
| SecData.newSSID = function () { | |||
| return md5hex(new Date().getTime(), Math.random(), i++); | |||
| }; | |||
| return SecData; | |||
| }); |
