Kill user session button added

This commit is contained in:
Denis Lemeshko 2021-06-25 20:45:09 +03:00
parent 05d7462a79
commit 696884ab28
3 changed files with 49 additions and 1 deletions

View File

@ -91,6 +91,14 @@ new Vue({
],
rows: [],
actions: [
{
name: 'u-kill',
label: 'Kill',
class: 'btn-warning',
showWhenStatus: 'Connected',
showForServerRole: ['master', 'slave'],
showForModule: ["core"],
},
{
name: 'u-change-password',
label: 'Change password',
@ -186,6 +194,15 @@ new Vue({
created() {
var _this = this;
_this.$root.$on('u-kill', function (msg) {
var data = new URLSearchParams();
data.append('username', _this.username);
axios.request(axios_cfg('api/user/kill', data, 'form'))
.then(function(response) {
_this.getUserData();
_this.$notify({title: 'User ' + _this.username + ' session killed!', type: 'warn'})
});
})
_this.$root.$on('u-revoke', function (msg) {
var data = new URLSearchParams();
data.append('username', _this.username);

View File

@ -2,7 +2,8 @@
<html lang="en">
<head>
<meta charset="utf-8">
<title>ovpn-admin</title>
<title>OpenVPN Admin Panel</title>
<meta http-equiv="refresh" content="30" />
</head>
<body>
<script src="dist/style.min.js"></script>
@ -25,6 +26,19 @@
</div>
<template slot="table-row" slot-scope="props">
<span v-if="props.column.field == 'actions'">
<button
class="btn btn-sm el-square modal-el-margin"
type="button"
:title="action.label"
:data-username="props.row.Identity"
:data-name="action.name"
:data-text="action.label"
@click.left.stop="rowActionFn"
v-for="action in actions"
v-bind:class="action.class"
v-if="action.showWhenStatus == props.row.ConnectionStatus">
{{ action.label }}
</button>
<button
class="btn btn-sm el-square modal-el-margin"
type="button"

17
main.go
View File

@ -238,6 +238,11 @@ func (oAdmin *OvpnAdmin) userCreateHandler(w http.ResponseWriter, r *http.Reques
}
}
func (oAdmin *OvpnAdmin) userKillHandler(w http.ResponseWriter, r *http.Request) {
r.ParseForm()
fmt.Fprintf(w, "%s", oAdmin.userKill(r.FormValue("username")))
}
func (oAdmin *OvpnAdmin) userRevokeHandler(w http.ResponseWriter, r *http.Request) {
if oAdmin.role == "slave" {
http.Error(w, `{"status":"error"}`, http.StatusLocked)
@ -426,6 +431,7 @@ func main() {
http.Handle("/", static)
http.HandleFunc("/api/server/settings", ovpnAdmin.serverSettingsHandler)
http.HandleFunc("/api/users/list", ovpnAdmin.userListHandler)
http.HandleFunc("/api/user/kill", ovpnAdmin.userKillHandler)
http.HandleFunc("/api/user/create", ovpnAdmin.userCreateHandler)
http.HandleFunc("/api/user/change-password", ovpnAdmin.userChangePasswordHandler)
http.HandleFunc("/api/user/revoke", ovpnAdmin.userRevokeHandler)
@ -867,6 +873,17 @@ func (oAdmin *OvpnAdmin) getUserStatistic(username string) clientStatus {
return clientStatus{}
}
func (oAdmin *OvpnAdmin) userKill(username string) string {
userConnected, userConnectedTo := isUserConnected(username, oAdmin.activeClients)
if userConnected {
oAdmin.mgmtKillUserConnection(username, userConnectedTo)
fmt.Printf("User \"%s\" session killed", username)
return fmt.Sprintf("User \"%s\" session killed", username)
}
fmt.Printf("User \"%s\" is not connected", username)
return fmt.Sprintf("User \"%s\" is not connected", username)
}
func (oAdmin *OvpnAdmin) userRevoke(username string) string {
if checkUserExist(username) {
// check certificate valid flag 'V'