export async function onCheckUserName(req : express.Request, res : express.Response) { const log = slog.stepIn('SettingsApi', 'onCheckUserName'); try { do { const locale = req.ext.locale; const param : Request.CheckUserName = req.query; const condition : Request.CheckUserName = { userName: ['string', null, true] as any }; if (Utils.existsParameters(param, condition) === false) { res.ext.badRequest(locale); break; } const {userName} = param; // 検証 const session : Session = req.ext.session; const alreadyExistsAccount = await AccountAgent.findByUserName(userName); const result = Validator.userName(userName, session.account_id, alreadyExistsAccount, locale); let response : Response.CheckUserName; if (result.status !== Response.Status.OK) { response = { status: result.status, message: {userName:result.message} }; res.json(response); break; } const message = (userName ? R.text(R.CAN_USE_USER_NAME, locale) : ''); response = { status: Response.Status.OK, message: {userName:message} }; res.json(response); } while (false); log.stepOut(); } catch (err) {Utils.internalServerError(err, res, log);} }
test.serial('ユーザー名検証 - 英数の時は成功すること', (t) => { const log = slog.stepIn('test', t['_test'].title); const userName = '******'; const accountId = 0; const account = null; const result = Validator.userName(userName, accountId, account, locale); const {status} = result; log.d(JSON.stringify(result, null, 2)); t.is(status, Response.Status.OK); log.stepOut(); });
test.serial('ユーザー名検証 - 英数以外の時は失敗すること', (t) => { const log = slog.stepIn('test', t['_test'].title); const userName = '******'; const accountId = 0; const account = null; const result = Validator.userName(userName, accountId, account, locale); const {status} = result; log.d(JSON.stringify(result, null, 2)); t.is(status, Response.Status.FAILED); log.stepOut(); });
test.serial('ユーザー名検証 - 同名のユーザーがいない場合は成功すること', (t) => { const log = slog.stepIn('test', t['_test'].title); const userName = '******'; const accountId = 123; const alreadyExistsAccount : Account = {id:123}; const result = Validator.userName(userName, accountId, alreadyExistsAccount, locale); const {status} = result; log.d(JSON.stringify(result, null, 2)); t.is(status, Response.Status.OK); log.stepOut(); });
export async function isSetAccountValid(param : Request.SetAccount, myAccountId : number, locale : string) : Promise<ValidationResult> { const log = slog.stepIn('SettingsApi', 'isSetAccountValid'); const response : Response.SetAccount = {status:Response.Status.OK, message:{}}; const {name, userName, countryCode, phoneNo, twoFactorAuth} = param; do { // アカウント名チェック const accountNameResult = Validator.accountName(name, locale); if (accountNameResult.status !== Response.Status.OK) { response.status = accountNameResult.status; response.message.name = accountNameResult.message; } // ユーザー名チェック const alreadyExistsAccount = await AccountAgent.findByUserName(userName); const userNameResult = Validator.userName(userName, myAccountId, alreadyExistsAccount, locale); if (userNameResult.status !== Response.Status.OK) { response.status = userNameResult.status; response.message.userName = userNameResult.message; } // 国コードチェック if (countryCode) { const countries : any[] = lookup.countries({countryCallingCodes:countryCode}); if (countries.length === 0) { response.status = Response.Status.FAILED; response.message.countryCode = R.text(R.INVALID_COUNTRY_CODE, locale); } } // 二段階認証方式チェック if (twoFactorAuth === 'SMS' || twoFactorAuth === 'Authy') { if (countryCode === null || phoneNo === null) { response.status = Response.Status.FAILED; response.message.phoneNo = R.text(R.REQUIRE_COUNTRY_CODE_AND_PHONE_NO, locale); } } else if (twoFactorAuth !== null) { response.status = Response.Status.BAD_REQUEST; response.message.general = R.text(R.BAD_REQUEST, locale); } } while (false); if (response.status !== Response.Status.OK) { log.w(JSON.stringify(response, null, 2)); } log.stepOut(); return {response}; }