Skip to content

Commit 3e7deef

Browse files
committed
Add settings page
1 parent 2bc5726 commit 3e7deef

15 files changed

Lines changed: 171 additions & 22 deletions

File tree

api/pkg/handlers/heartbeat_handler.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,7 @@ func (h *HeartbeatHandler) RegisterRoutes(router fiber.Router) {
5454
// @Param limit query int false "number of heartbeats to return" minimum(1) maximum(20)
5555
// @Success 200 {object} responses.HeartbeatsResponse
5656
// @Failure 400 {object} responses.BadRequest
57-
// @Failure 403 {object} responses.Unauthorized
57+
// @Failure 401 {object} responses.Unauthorized
5858
// @Failure 422 {object} responses.UnprocessableEntity
5959
// @Failure 500 {object} responses.InternalServerError
6060
// @Router /heartbeats [get]

api/pkg/handlers/message_handler.go

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,7 @@ func (h *MessageHandler) RegisterRoutes(router fiber.Router) {
5959
// @Param payload body requests.MessageSend true "PostSend message request payload"
6060
// @Success 200 {object} responses.MessageResponse
6161
// @Failure 400 {object} responses.BadRequest
62-
// @Failure 403 {object} responses.Unauthorized
62+
// @Failure 401 {object} responses.Unauthorized
6363
// @Failure 422 {object} responses.UnprocessableEntity
6464
// @Failure 500 {object} responses.InternalServerError
6565
// @Router /messages/send [post]
@@ -104,6 +104,7 @@ func (h *MessageHandler) PostSend(c *fiber.Ctx) error {
104104
// @Param limit query int false "Number of outstanding messages to fetch" minimum(1) maximum(10)
105105
// @Success 200 {object} responses.MessagesResponse
106106
// @Failure 400 {object} responses.BadRequest
107+
// @Failure 401 {object} responses.Unauthorized
107108
// @Failure 422 {object} responses.UnprocessableEntity
108109
// @Failure 500 {object} responses.InternalServerError
109110
// @Router /messages/outstanding [get]
@@ -151,6 +152,7 @@ func (h *MessageHandler) GetOutstanding(c *fiber.Ctx) error {
151152
// @Param limit query int false "number of messages to return" minimum(1) maximum(20)
152153
// @Success 200 {object} responses.MessagesResponse
153154
// @Failure 400 {object} responses.BadRequest
155+
// @Failure 401 {object} responses.Unauthorized
154156
// @Failure 422 {object} responses.UnprocessableEntity
155157
// @Failure 500 {object} responses.InternalServerError
156158
// @Router /messages [get]
@@ -194,6 +196,7 @@ func (h *MessageHandler) Index(c *fiber.Ctx) error {
194196
// @Param payload body requests.MessageEvent true "Payload of the event emitted."
195197
// @Success 200 {object} responses.MessageResponse
196198
// @Failure 400 {object} responses.BadRequest
199+
// @Failure 401 {object} responses.Unauthorized
197200
// @Failure 404 {object} responses.NotFound
198201
// @Failure 422 {object} responses.UnprocessableEntity
199202
// @Failure 500 {object} responses.InternalServerError

api/pkg/handlers/message_thread_handler.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,7 @@ func (h *MessageThreadHandler) RegisterRoutes(router fiber.Router) {
5454
// @Param limit query int false "number of messages to return" minimum(1) maximum(20)
5555
// @Success 200 {object} responses.MessageThreadsResponse
5656
// @Failure 400 {object} responses.BadRequest
57-
// @Failure 403 {object} responses.Unauthorized
57+
// @Failure 401 {object} responses.Unauthorized
5858
// @Failure 422 {object} responses.UnprocessableEntity
5959
// @Failure 500 {object} responses.InternalServerError
6060
// @Router /message-threads [get]

api/pkg/handlers/phone_handler.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,7 @@ func (h *PhoneHandler) RegisterRoutes(router fiber.Router) {
5555
// @Param limit query int false "number of phones to return" minimum(1) maximum(20)
5656
// @Success 200 {object} responses.PhonesResponse
5757
// @Failure 400 {object} responses.BadRequest
58-
// @Failure 403 {object} responses.Unauthorized
58+
// @Failure 401 {object} responses.Unauthorized
5959
// @Failure 422 {object} responses.UnprocessableEntity
6060
// @Failure 500 {object} responses.InternalServerError
6161
// @Router /phones [get]
@@ -98,7 +98,7 @@ func (h *PhoneHandler) Index(c *fiber.Ctx) error {
9898
// @Param payload body requests.PhoneUpsert true "Payload of new phone number."
9999
// @Success 200 {object} responses.PhoneResponse
100100
// @Failure 400 {object} responses.BadRequest
101-
// @Failure 403 {object} responses.Unauthorized
101+
// @Failure 401 {object} responses.Unauthorized
102102
// @Failure 422 {object} responses.UnprocessableEntity
103103
// @Failure 500 {object} responses.InternalServerError
104104
// @Router /phones [put]

api/pkg/handlers/user_handler.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@ func (h *UserHandler) RegisterRoutes(router fiber.Router) {
4444
// @Produce json
4545
// @Success 200 {object} responses.UserResponse
4646
// @Failure 400 {object} responses.BadRequest
47-
// @Failure 403 {object} responses.Unauthorized
47+
// @Failure 401 {object} responses.Unauthorized
4848
// @Failure 422 {object} responses.UnprocessableEntity
4949
// @Failure 500 {object} responses.InternalServerError
5050
// @Router /users/me [get]

api/pkg/repositories/gorm_user_repository.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -110,7 +110,7 @@ func (repository *gormUserRepository) LoadOrStore(ctx context.Context, authUser
110110
return user, nil
111111
}
112112

113-
apiKey, err := repository.generateAPIKey(255)
113+
apiKey, err := repository.generateAPIKey(64)
114114
if err != nil {
115115
return nil, stacktrace.Propagate(err, "cannot generate apiKey")
116116
}

web/components/CopyButton.vue

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
<template>
2+
<v-btn
3+
:disabled="disabled"
4+
:color="color"
5+
:small="$vuetify.breakpoint.smAndDown"
6+
:block="block"
7+
:large="large"
8+
@click="copy"
9+
>
10+
<v-icon>mdi-content-copy</v-icon>
11+
{{ copyText }}
12+
</v-btn>
13+
</template>
14+
15+
<script lang="ts">
16+
import { Vue, Component, Prop } from 'vue-property-decorator'
17+
import { NotificationRequest } from '~/store'
18+
@Component
19+
export default class CopyButton extends Vue {
20+
@Prop({ required: true, type: String }) value!: string
21+
@Prop({ required: false, type: String, default: 'default' }) color!: string
22+
@Prop({ required: false, type: Boolean, default: false }) block!: boolean
23+
@Prop({ required: false, type: Boolean, default: false }) large!: boolean
24+
@Prop({ required: false, type: String, default: 'Copy' }) copyText!: string
25+
@Prop({ required: false, type: String, default: 'Copied' })
26+
notificationText!: string
27+
28+
disabled = false
29+
30+
async copy() {
31+
this.disabled = true
32+
await navigator.clipboard.writeText(this.value)
33+
34+
await this.$store.dispatch('addNotification', {
35+
message: this.notificationText,
36+
type: 'success',
37+
} as NotificationRequest)
38+
39+
setTimeout(() => {
40+
this.disabled = false
41+
}, 5000)
42+
}
43+
}
44+
</script>

web/components/MessageThreadHeader.vue

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,7 @@
5555
</template>
5656
<v-list class="px-2" nav :dense="$vuetify.breakpoint.mdAndDown">
5757
<v-list-item-group>
58-
<v-list-item :to="{ name: 'index' }" exact>
58+
<v-list-item :to="{ name: 'settings' }" exact>
5959
<v-list-item-icon class="pl-2">
6060
<v-icon dense>mdi-account-cog</v-icon>
6161
</v-list-item-icon>
@@ -92,7 +92,7 @@ import { Vue, Component } from 'vue-property-decorator'
9292
export default class MessageThreadHeader extends Vue {
9393
logout(): void {
9494
this.$fire.auth.signOut().then(() => {
95-
this.$store.dispatch('setUser', null)
95+
this.$store.dispatch('setAuthUser', null)
9696
this.$store.dispatch('addNotification', {
9797
type: 'info',
9898
message: 'You have successfully logged out',

web/layouts/default.vue

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,8 +11,9 @@
1111
<message-thread></message-thread>
1212
</template>
1313
</v-navigation-drawer>
14-
<v-main>
14+
<v-main :class="{ 'has-drawer': hasDrawer && $vuetify.breakpoint.lgAndUp }">
1515
<Nuxt />
16+
<toast></toast>
1617
</v-main>
1718
</v-app>
1819
</template>
@@ -25,7 +26,7 @@ export default class DefaultLayout extends Vue {
2526
poller: number | null = null
2627
2728
get hasDrawer(): boolean {
28-
return !['login', 'index'].includes(this.$route.name ?? '')
29+
return !['login', 'index', 'settings'].includes(this.$route.name ?? '')
2930
}
3031
3132
mounted() {
@@ -81,5 +82,11 @@ html {
8182
.h-full {
8283
height: 100%;
8384
}
85+
86+
.has-drawer {
87+
.v-snack {
88+
padding-left: 400px;
89+
}
90+
}
8491
}
8592
</style>

web/middleware/auth.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import { Context, Middleware } from '@nuxt/types'
22

33
const authMiddleware: Middleware = (context: Context) => {
4-
if (context.store.getters.getUser === null) {
4+
if (context.store.getters.getAuthUser === null) {
55
context.redirect('/login')
66
}
77
}

0 commit comments

Comments
 (0)