Improve user info (#47)

This commit is contained in:
Jonas Plum authored and GitHub committed 2022-03-20 12:57:15 +01:00
1 parent 68618d2bdb
commit 2158899983
5 files changed
+168 -41

No files matched your search

+6
View File
@@ -0,0 +1,6 @@
package main
var (
avatarEve = "data:image/png;base64,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 truncated
avatarKevin = "data:image/png;base64,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 truncated
)
+26 -1
View File
@@ -4,6 +4,7 @@ import (
"context"
"log"
"net/http"
"strings"
"github.com/arangodb/go-driver"
@@ -12,6 +13,7 @@ import (
"github.com/SecurityBrewery/catalyst/database/busdb"
"github.com/SecurityBrewery/catalyst/generated/api"
"github.com/SecurityBrewery/catalyst/generated/model"
"github.com/SecurityBrewery/catalyst/generated/pointer"
"github.com/SecurityBrewery/catalyst/hooks"
"github.com/SecurityBrewery/catalyst/role"
"github.com/SecurityBrewery/catalyst/test"
@@ -39,12 +41,35 @@ func main() {
log.Fatal(err)
}
_, _ = theCatalyst.DB.UserCreate(context.Background(), &model.UserForm{ID: "eve", Roles: []string{"admin"}})
_ = theCatalyst.DB.UserDataCreate(context.Background(), "eve", &model.UserData{
Name: pointer.String("Eve"),
Email: pointer.String("eve@example.com"),
Image: &avatarEve,
})
_, _ = theCatalyst.DB.UserCreate(context.Background(), &model.UserForm{ID: "kevin", Roles: []string{"admin"}})
_ = theCatalyst.DB.UserDataCreate(context.Background(), "kevin", &model.UserData{
Name: pointer.String("Kevin"),
Email: pointer.String("kevin@example.com"),
Image: &avatarKevin,
})
// proxy static requests
middlewares := []func(next http.Handler) http.Handler{
catalyst.Authenticate(theCatalyst.DB, config.Auth),
catalyst.AuthorizeBlockedUser(),
}
theCatalyst.Server.With(middlewares...).NotFound(api.Proxy("http://localhost:8080"))
theCatalyst.Server.With(middlewares...).NotFound(func(writer http.ResponseWriter, request *http.Request) {
var handler http.Handler = http.HandlerFunc(api.Proxy("http://localhost:8080/static/"))
if strings.HasPrefix(request.URL.Path, "/static/") {
handler = http.StripPrefix("/static/", handler)
} else {
request.URL.Path = "/"
}
handler.ServeHTTP(writer, request)
})
if err := http.ListenAndServe(":8000", theCatalyst.Server); err != nil {
log.Fatal(err)
+63
View File
@@ -0,0 +1,63 @@
<template>
<span>
<span v-if="id === undefined">
<v-icon small class="mr-1">mdi-account</v-icon>
unassigned
</span>
<span v-else-if="user === undefined">
<v-icon small class="mr-1">mdi-account</v-icon>
{{ id }}
</span>
<span v-else>
<v-avatar v-if="user.image" :size="lodash.isInteger(size) ? size : 24">
<v-img :src="user.image"></v-img>
</v-avatar>
<v-icon v-else small class="">mdi-account</v-icon>
{{ user.name ? user.name : id }}
</span>
</span>
</template>
<script lang="ts">
import Vue from "vue";
import {UserData} from "@/client";
import {API} from "@/services/api";
import {AxiosTransformer} from "axios";
interface State {
user?: UserData,
}
export default Vue.extend({
name: "User",
props: ["id", "size"],
data: (): State => ({
user: undefined,
}),
watch: {
id: function(): void {
this.loadUserData();
}
},
methods: {
loadUserData: function () {
if (this.id === undefined) {
this.user = undefined;
return
}
let defaultTransformers = this.axios.defaults.transformResponse as AxiosTransformer[]
let transformResponse = defaultTransformers.concat((data) => {
data.notoast = true;
return data
});
API.getUserData(this.id, {transformResponse: transformResponse}).then(response => {
this.user = response.data;
})
}
},
mounted() {
this.loadUserData();
}
});
</script>
+5 -2
View File
@@ -12,8 +12,7 @@
<v-icon small class="mr-1" :color="statusColor">{{ statusIcon }}</v-icon>
<span :class="statusColor + '--text'">{{ ticket.status | capitalize }}</span>
<v-icon small class="mx-1">mdi-account</v-icon>
{{ ticket.owner ? ticket.owner : 'unassigned' }}
<User :id="ticket.owner" :size="16" class="mx-2"></User>
<v-spacer></v-spacer>
<v-icon small class="mr-1">mdi-source-branch</v-icon>
<span class="mr-1">{{ ticket.playbooks ? lodash.size(ticket.playbooks) : 0 }}</span>
@@ -38,10 +37,14 @@
<script lang="ts">
import Vue from "vue";
import {Playbook, Task, Type, TypeColorEnum} from "@/client";
import User from "@/components/User.vue";
export default Vue.extend({
name: "TicketSnippet",
props: ["ticket", "to", "action"],
components: {
User
},
computed: {
opentaskcount: function() {
let count = 0;
+68 -38
View File
@@ -103,38 +103,6 @@
</v-list>
</v-menu>
&middot;
<v-menu offset-y class="mr-2">
<template v-slot:activator="{ on, attrs }">
<span v-bind="attrs" v-on="on">
<v-icon small class="mr-1">mdi-account</v-icon>
{{ ticket.owner ? ticket.owner : "unassigned" }}
</span>
</template>
<v-list>
<v-list-item
dense
link
v-for="user in otherUsers(ticket.owner)"
:key="user.id"
@click="setOwner(user.id)"
>
<v-list-item-title>
Change owner to {{ user.id }}
</v-list-item-title>
</v-list-item>
<v-list-item
v-if="ticket.owner"
dense
link
@click="setOwner(null)"
>
<v-list-item-title>
Unassign ticket
</v-list-item-title>
</v-list-item>
</v-list>
</v-menu>
&middot;
<v-icon small class="mr-1">mdi-calendar-plus</v-icon>
{{ ticket.created | formatdate($store.state.settings.timeformat) }}
&middot;
@@ -243,6 +211,63 @@
>
<v-icon class="mr-1">mdi-graph</v-icon> open graph
</v-btn>
<v-list dense color="background">
<v-list-item class="pa-0 ma-0" style="min-height: 32px">
<span class="text--disabled" style="width: 50px;">Owner</span>
<v-menu offset-y class="mr-2">
<template v-slot:activator="{ on, attrs }">
<span v-bind="attrs" v-on="on">
<User :id="ticket.owner" class="ml-3"></User>
</span>
</template>
<v-list>
<v-list-item
dense
link
v-for="user in otherUsers(ticket.owner)"
:key="user.id"
@click="setOwner(user.id)"
>
<v-list-item-title>
Change owner to <User :id="user.id"></User>
</v-list-item-title>
</v-list-item>
<v-list-item
v-if="ticket.owner"
dense
link
@click="setOwner(undefined)"
>
<v-list-item-title>
Unassign ticket
</v-list-item-title>
</v-list-item>
</v-list>
</v-menu>
</v-list-item>
<!--v-list-item class="pa-0 ma-0" style="min-height: 32px">
<span class="text--disabled" style="width: 50px;">Editors</span>
<span v-for="writer in ticket.write" :key="writer">
<User :id="writer" class="ml-3"></User>
</span>
<v-btn v-if="!ticket.write || ticket.write.length === 0" small text elevation="0" @click="referenceDialog = true">
<v-icon small>mdi-plus</v-icon> Add editor
</v-btn>
</v-list-item>
<v-list-item class="pa-0 ma-0" style="min-height: 32px">
<span class="text--disabled" style="width: 50px;">Viewers</span>
<span v-for="reader in ticket.read" :key="reader">
<User :id="reader" class="ml-3"></User>
</span>
<v-btn v-if="!ticket.read || ticket.read.length === 0" small text elevation="0" @click="referenceDialog = true">
<v-icon small>mdi-plus</v-icon> Add viewer
</v-btn>
</v-list-item>
</v-list-->
<v-divider class="mb-5"></v-divider>
<div style="align-items: center" class="d-flex pb-1">
<span class="text--disabled">Playbooks</span>
<v-spacer></v-spacer>
@@ -796,19 +821,19 @@ import {alg, Graph} from "graphlib";
import ArtifactSnippet from "../components/snippets/ArtifactSnippet.vue";
import TicketSnippet from "../components/snippets/TicketSnippet.vue";
import TicketList from "../components/TicketList.vue";
import User from "../components/User.vue";
import ArtifactPopup from "./ArtifactPopup.vue";
import {
Ticket,
TicketResponse,
TicketTemplate,
ModelFile,
PlaybookTemplate,
Reference,
Task,
Type,
TypeColorEnum,
TaskResponse, PlaybookResponse, UserResponse, TaskTypeEnum, TicketWithTickets,
TaskResponse, PlaybookResponse, UserResponse, TicketWithTickets,
} from "@/client";
import {API} from "@/services/api";
@@ -818,7 +843,7 @@ import Tus from "@uppy/tus";
import "@uppy/core/dist/style.css";
import "@uppy/dashboard/dist/style.css";
import {Uppy, UppyFile} from "@uppy/core";
import {Uppy} from "@uppy/core";
import {AxiosError, AxiosResponse} from "axios";
import {DateTime} from "luxon";
import VueMarkdown from "vue-markdown";
@@ -897,7 +922,8 @@ export default Vue.extend({
"vue-markdown": VueMarkdown,
TicketList,
ArtifactPopup,
JSONHTML
JSONHTML,
User
},
data: (): State => ({
valid: false,
@@ -1447,12 +1473,16 @@ export default Vue.extend({
this.editName = "";
});
},
setOwner: function(owner: string) {
setOwner: function(owner?: string) {
if (!this.ticket || !this.ticket.id) {
return;
}
this.ticket.owner = owner;
if (owner === undefined) {
this.lodash.unset(this.ticket, "owner")
} else {
this.ticket.owner = owner;
}
API.updateTicket(this.ticket.id, this.toTicket(this.ticket)).then(response => {
this.$store.dispatch("alertSuccess", { name: "Ticket owner changed" });