add javascript standard check
This commit is contained in:
+176
-177
@@ -1,194 +1,193 @@
|
||||
const Router = require('koa-router');
|
||||
const router = new Router();
|
||||
/* eslint-disable no-throw-literal */
|
||||
/* eslint-env es6 */
|
||||
/* eslint-disable no-multi-str */
|
||||
const Router = require('koa-router')
|
||||
const router = new Router()
|
||||
|
||||
// import tools
|
||||
const crypto = require('../../libs/crypto.js');
|
||||
const so = require('../../libs/storeObject');
|
||||
const mongo = require('../../libs/mongo_model.js');
|
||||
const mem = require('../../libs/memcache_lib');
|
||||
const msgMng = require('./msgManager');
|
||||
const sendmail = require('../../libs/sendmail');
|
||||
// import tools
|
||||
const crypto = require('../../libs/crypto.js')
|
||||
// const so = require('../../libs/storeObject')
|
||||
const mongo = require('../../libs/mongo_model.js')
|
||||
const mem = require('../../libs/memcache_lib')
|
||||
const msgMng = require('./msgManager')
|
||||
const sendmail = require('../../libs/sendmail')
|
||||
|
||||
router
|
||||
.post('/user', async(c, n) => {
|
||||
let arr = c.request.body;
|
||||
if (!arr.data) throw 'CE0000';
|
||||
if (!arr.data.account) throw 'CE0001';
|
||||
if (!arr.data.password) throw 'CE00002';
|
||||
if (!arr.data.name) throw 'CE0004';
|
||||
if (!arr.data.email) throw 'CE0005';
|
||||
let arr = c.request.body
|
||||
if (!arr.data) throw 'CE0000'
|
||||
if (!arr.data.account) throw 'CE0001'
|
||||
if (!arr.data.password) throw 'CE00002'
|
||||
if (!arr.data.name) throw 'CE0004'
|
||||
if (!arr.data.email) throw 'CE0005'
|
||||
|
||||
try {
|
||||
let query = "select count(*) as c from ??.?? where `account` = ?";
|
||||
let param = ['lora', 'user', arr.data.account];
|
||||
let count = await c.syncQuery(query, param);
|
||||
if (count.length == 0) throw 'SE0000';
|
||||
if (count[0].c > 0) throw 'CE0006';
|
||||
} catch (err) {
|
||||
if (typeof err == 'string') throw err;
|
||||
c.serr = err;
|
||||
throw 'SE0000';
|
||||
}
|
||||
try {
|
||||
let query = 'select count(*) as c from ??.?? where `account` = ?'
|
||||
let param = ['lora', 'user', arr.data.account]
|
||||
let count = await c.syncQuery(query, param)
|
||||
if (count.length === 0) throw 'SE0000'
|
||||
if (count[0].c > 0) throw 'CE0006'
|
||||
} catch (err) {
|
||||
if (typeof err === 'string') throw err
|
||||
c.serr = err
|
||||
throw 'SE0000'
|
||||
}
|
||||
|
||||
let uid = 0;
|
||||
try {
|
||||
let query = "insert into ??.?? (`account`, `password`, `name`, `email`) values (?, ?, ?, ?)";
|
||||
let param = ['lora', 'user', arr.data.account, arr.data.password, arr.data.name, arr.data.email];
|
||||
let indata = await c.syncQuery(query, param);
|
||||
uid = indata.insertId;
|
||||
} catch (err) {
|
||||
if (typeof err == 'string') throw err;
|
||||
c.serr = err;
|
||||
throw 'SE0001';
|
||||
}
|
||||
let uid = 0
|
||||
try {
|
||||
let query = 'insert into ??.?? (`account`, `password`, `name`, `email`) values (?, ?, ?, ?)'
|
||||
let param = ['lora', 'user', arr.data.account, arr.data.password, arr.data.name, arr.data.email]
|
||||
let indata = await c.syncQuery(query, param)
|
||||
uid = indata.insertId
|
||||
} catch (err) {
|
||||
if (typeof err === 'string') throw err
|
||||
c.serr = err
|
||||
throw 'SE0001'
|
||||
}
|
||||
|
||||
c.body = {
|
||||
record: [{ uid }]
|
||||
}
|
||||
c.body = {
|
||||
record: [{ uid }]
|
||||
}
|
||||
})
|
||||
.get('/user/:uid', async(c, n) => {
|
||||
if (!await mongo.token.checkToken(c.token)) throw 'CE1000';
|
||||
try {
|
||||
let t = await mongo.token.getToken(c.token);
|
||||
if (t.object.uid != c.params.uid) throw 'CE2000';
|
||||
} catch (err) {
|
||||
if (typeof err == 'string') throw err;
|
||||
c.serr = err;
|
||||
throw 'SE0000';
|
||||
}
|
||||
if (!await mongo.Token.checkToken(c.token)) throw 'CE1000'
|
||||
try {
|
||||
let t = await mongo.Token.getToken(c.token)
|
||||
if (t.object.uid !== c.params.uid) throw 'CE2000'
|
||||
} catch (err) {
|
||||
if (typeof err === 'string') throw err
|
||||
c.serr = err
|
||||
throw 'SE0000'
|
||||
}
|
||||
|
||||
try {
|
||||
let user = await c.syncQuery('select `uid`,`account`,`name`,`email` from ??.?? where `uid` = ?', ['lora', 'user', c.params.uid]);
|
||||
|
||||
c.body = {
|
||||
record: user
|
||||
}
|
||||
} catch (err) {
|
||||
if (typeof err == 'string') throw err;
|
||||
c.serr = err;
|
||||
throw 'SE0000';
|
||||
}
|
||||
})
|
||||
.put('/user/:uid', async(c, n) => {
|
||||
if (!await mongo.token.checkToken(c.token)) throw 'CE1000';
|
||||
let arr = c.request.body;
|
||||
if (!arr.data) throw 'CE0000';
|
||||
if (!arr.data.name) throw 'CE0004';
|
||||
if (!arr.data.email) throw 'CE0005';
|
||||
try {
|
||||
let t = await mongo.token.getToken(c.token);
|
||||
if (t.object.uid != c.params.uid) throw 'CE2000';
|
||||
} catch (err) {
|
||||
if (typeof err == 'string') throw err;
|
||||
c.serr = err;
|
||||
throw 'SE0000';
|
||||
}
|
||||
|
||||
try {
|
||||
let query = "update ??.?? set \
|
||||
`name` = ?, \
|
||||
`email` = ?" + (arr.data.password ? ',' : '') + " \
|
||||
" + (arr.data.password ? "`password` = ?, " : '') + " \
|
||||
where \
|
||||
`uid` = ?";
|
||||
let param = ['lora', 'user', arr.data.name, arr.data.email];
|
||||
if (arr.data.password) param.push(crypto.genPassHash(arr.data.password));
|
||||
param.push(c.params.uid);
|
||||
|
||||
let updata = await c.syncQuery(query, param);
|
||||
} catch (err) {
|
||||
if (typeof err == 'string') throw err;
|
||||
c.serr = err;
|
||||
throw 'SE0002';
|
||||
}
|
||||
|
||||
c.body = { record: [] };
|
||||
})
|
||||
.post('/login', async(c, n) => {
|
||||
let arr = c.request.body;
|
||||
if (!arr.data) throw 'CE0000';
|
||||
if (!arr.data.account) throw 'CE0001';
|
||||
if (!arr.data.password) throw 'CE0002';
|
||||
try {
|
||||
let user = await c.syncQuery('select `uid`,`account`,`password`,`name`,`email` from ??.?? where `account` = ?', ['lora', 'user', arr.data.account])
|
||||
|
||||
if (user.length == 0) throw 'CE0003';
|
||||
|
||||
if (!crypto.comparePass(arr.data.password, user[0].password)) throw 'CE0003';
|
||||
|
||||
delete user[0].password;
|
||||
|
||||
c.body = {
|
||||
record: user
|
||||
}
|
||||
} catch (err) {
|
||||
if (typeof err == 'string') throw err;
|
||||
c.serr = err;
|
||||
throw 'SE0000';
|
||||
}
|
||||
|
||||
let u = c.body.record[0];
|
||||
let token = new mongo.token({ object: u, expire: Date.now() + 86400000 });
|
||||
token.save();
|
||||
c.body.rt = {
|
||||
token: {
|
||||
id: token._id
|
||||
}
|
||||
}
|
||||
})
|
||||
.post('/user/forgotpass', async(c, n) => {
|
||||
let arr = c.request.body;
|
||||
if (!arr.data) throw 'CE0000';
|
||||
if (!arr.data.account) throw 'CE0001';
|
||||
if (!arr.data.email) throw 'CE0005';
|
||||
|
||||
let user = [];
|
||||
try {
|
||||
let query = "select * from ??.?? where `account` = ? and `email` = ?";
|
||||
let param = ['lora', 'user', arr.data.account, arr.data.email];
|
||||
user = await c.syncQuery(query, param);
|
||||
} catch (err) {
|
||||
if (typeof err == 'string') throw err;
|
||||
c.serr = err;
|
||||
throw 'SE0001';
|
||||
}
|
||||
if (user.length == 0) throw 'CE0007';
|
||||
|
||||
let randomToken = crypto.random(10);
|
||||
try {
|
||||
await mem.setVal(randomToken, JSON.stringify(user[0]), 7200);
|
||||
} catch (err) {
|
||||
c.serr = err;
|
||||
throw 'SE0005';
|
||||
}
|
||||
|
||||
try {
|
||||
await sendmail(user[0].email, msgMng.getMailTemplate('forgotpass', c.headers['accept-language']), [randomToken])
|
||||
} catch (err) {
|
||||
if (typeof err == 'string') throw err;
|
||||
c.serr = err;
|
||||
throw 'SE0006';
|
||||
}
|
||||
try {
|
||||
let user = await c.syncQuery('select `uid`,`account`,`name`,`email` from ??.?? where `uid` = ?', ['lora', 'user', c.params.uid])
|
||||
|
||||
c.body = {
|
||||
record: []
|
||||
record: user
|
||||
}
|
||||
} catch (err) {
|
||||
if (typeof err === 'string') throw err
|
||||
c.serr = err
|
||||
throw 'SE0000'
|
||||
}
|
||||
})
|
||||
.put('/user/:uid', async(c, n) => {
|
||||
if (!await mongo.Token.checkToken(c.token)) throw 'CE1000'
|
||||
let arr = c.request.body
|
||||
if (!arr.data) throw 'CE0000'
|
||||
if (!arr.data.name) throw 'CE0004'
|
||||
if (!arr.data.email) throw 'CE0005'
|
||||
try {
|
||||
let t = await mongo.Token.getToken(c.token)
|
||||
if (t.object.uid !== c.params.uid) throw 'CE2000'
|
||||
} catch (err) {
|
||||
if (typeof err === 'string') throw err
|
||||
c.serr = err
|
||||
throw 'SE0000'
|
||||
}
|
||||
|
||||
try {
|
||||
let query = 'update ??.?? set \
|
||||
`name` = ?, \
|
||||
`email` = ?' + (arr.data.password ? ',' : '') + ' \
|
||||
' + (arr.data.password ? '`password` = ?, ' : '') + ' \
|
||||
where \
|
||||
`uid` = ?'
|
||||
let param = ['lora', 'user', arr.data.name, arr.data.email]
|
||||
if (arr.data.password) param.push(crypto.genPassHash(arr.data.password))
|
||||
param.push(c.params.uid)
|
||||
|
||||
await c.syncQuery(query, param)
|
||||
} catch (err) {
|
||||
if (typeof err === 'string') throw err
|
||||
c.serr = err
|
||||
throw 'SE0002'
|
||||
}
|
||||
|
||||
c.body = { record: [] }
|
||||
})
|
||||
.post('/login', async(c, n) => {
|
||||
let arr = c.request.body
|
||||
if (!arr.data) throw 'CE0000'
|
||||
if (!arr.data.account) throw 'CE0001'
|
||||
if (!arr.data.password) throw 'CE0002'
|
||||
try {
|
||||
let user = await c.syncQuery('select `uid`,`account`,`password`,`name`,`email` from ??.?? where `account` = ?', ['lora', 'user', arr.data.account])
|
||||
|
||||
if (user.length === 0) throw 'CE0003'
|
||||
|
||||
if (!crypto.comparePass(arr.data.password, user[0].password)) throw 'CE0003'
|
||||
|
||||
delete user[0].password
|
||||
|
||||
c.body = {
|
||||
record: user
|
||||
}
|
||||
} catch (err) {
|
||||
if (typeof err === 'string') throw err
|
||||
c.serr = err
|
||||
throw 'SE0000'
|
||||
}
|
||||
|
||||
let u = c.body.record[0]
|
||||
let token = new mongo.Token({ object: u, expire: Date.now() + 86400000 })
|
||||
token.save()
|
||||
c.body.rt = {
|
||||
token: {
|
||||
id: token._id
|
||||
}
|
||||
}
|
||||
})
|
||||
.post('/user/forgotpass', async(c, n) => {
|
||||
let arr = c.request.body
|
||||
if (!arr.data) throw 'CE0000'
|
||||
if (!arr.data.account) throw 'CE0001'
|
||||
if (!arr.data.email) throw 'CE0005'
|
||||
|
||||
let user = []
|
||||
try {
|
||||
let query = 'select * from ??.?? where `account` = ? and `email` = ?'
|
||||
let param = ['lora', 'user', arr.data.account, arr.data.email]
|
||||
user = await c.syncQuery(query, param)
|
||||
} catch (err) {
|
||||
if (typeof err === 'string') throw err
|
||||
c.serr = err
|
||||
throw 'SE0001'
|
||||
}
|
||||
if (user.length === 0) throw 'CE0007'
|
||||
|
||||
let randomToken = crypto.random(10)
|
||||
try {
|
||||
await mem.setVal(randomToken, JSON.stringify(user[0]), 7200)
|
||||
} catch (err) {
|
||||
c.serr = err
|
||||
throw 'SE0005'
|
||||
}
|
||||
|
||||
try {
|
||||
await sendmail(user[0].email, msgMng.getMailTemplate('forgotpass', c.headers['accept-language']), [randomToken])
|
||||
} catch (err) {
|
||||
if (typeof err === 'string') throw err
|
||||
c.serr = err
|
||||
throw 'SE0006'
|
||||
}
|
||||
|
||||
c.body = {
|
||||
record: []
|
||||
}
|
||||
})
|
||||
.post('/user/resetpass', async(c, n) => {
|
||||
let arr = c.request.body;
|
||||
if (!arr.data) throw 'CE0000';
|
||||
if (!arr.data.account) throw 'CE0001';
|
||||
if (arr.data.resettype != 'pass' && arr.data.resettype != 'token') throw 'CE0008';
|
||||
if (arr.data.resettype == 'pass') {
|
||||
if (!arr.data.password) throw 'CE0002';
|
||||
} else {
|
||||
if (!arr.data.token) throw 'CE0009';
|
||||
}
|
||||
if (!arr.data.newpass) throw 'CE0002';
|
||||
|
||||
|
||||
let arr = c.request.body
|
||||
if (!arr.data) throw 'CE0000'
|
||||
if (!arr.data.account) throw 'CE0001'
|
||||
if (arr.data.resettype !== 'pass' && arr.data.resettype !== 'token') throw 'CE0008'
|
||||
if (arr.data.resettype === 'pass') {
|
||||
if (!arr.data.password) throw 'CE0002'
|
||||
} else {
|
||||
if (!arr.data.token) throw 'CE0009'
|
||||
}
|
||||
if (!arr.data.newpass) throw 'CE0002'
|
||||
})
|
||||
|
||||
|
||||
|
||||
module.exports = router;
|
||||
module.exports = router
|
||||
|
||||
@@ -1,73 +1,72 @@
|
||||
const Router = require('koa-router');
|
||||
const router = new Router();
|
||||
const koaBody = require('koa-body');
|
||||
const Router = require('koa-router')
|
||||
const router = new Router()
|
||||
const koaBody = require('koa-body')
|
||||
|
||||
// import tools
|
||||
const mysql = require('../../libs/mysql_pool.js');
|
||||
const so = require('../../libs/storeObject');
|
||||
const config = require('../../config.json');
|
||||
const msgMng = require('./msgManager');
|
||||
// import tools
|
||||
const mysql = require('../../libs/mysql_pool.js')
|
||||
// const so = require('../../libs/storeObject')
|
||||
// const config = require('../../config.json')
|
||||
const msgMng = require('./msgManager')
|
||||
|
||||
// routes
|
||||
const account_api = require('./account.js');
|
||||
// routes
|
||||
const accountApi = require('./account.js')
|
||||
|
||||
// api response handler
|
||||
router.use(async(c, n) => {
|
||||
// get MySQL connection
|
||||
c.db = await mysql.getConn();
|
||||
c.db = await mysql.getConn()
|
||||
// set Async/Await Query
|
||||
c.syncQuery = (query, param = null) => {
|
||||
return new Promise((resolve, reject) => {
|
||||
if (param != null) {
|
||||
c.db.query(query, param, (err, row) => {
|
||||
if (err) return reject(err);
|
||||
return resolve(row)
|
||||
});
|
||||
} else {
|
||||
c.db.query(query, (err, row) => {
|
||||
if (err) return reject(err);
|
||||
return resolve(row)
|
||||
});
|
||||
}
|
||||
c.syncQuery = (query, param = null) => {
|
||||
return new Promise((resolve, reject) => {
|
||||
if (param != null) {
|
||||
c.db.query(query, param, (err, row) => {
|
||||
if (err) return reject(err)
|
||||
return resolve(row)
|
||||
})
|
||||
}
|
||||
c.token = c.headers['x-auth-token'] || '';
|
||||
} else {
|
||||
c.db.query(query, (err, row) => {
|
||||
if (err) return reject(err)
|
||||
return resolve(row)
|
||||
})
|
||||
}
|
||||
})
|
||||
}
|
||||
c.token = c.headers['x-auth-token'] || ''
|
||||
|
||||
// console.log(c.headers['accept-language'])
|
||||
try {
|
||||
await n();
|
||||
c.body = {
|
||||
data: c.body,
|
||||
status: 1
|
||||
}
|
||||
} catch (e) {
|
||||
let msg = msgMng.getMsg(e, c.headers['accept-language']);
|
||||
c.body = {
|
||||
errorCode: e,
|
||||
message: msg,
|
||||
servErr: c.serr ? c.serr.toString() : '',
|
||||
status: 0
|
||||
}
|
||||
if (e[0] == 'C' || e[0] == 'c') c.status = 400;
|
||||
if (e[0] == 'S' || e[0] == 's') c.status = 500;
|
||||
try {
|
||||
await n()
|
||||
c.body = {
|
||||
data: c.body,
|
||||
status: 1
|
||||
}
|
||||
if ('db' in c && typeof c.db == 'object' && 'release' in c.db && typeof c.db.release == 'function') c.db.release();
|
||||
} catch (e) {
|
||||
let msg = msgMng.getMsg(e, c.headers['accept-language'])
|
||||
c.body = {
|
||||
errorCode: e,
|
||||
message: msg,
|
||||
servErr: c.serr ? c.serr.toString() : '',
|
||||
status: 0
|
||||
}
|
||||
if (e[0] === 'C' || e[0] === 'c') c.status = 400
|
||||
if (e[0] === 'S' || e[0] === 's') c.status = 500
|
||||
}
|
||||
if ('db' in c && typeof c.db === 'object' && 'release' in c.db && typeof c.db.release === 'function') c.db.release()
|
||||
})
|
||||
|
||||
|
||||
// enable bodyParser
|
||||
router.all('*', koaBody({
|
||||
multipart: true,
|
||||
multipart: true,
|
||||
// upload file size 10mb
|
||||
maxFieldSize: 10 * 1024 * 1024
|
||||
}), async(c, n) => { await n(); })
|
||||
maxFieldSize: 10 * 1024 * 1024
|
||||
}), async(c, n) => { await n() })
|
||||
|
||||
router
|
||||
.get('/', async(c, n) => {
|
||||
c.body = {
|
||||
msg: 'API Endpoint'
|
||||
};
|
||||
c.body = {
|
||||
msg: 'API Endpoint'
|
||||
}
|
||||
})
|
||||
.use('/account', account_api.routes())
|
||||
.use('/account', accountApi.routes())
|
||||
|
||||
module.exports = router;
|
||||
module.exports = router
|
||||
|
||||
@@ -1,46 +1,46 @@
|
||||
const fs = require('fs');
|
||||
const path = require('path');
|
||||
// const fs = require('fs')
|
||||
// const path = require('path')
|
||||
|
||||
class msgManager {
|
||||
constructor() {
|
||||
this.errs = {};
|
||||
this.defLang = 'zh';
|
||||
let err = require(`./language/zh`);
|
||||
this.errs['zh'] = err;
|
||||
class MsgManager {
|
||||
constructor () {
|
||||
this.errs = {}
|
||||
this.defLang = 'zh'
|
||||
let err = require(`./language/zh`)
|
||||
this.errs['zh'] = err
|
||||
}
|
||||
|
||||
checkLang (lang = '') {
|
||||
let lng = this.defLang
|
||||
if (typeof lang === 'string' && lang.trim().length > 0) {
|
||||
let l = lang.split(',')
|
||||
if (l.length > 0) {
|
||||
let tmp = l[0].substring(0, 2)
|
||||
if (tmp.trim().length > 0) lng = tmp
|
||||
}
|
||||
}
|
||||
|
||||
checkLang(lang = '') {
|
||||
let lng = this.defLang;
|
||||
if (typeof lang == 'string' && lang.trim().length > 0) {
|
||||
let l = lang.split(',');
|
||||
if (l.length > 0) {
|
||||
let tmp = l[0].substring(0, 2);
|
||||
if (tmp.trim().length > 0) lng = tmp;
|
||||
}
|
||||
}
|
||||
|
||||
if (!(lng in this.errs)) {
|
||||
try {
|
||||
let errs = require(`./language/${lng}`);
|
||||
this.errs[lng] = errs;
|
||||
} catch (err) {
|
||||
lng = this.defLang;
|
||||
}
|
||||
}
|
||||
return lng;
|
||||
if (!(lng in this.errs)) {
|
||||
try {
|
||||
let errs = require(`./language/${lng}`)
|
||||
this.errs[lng] = errs
|
||||
} catch (err) {
|
||||
lng = this.defLang
|
||||
}
|
||||
}
|
||||
return lng
|
||||
}
|
||||
|
||||
getMsg(code, lang = '') {
|
||||
let lng = this.checkLang(lang);
|
||||
getMsg (code, lang = '') {
|
||||
let lng = this.checkLang(lang)
|
||||
|
||||
return this.errs[lng][code] || 'errorCode not found';
|
||||
}
|
||||
return this.errs[lng][code] || 'errorCode not found'
|
||||
}
|
||||
|
||||
getMailTemplate(type, lang = '') {
|
||||
let lng = this.checkLang(lang);
|
||||
getMailTemplate (type, lang = '') {
|
||||
let lng = this.checkLang(lang)
|
||||
|
||||
return this.errs[lng]['mail'][type] || {};
|
||||
}
|
||||
return this.errs[lng]['mail'][type] || {}
|
||||
}
|
||||
}
|
||||
|
||||
module.exports = new msgManager();
|
||||
module.exports = new MsgManager()
|
||||
|
||||
@@ -1,33 +1,33 @@
|
||||
module.exports = {
|
||||
// client error
|
||||
CE0000: '請輸入參數',
|
||||
CE0001: '請輸入帳號',
|
||||
CE0002: '請輸入密碼',
|
||||
CE0003: '使用者帳號或密碼錯誤',
|
||||
CE0004: '請輸入使用者名稱',
|
||||
CE0005: '請輸入Email',
|
||||
CE0006: '使用者帳號重複',
|
||||
CE0007: '查無使用者資料',
|
||||
CE0008: '重設密碼類型輸入錯誤',
|
||||
CE0009: '請輸入重設密碼Token',
|
||||
CE0000: '請輸入參數',
|
||||
CE0001: '請輸入帳號',
|
||||
CE0002: '請輸入密碼',
|
||||
CE0003: '使用者帳號或密碼錯誤',
|
||||
CE0004: '請輸入使用者名稱',
|
||||
CE0005: '請輸入Email',
|
||||
CE0006: '使用者帳號重複',
|
||||
CE0007: '查無使用者資料',
|
||||
CE0008: '重設密碼類型輸入錯誤',
|
||||
CE0009: '請輸入重設密碼Token',
|
||||
|
||||
CE1000: 'Token驗證失敗',
|
||||
CE2000: '使用者權限不足',
|
||||
CE1000: 'Token驗證失敗',
|
||||
CE2000: '使用者權限不足',
|
||||
|
||||
// server error
|
||||
SE0000: '資料查詢失敗',
|
||||
SE0001: '資料新增失敗',
|
||||
SE0002: '資料更新失敗',
|
||||
SE0003: '資料刪除失敗',
|
||||
SE0005: '快取資料設定失敗',
|
||||
SE0006: 'Email發送失敗',
|
||||
SE0000: '資料查詢失敗',
|
||||
SE0001: '資料新增失敗',
|
||||
SE0002: '資料更新失敗',
|
||||
SE0003: '資料刪除失敗',
|
||||
SE0005: '快取資料設定失敗',
|
||||
SE0006: 'Email發送失敗',
|
||||
|
||||
// email template
|
||||
mail: {
|
||||
forgotpass: {
|
||||
title: '忘記密碼信件',
|
||||
text: '以下是重置密碼專用Token,有效時間為2小時\n如果沒有申請此操作請忽略此信件\n重置Token: %s',
|
||||
html: '以下是重置密碼專用Token,有效時間為2小時<br />如果沒有申請此操作請忽略此信件<br />重置Token: %s'
|
||||
}
|
||||
mail: {
|
||||
forgotpass: {
|
||||
title: '忘記密碼信件',
|
||||
text: '以下是重置密碼專用Token,有效時間為2小時\n如果沒有申請此操作請忽略此信件\n重置Token: %s',
|
||||
html: '以下是重置密碼專用Token,有效時間為2小時<br />如果沒有申請此操作請忽略此信件<br />重置Token: %s'
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user