add class AdminAPI and admin.vue
parent
8ea5c46920
commit
7292700cc9
@ -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
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
@ -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