Skip to content
Snippets Groups Projects
Unverified Commit d14a9532 authored by Chocobozzz's avatar Chocobozzz
Browse files

Handle account name in client url

More consistent with AP urls
parent b528582d
No related branches found
No related tags found
No related merge requests found
......@@ -16,7 +16,7 @@ export class AccountsComponent implements OnInit {
) {}
ngOnInit () {
const accountId = parseInt(this.route.snapshot.params['accountId'], 10)
const accountId = this.route.snapshot.params['accountId']
this.accountService.getAccount(accountId)
.subscribe(account => this.account = account)
......
......@@ -18,7 +18,7 @@ export class AccountService {
private restExtractor: RestExtractor
) {}
getAccount (id: number): Observable<Account> {
getAccount (id: number | string): Observable<Account> {
return this.authHttp.get<ServerAccount>(AccountService.BASE_ACCOUNT_URL + id)
.pipe(
map(accountHash => new Account(accountHash)),
......
......@@ -4,16 +4,21 @@ import 'express-validator'
import * as validator from 'validator'
import { AccountModel } from '../../models/account/account'
import { isUserDescriptionValid, isUserUsernameValid } from './users'
import { exists } from './misc'
function isAccountNameValid (value: string) {
return isUserUsernameValid(value)
}
function isAccountIdValid (value: string) {
return exists(value)
}
function isAccountDescriptionValid (value: string) {
return isUserDescriptionValid(value)
}
function isAccountIdExist (id: number | string, res: Response) {
function isAccountIdExist (id: number | string, res: Response, sendNotFound = true) {
let promise: Bluebird<AccountModel>
if (validator.isInt('' + id)) {
......@@ -22,32 +27,34 @@ function isAccountIdExist (id: number | string, res: Response) {
promise = AccountModel.loadByUUID('' + id)
}
return isAccountExist(promise, res)
return isAccountExist(promise, res, sendNotFound)
}
function isLocalAccountNameExist (name: string, res: Response) {
function isLocalAccountNameExist (name: string, res: Response, sendNotFound = true) {
const promise = AccountModel.loadLocalByName(name)
return isAccountExist(promise, res)
return isAccountExist(promise, res, sendNotFound)
}
function isAccountNameWithHostExist (nameWithDomain: string, res: Response) {
function isAccountNameWithHostExist (nameWithDomain: string, res: Response, sendNotFound = true) {
const [ accountName, host ] = nameWithDomain.split('@')
let promise: Bluebird<AccountModel>
if (!host) promise = AccountModel.loadLocalByName(accountName)
else promise = AccountModel.loadLocalByNameAndHost(accountName, host)
return isAccountExist(promise, res)
return isAccountExist(promise, res, sendNotFound)
}
async function isAccountExist (p: Bluebird<AccountModel>, res: Response) {
async function isAccountExist (p: Bluebird<AccountModel>, res: Response, sendNotFound: boolean) {
const account = await p
if (!account) {
res.status(404)
.send({ error: 'Account not found' })
.end()
if (sendNotFound === true) {
res.status(404)
.send({ error: 'Account not found' })
.end()
}
return false
}
......@@ -60,6 +67,7 @@ async function isAccountExist (p: Bluebird<AccountModel>, res: Response) {
// ---------------------------------------------------------------------------
export {
isAccountIdValid,
isAccountIdExist,
isLocalAccountNameExist,
isAccountDescriptionValid,
......
......@@ -2,13 +2,14 @@ import * as express from 'express'
import { param } from 'express-validator/check'
import {
isAccountIdExist,
isAccountIdValid,
isAccountNameValid,
isAccountNameWithHostExist,
isLocalAccountNameExist
} from '../../helpers/custom-validators/accounts'
import { isIdOrUUIDValid } from '../../helpers/custom-validators/misc'
import { logger } from '../../helpers/logger'
import { areValidationErrors } from './utils'
import { isIdOrUUIDValid } from '../../helpers/custom-validators/misc'
const localAccountValidator = [
param('name').custom(isAccountNameValid).withMessage('Should have a valid account name'),
......@@ -24,13 +25,18 @@ const localAccountValidator = [
]
const accountsGetValidator = [
param('id').custom(isIdOrUUIDValid).withMessage('Should have a valid id'),
param('id').custom(isAccountIdValid).withMessage('Should have a valid id/uuid/name/name with host'),
async (req: express.Request, res: express.Response, next: express.NextFunction) => {
logger.debug('Checking accountsGetValidator parameters', { parameters: req.params })
if (areValidationErrors(req, res)) return
if (!await isAccountIdExist(req.params.id, res)) return
let accountFetched = false
if (isIdOrUUIDValid(req.params.id)) accountFetched = await isAccountIdExist(req.params.id, res, false)
if (!accountFetched) accountFetched = await isAccountNameWithHostExist(req.params.id, res, true)
if (!accountFetched) return
return next()
}
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment