From 86cd34a8560c41e2b3ac6bafcbe54e3ff8997a51 Mon Sep 17 00:00:00 2001 From: Izak Lipnik Date: Wed, 20 Dec 2017 08:47:12 +0100 Subject: [PATCH] fix(tokens): remove access token --- src/api/db/access-token.ts | 8 ++++++++ src/api/server-routes.ts | 11 ++++++++++- src/app/components/app-user/app-user.component.html | 2 +- src/app/components/app-user/app-user.component.ts | 8 ++++++++ src/app/services/api.service.ts | 4 ++++ 5 files changed, 31 insertions(+), 2 deletions(-) diff --git a/src/api/db/access-token.ts b/src/api/db/access-token.ts index 4a1622390..8584f73e7 100644 --- a/src/api/db/access-token.ts +++ b/src/api/db/access-token.ts @@ -25,3 +25,11 @@ export function insertAccessToken(data: any): Promise { .then(token => !token ? reject(token) : resolve(token.toJSON())); }); } + +export function removeAccessToken(id: number): Promise { + return new Promise((resolve, reject) => { + new AccessToken({ id: id }).destroy() + .then(() => resolve(true)) + .catch(() => reject()); + }); +} diff --git a/src/api/server-routes.ts b/src/api/server-routes.ts index 18a1b41c0..73de723c3 100644 --- a/src/api/server-routes.ts +++ b/src/api/server-routes.ts @@ -29,7 +29,7 @@ import { import { getBuilds, getBuild } from './db/build'; import { getJob } from './db/job'; import { getJobRuns, getJobRunsBetween } from './db/job-run'; -import { insertAccessToken, getAccessTokens } from './db/access-token'; +import { insertAccessToken, getAccessTokens, removeAccessToken } from './db/access-token'; import { updatePermission, getUserRepositoryPermissions, @@ -223,6 +223,15 @@ export function userRoutes(): express.Router { }).catch(err => res.status(401).json({ data: 'Not Authorized' })); }); + router.get('/remove-token/:id', (req: express.Request, res: express.Response) => { + checkApiRequestAuth(req) + .then(() => { + removeAccessToken(req.params.id) + .then(() => res.status(200).json({ data: true })) + .catch(() => res.status(200).json({ data: false })); + }).catch(err => res.status(401).json({ data: 'Not Authorized' })); + }); + router.post('/upload-avatar', upload.any(), (req: express.Request, res: express.Response) => { const avatar = '/' + relative(getRootDir(), req.files[0].path); getUser(req.body.userId) diff --git a/src/app/components/app-user/app-user.component.html b/src/app/components/app-user/app-user.component.html index ffe9f15a9..ed4651e59 100644 --- a/src/app/components/app-user/app-user.component.html +++ b/src/app/components/app-user/app-user.component.html @@ -136,7 +136,7 @@

Access Tokens

{{ token.created_at | date:'medium' }}
- +
diff --git a/src/app/components/app-user/app-user.component.ts b/src/app/components/app-user/app-user.component.ts index 4e12733e8..8c25b5c9b 100644 --- a/src/app/components/app-user/app-user.component.ts +++ b/src/app/components/app-user/app-user.component.ts @@ -147,6 +147,14 @@ export class AppUserComponent implements OnInit { }); } + removeToken(id: number): void { + this.api.removeToken(id).subscribe(event => { + if (event) { + this.fetchUser(); + } + }); + } + gotoRepository(e: MouseEvent, id: number): void { e.preventDefault(); e.stopPropagation(); diff --git a/src/app/services/api.service.ts b/src/app/services/api.service.ts index 41fe1c65a..13e5fb557 100644 --- a/src/app/services/api.service.ts +++ b/src/app/services/api.service.ts @@ -119,6 +119,10 @@ export class ApiService { return this.post(`${this.url}/user/add-token`, data, true); } + removeToken(id: number): Observable { + return this.get(`${this.url}/user/remove-token/${id}`, null, true); + } + getUsers(): Observable { return this.get(`${this.url}/user`, null, true); }