diff --git a/package.json b/package.json index 8ed94cb..c57fd22 100644 --- a/package.json +++ b/package.json @@ -14,6 +14,7 @@ "jdenticon": "^3.1.0", "matrix-js-sdk": "^9.1.0", "sass": "^1.29.0", + "superagent": "^6.1.0", "v-emoji-picker": "^2.3.1", "vue": "^2.6.11", "ws": "^7.3.1" diff --git a/src/lib/AdminAPI.js b/src/lib/AdminAPI.js new file mode 100644 index 0000000..0f83d4b --- /dev/null +++ b/src/lib/AdminAPI.js @@ -0,0 +1,41 @@ +import rest from 'superagent'; + +export class AdminAPI{ + constructor(baseUrl, accessToken){ + this.baseUrl = baseUrl; + this.accessToken = accessToken; + } + + async sendRequest({path, obj={}, method=rest=>rest.get}){ + return await method(rest)(`${this.baseUrl}${path}?access_token=${this.accessToken}`) + .send(JSON.stringify(obj)).set('accept', 'json').then(res => { + return JSON.parse(res.text); + }); + } + + async getUsers(){ + return await this.sendRequest({path: 'users'}); + } + async resetPassword(userId, newPassword){ + return await this.sendRequest({ + path: `reset_password/${userId}`, + obj: { + new_password: newPassword, + logout_devices: true + } + }); + } + async createUser(userId, password, displayName, avatarUrl=undefined){ + return await this.sendRequest({ + path: `reset_password/${userId}`, + method: rest=>rest.put, + obj: { + 'password': password, + 'displayname': displayName, + 'avatar_url': avatarUrl, + 'admin': false, + 'deactivated': false + } + }); + } +} \ No newline at end of file diff --git a/src/lib/matrixHandler.js b/src/lib/matrixHandler.js index c7ec4f9..32a41f2 100644 --- a/src/lib/matrixHandler.js +++ b/src/lib/matrixHandler.js @@ -31,6 +31,7 @@ export class MatrixHandler { callback(response.access_token); this.user = user; this.baseUrl = baseUrl; + this.accessToken = response.access_token; this.startSync() } }).catch(error => { @@ -49,6 +50,7 @@ export class MatrixHandler { }); this.user = userId; this.baseUrl = baseUrl; + this.accessToken = accessToken; this.startSync(); } async logout(){ diff --git a/src/router.js b/src/router.js index 98f0ff5..c96523c 100644 --- a/src/router.js +++ b/src/router.js @@ -2,6 +2,7 @@ import VueRouter from 'vue-router'; import login from '@/views/login'; import chat from '@/views/chat'; import rooms from '@/views/rooms'; +import admin from '@/views/admin'; export const router = new VueRouter({ routes: [ @@ -29,6 +30,11 @@ export const router = new VueRouter({ path: '/rooms', name: 'rooms', component: rooms + }, + { + path: '/admin', + name: 'admin', + component: admin } ] }) \ No newline at end of file diff --git a/src/views/admin.vue b/src/views/admin.vue new file mode 100644 index 0000000..3d82a3f --- /dev/null +++ b/src/views/admin.vue @@ -0,0 +1,91 @@ + + + + + \ No newline at end of file