add class AdminAPI and admin.vue
This commit is contained in:
parent
8ea5c46920
commit
7292700cc9
@ -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"
|
||||
|
41
src/lib/AdminAPI.js
Normal file
41
src/lib/AdminAPI.js
Normal file
@ -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
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
@ -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(){
|
||||
|
@ -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
|
||||
}
|
||||
]
|
||||
})
|
91
src/views/admin.vue
Normal file
91
src/views/admin.vue
Normal file
@ -0,0 +1,91 @@
|
||||
<template>
|
||||
<div class="admin">
|
||||
<h2>users</h2>
|
||||
<table v-if="users">
|
||||
<tr>
|
||||
<th class="left">user</th>
|
||||
<th class="mid">displayname</th>
|
||||
<th class="mid">deactivated</th>
|
||||
<th class="right">admin</th>
|
||||
</tr>
|
||||
<tr v-for="user in users.users" :key="user.name">
|
||||
<td class="left">{{user.name}}</td>
|
||||
<td class="mid">{{user.displayname}}</td>
|
||||
<td class="mid">{{user.deactivated}}</td>
|
||||
<td class="right">{{user.admin}}</td>
|
||||
</tr>
|
||||
</table>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import {matrix} from "@/main";
|
||||
import {AdminAPI} from "@/lib/AdminAPI";
|
||||
|
||||
export default {
|
||||
name: "admin",
|
||||
data(){
|
||||
return{
|
||||
users: undefined
|
||||
}
|
||||
},
|
||||
async created() {
|
||||
this.api = new AdminAPI(matrix.baseUrl+'/_synapse/admin/v2/', matrix.accessToken);
|
||||
this.users = await this.api.getUsers('users');
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
<style scoped>
|
||||
.admin{
|
||||
text-align: center;
|
||||
}
|
||||
table {
|
||||
position: relative;
|
||||
margin: auto;
|
||||
width: calc(100% - 2rem);
|
||||
max-width: 40rem;
|
||||
background-color: #1f262b;
|
||||
box-shadow: 3px 3px 10px #333;
|
||||
border: 2px solid #fff;
|
||||
border-collapse: separate;
|
||||
border-spacing: 2px;
|
||||
border-radius: 0.75rem;
|
||||
color: #fff;
|
||||
font-size: 1.2rem;
|
||||
font-family: "Roboto", regular, sans-serif;
|
||||
}
|
||||
|
||||
tr {
|
||||
margin: auto;
|
||||
border: 1px solid #fff;
|
||||
text-align: left;
|
||||
}
|
||||
|
||||
th {
|
||||
margin: auto;
|
||||
background-color: #546E7A;
|
||||
padding: 20px;
|
||||
border-radius: 8px;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
td {
|
||||
margin: auto;
|
||||
background-color: #37474F;
|
||||
padding: 10px;
|
||||
border-radius: 8px;
|
||||
}
|
||||
|
||||
td.left, th.left {
|
||||
border-radius: 0.5rem 0 0 0.5rem;
|
||||
}
|
||||
|
||||
td.right, th.right {
|
||||
border-radius: 0 0.5rem 0.5rem 0;
|
||||
}
|
||||
|
||||
td.mid, th.mid {
|
||||
border-radius: 0 0 0 0;
|
||||
}
|
||||
</style>
|
Loading…
Reference in New Issue
Block a user