Skip to content
This repository was archived by the owner on Aug 3, 2024. It is now read-only.

Commit cea04e6

Browse files
authored
feat: Admin login & basic dashboard (#12)
1 parent a157cfa commit cea04e6

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

45 files changed

+2573
-235
lines changed

.dockerignore

+5
Original file line numberDiff line numberDiff line change
@@ -7,3 +7,8 @@ beaver
77
beaver_server
88
Makefile
99
README.md
10+
data
11+
dist
12+
internal/server/web/node_modules
13+
internal/server/web/dist
14+
playwright-report

.github/workflows/tests.yml

+10
Original file line numberDiff line numberDiff line change
@@ -20,11 +20,21 @@ jobs:
2020
with:
2121
go-version: 1.19
2222

23+
- name: Setup node
24+
uses: actions/setup-node@v3
25+
with:
26+
node-version: 18.12.1
27+
2328
- name: Add hosts to /etc/hosts
2429
run: |
2530
sudo echo "127.0.0.1 test.localhost" | sudo tee -a /etc/hosts
2631
sudo echo "127.0.0.1 xxyyzz.localhost" | sudo tee -a /etc/hosts
2732
33+
- name: Build frontend
34+
run: |
35+
npm i -g pnpm
36+
pnpm install --dir internal/server/web build && pnpm run --dir internal/server/web build
37+
2838
- name: Build client and server
2939
run: |
3040
go build -ldflags="-s -w" -o beaver ./cmd/beaver_client

Makefile

+4-1
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,10 @@ build-server:
44
go build -ldflags="-s -w" -o beaver_server ./cmd/beaver_server
55

66
publish-server-image:
7-
docker buildx build --platform linux/amd64,linux/arm64 -t amalshaji/beaver:$(tag) -f deployments/Dockerfile --push .
7+
docker buildx build \
8+
--platform linux/amd64,linux/arm64 \
9+
-t amalshaji/beaver:$(tag) \
10+
-f deployments/Dockerfile --push .
811

912
build-client:
1013
go build -ldflags="-s -w" -o beaver ./cmd/beaver_client

README.md

+2
Original file line numberDiff line numberDiff line change
@@ -74,6 +74,7 @@ Download the binary from [releases page](https://github.com/amalshaji/beaver/rel
7474
```shell
7575
docker run \
7676
-v $PWD/docs/beaver_server.yaml:/app/config/beaver_server.yaml \
77+
-v $PWD/data:/app/data/ \
7778
-p 8080:8080 --restart unless-stopped amalshaji/beaver:latest
7879
```
7980

@@ -87,6 +88,7 @@ Download the binary from [releases page](https://github.com/amalshaji/beaver/rel
8788
image: amalshaji/beaver:latest
8889
volumes:
8990
- ./docs/beaver_server.yaml:/app/config/beaver_server.yaml
91+
- ./data:/app/data/
9092
ports:
9193
- 8080:8080
9294
restart: unless-stopped

cmd/beaver_server/createsuperuser.go

+26-22
Original file line numberDiff line numberDiff line change
@@ -1,49 +1,53 @@
11
package main
22

33
import (
4+
"bufio"
45
"context"
56
"fmt"
6-
"log"
7+
"os"
8+
"strings"
79

8-
"github.com/amalshaji/beaver/internal/server/app"
10+
"github.com/amalshaji/beaver/internal/server/admin"
911
"github.com/amalshaji/beaver/internal/server/db"
1012
"github.com/amalshaji/beaver/internal/utils"
1113
"github.com/labstack/gommon/color"
12-
"github.com/manifoldco/promptui"
1314
"github.com/spf13/cobra"
15+
"golang.org/x/term"
1416
)
1517

16-
func handlePromptRenderError(err error) {
17-
if err != nil {
18-
log.Fatalf("Prompt failed %v\n", err)
19-
}
20-
}
21-
2218
var superUserCmd = &cobra.Command{
2319
Use: "createsuperuser",
2420
Short: "Create a new super user",
2521
Run: func(cmd *cobra.Command, args []string) {
26-
emailPrompt := promptui.Prompt{
27-
Label: "Email",
28-
Validate: utils.ValidateEmail,
22+
var err error
23+
var email string
24+
var password []byte
25+
26+
reader := bufio.NewReader(os.Stdin)
27+
fmt.Print("Email: ")
28+
email, _ = reader.ReadString('\n')
29+
email = strings.TrimSuffix(email, "\n")
30+
31+
if err := utils.ValidateEmail(email); err != nil {
32+
fmt.Println(color.Red("Enter a valid email address"))
33+
os.Exit(1)
2934
}
30-
email, err := emailPrompt.Run()
31-
handlePromptRenderError(err)
3235

33-
passwordPrompt := promptui.Prompt{
34-
Label: "Password",
35-
Validate: utils.ValidatePassword,
36-
Mask: '*',
36+
fmt.Print("Password: ")
37+
password, _ = term.ReadPassword(0)
38+
fmt.Println(strings.Repeat("*", len(password)))
39+
40+
if err := utils.ValidatePassword(string(password)); err != nil {
41+
fmt.Println(color.Red(err.Error()))
42+
os.Exit(1)
3743
}
38-
password, err := passwordPrompt.Run()
39-
handlePromptRenderError(err)
4044

4145
// Create new user service
4246
db := db.NewStore()
4347
ctx := context.Background()
44-
user := app.NewUserService(db)
48+
user := admin.NewUserService(db)
4549

46-
err = user.CreateSuperUser(ctx, email, password)
50+
_, err = user.CreateSuperUser(ctx, email, string(password))
4751
if err != nil {
4852
fmt.Println(color.Red(err.Error()))
4953
} else {

cmd/beaver_server/main.go

+2-2
Original file line numberDiff line numberDiff line change
@@ -3,11 +3,11 @@ package main
33
import (
44
"log"
55

6-
"github.com/amalshaji/beaver/internal/server"
6+
handler "github.com/amalshaji/beaver/internal/server/handlers"
77
)
88

99
func startServer() {
10-
server.Start(configFile)
10+
handler.Start(configFile)
1111
}
1212

1313
func main() {

deployments/Dockerfile

+15-1
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,11 @@
1+
FROM node:18.12.0-alpine as frontend-builder
2+
3+
WORKDIR /app
4+
5+
COPY internal/server/web .
6+
7+
RUN npm i -g pnpm && pnpm install && pnpm run build
8+
19
FROM golang:1.19 AS builder
210

311
WORKDIR /app
@@ -8,6 +16,10 @@ RUN go mod download
816

917
COPY . /app/
1018

19+
RUN mkdir -p /app/internal/server/web/dist
20+
21+
COPY --from=frontend-builder /app/dist /app/internal/server/web/dist
22+
1123
RUN go build -ldflags="-s -w" -o beaver_server ./cmd/beaver_server
1224

1325
FROM alpine:3.17.1
@@ -19,5 +31,7 @@ RUN apk add libc6-compat=1.2.3-r4 --no-cache && rm -rf /var/cache/apk/*
1931
COPY --from=builder /app/beaver_server /app/
2032

2133
VOLUME [ "/app/config" ]
34+
VOLUME [ "/app/data" ]
2235

23-
ENTRYPOINT ["./beaver_server", "--config", "/app/config/beaver_server.yaml"]
36+
ENTRYPOINT ["./beaver_server"]
37+
CMD [ "--config", "/app/config/beaver_server.yaml" ]

go.mod

+8-2
Original file line numberDiff line numberDiff line change
@@ -6,25 +6,26 @@ require (
66
github.com/gorilla/websocket v1.5.0
77
github.com/labstack/echo/v4 v4.10.0
88
github.com/labstack/gommon v0.4.0
9-
github.com/manifoldco/promptui v0.9.0
109
github.com/matoous/go-nanoid/v2 v2.0.0
1110
github.com/nu7hatch/gouuid v0.0.0-20131221200532-179d4d0c4d8d
11+
github.com/shirou/gopsutil/v3 v3.23.1
1212
github.com/spf13/cobra v1.6.1
1313
github.com/stretchr/testify v1.8.1
1414
github.com/timshannon/badgerhold/v4 v4.0.2
1515
golang.org/x/crypto v0.6.0
16+
golang.org/x/term v0.5.0
1617
gopkg.in/yaml.v3 v3.0.1
1718
)
1819

1920
require (
2021
github.com/cespare/xxhash v1.1.0 // indirect
2122
github.com/cespare/xxhash/v2 v2.2.0 // indirect
22-
github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e // indirect
2323
github.com/davecgh/go-spew v1.1.1 // indirect
2424
github.com/dgraph-io/badger/v3 v3.2103.1 // indirect
2525
github.com/dgraph-io/ristretto v0.1.1 // indirect
2626
github.com/dgryski/go-farm v0.0.0-20200201041132-a6ae2369ad13 // indirect
2727
github.com/dustin/go-humanize v1.0.1 // indirect
28+
github.com/go-ole/go-ole v1.2.6 // indirect
2829
github.com/gogo/protobuf v1.3.2 // indirect
2930
github.com/golang/glog v1.0.0 // indirect
3031
github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da // indirect
@@ -33,13 +34,18 @@ require (
3334
github.com/google/flatbuffers v2.0.0+incompatible // indirect
3435
github.com/inconshreveable/mousetrap v1.1.0 // indirect
3536
github.com/klauspost/compress v1.13.1 // indirect
37+
github.com/lufia/plan9stats v0.0.0-20211012122336-39d0f177ccd0 // indirect
3638
github.com/mattn/go-colorable v0.1.13 // indirect
3739
github.com/mattn/go-isatty v0.0.17 // indirect
3840
github.com/pkg/errors v0.9.1 // indirect
3941
github.com/pmezard/go-difflib v1.0.0 // indirect
42+
github.com/power-devops/perfstat v0.0.0-20210106213030-5aafc221ea8c // indirect
4043
github.com/spf13/pflag v1.0.5 // indirect
44+
github.com/tklauser/go-sysconf v0.3.11 // indirect
45+
github.com/tklauser/numcpus v0.6.0 // indirect
4146
github.com/valyala/bytebufferpool v1.0.0 // indirect
4247
github.com/valyala/fasttemplate v1.2.2 // indirect
48+
github.com/yusufpapurcu/wmi v1.2.2 // indirect
4349
go.opencensus.io v0.23.0 // indirect
4450
golang.org/x/net v0.6.0 // indirect
4551
golang.org/x/sys v0.5.0 // indirect

go.sum

+23-11
Original file line numberDiff line numberDiff line change
@@ -9,12 +9,6 @@ github.com/cespare/xxhash v1.1.0/go.mod h1:XrSqR1VqqWfGrhpAt58auRo0WTKS1nRRg3ghf
99
github.com/cespare/xxhash/v2 v2.1.1/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs=
1010
github.com/cespare/xxhash/v2 v2.2.0 h1:DC2CZ1Ep5Y4k3ZQ899DldepgrayRUGE6BBZ/cd9Cj44=
1111
github.com/cespare/xxhash/v2 v2.2.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs=
12-
github.com/chzyer/logex v1.1.10 h1:Swpa1K6QvQznwJRcfTfQJmTE72DqScAa40E+fbHEXEE=
13-
github.com/chzyer/logex v1.1.10/go.mod h1:+Ywpsq7O8HXn0nuIou7OrIPyXbp3wmkHB+jjWRnGsAI=
14-
github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e h1:fY5BOSpyZCqRo5OhCuC+XN+r/bBCmeuuJtjz+bCNIf8=
15-
github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e/go.mod h1:nSuG5e5PlCu98SY8svDHJxuZscDgtXS6KTTbou5AhLI=
16-
github.com/chzyer/test v0.0.0-20180213035817-a1ea475d72b1 h1:q763qf9huN11kDQavWsoZXJNW3xEE4JJyHa5Q25/sd8=
17-
github.com/chzyer/test v0.0.0-20180213035817-a1ea475d72b1/go.mod h1:Q3SI9o4m/ZMnBNeIyt5eFwwo7qiLfzFZmjNmxjkiQlU=
1812
github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw=
1913
github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc=
2014
github.com/coreos/etcd v3.3.10+incompatible/go.mod h1:uF7uidLiAD3TWHmW31ZFd/JWoc32PjwdhPthX9715RE=
@@ -41,6 +35,8 @@ github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.m
4135
github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98=
4236
github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c=
4337
github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo=
38+
github.com/go-ole/go-ole v1.2.6 h1:/Fpf6oFPoeFik9ty7siob0G6Ke8QvQEuVcuChpwXzpY=
39+
github.com/go-ole/go-ole v1.2.6/go.mod h1:pprOEPIfldk/42T2oK7lQ4v4JSDwmV0As9GaiUsvbm0=
4440
github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q=
4541
github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q=
4642
github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q=
@@ -78,8 +74,10 @@ github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/
7874
github.com/google/go-cmp v0.5.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
7975
github.com/google/go-cmp v0.5.3/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
8076
github.com/google/go-cmp v0.5.4/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
81-
github.com/google/go-cmp v0.5.5 h1:Khx7svrCpmxxtHBq5j2mp/xVjsi8hQMfNLvJFAlrGgU=
8277
github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
78+
github.com/google/go-cmp v0.5.6/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
79+
github.com/google/go-cmp v0.5.9 h1:O2Tfq5qg4qc4AmwVlvv0oLiVAGB7enBSJ2x2DqQFi38=
80+
github.com/google/go-cmp v0.5.9/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY=
8381
github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
8482
github.com/gorilla/websocket v1.5.0 h1:PPwGk2jz7EePpoHN/+ClbZu8SPxiqlu12wZP/3sWmnc=
8583
github.com/gorilla/websocket v1.5.0/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE=
@@ -103,9 +101,9 @@ github.com/labstack/echo/v4 v4.10.0 h1:5CiyngihEO4HXsz3vVsJn7f8xAlWwRr3aY6Ih280Z
103101
github.com/labstack/echo/v4 v4.10.0/go.mod h1:S/T/5fy/GigaXnHTkh0ZGe4LpkkQysvRjFMSUTkDRNQ=
104102
github.com/labstack/gommon v0.4.0 h1:y7cvthEAEbU0yHOf4axH8ZG2NH8knB9iNSoTO8dyIk8=
105103
github.com/labstack/gommon v0.4.0/go.mod h1:uW6kP17uPlLJsD3ijUYn3/M5bAxtlZhMI6m3MFxTMTM=
104+
github.com/lufia/plan9stats v0.0.0-20211012122336-39d0f177ccd0 h1:6E+4a0GO5zZEnZ81pIr0yLvtUWk2if982qA3F3QD6H4=
105+
github.com/lufia/plan9stats v0.0.0-20211012122336-39d0f177ccd0/go.mod h1:zJYVVT2jmtg6P3p1VtQj7WsuWi/y4VnjVBn7F8KPB3I=
106106
github.com/magiconair/properties v1.8.0/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ=
107-
github.com/manifoldco/promptui v0.9.0 h1:3V4HzJk1TtXW1MTZMP7mdlwbBpIinw3HztaIlYthEiA=
108-
github.com/manifoldco/promptui v0.9.0/go.mod h1:ka04sppxSGFAtxX0qhlYQjISsg9mR4GWtQEhdbn6Pgg=
109107
github.com/matoous/go-nanoid v1.5.0/go.mod h1:zyD2a71IubI24efhpvkJz+ZwfwagzgSO6UNiFsZKN7U=
110108
github.com/matoous/go-nanoid/v2 v2.0.0 h1:d19kur2QuLeHmJBkvYkFdhFBzLoo1XVm2GgTpL+9Tj0=
111109
github.com/matoous/go-nanoid/v2 v2.0.0/go.mod h1:FtS4aGPVfEkxKxhdWPAspZpZSh1cOjtM7Ej/So3hR0g=
@@ -125,9 +123,13 @@ github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4=
125123
github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
126124
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
127125
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
126+
github.com/power-devops/perfstat v0.0.0-20210106213030-5aafc221ea8c h1:ncq/mPwQF4JjgDlrVEn3C11VoGHZN7m8qihwgMEtzYw=
127+
github.com/power-devops/perfstat v0.0.0-20210106213030-5aafc221ea8c/go.mod h1:OmDBASR4679mdNQnz2pUhc2G8CO2JrUAVFDRBDP/hJE=
128128
github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=
129129
github.com/russross/blackfriday v1.5.2/go.mod h1:JO/DiYxRf+HjHt06OyowR9PTA263kcR/rfWxYHBV53g=
130130
github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM=
131+
github.com/shirou/gopsutil/v3 v3.23.1 h1:a9KKO+kGLKEvcPIs4W62v0nu3sciVDOOOPUD0Hz7z/4=
132+
github.com/shirou/gopsutil/v3 v3.23.1/go.mod h1:NN6mnm5/0k8jw4cBfCnJtr5L7ErOTg18tMNpgFkn0hA=
131133
github.com/spaolacci/murmur3 v0.0.0-20180118202830-f09979ecbc72/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA=
132134
github.com/spaolacci/murmur3 v1.1.0 h1:7c1g84S4BPRrfL5Xrdp6fOJ206sU9y293DDHaoy0bLI=
133135
github.com/spaolacci/murmur3 v1.1.0/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA=
@@ -156,6 +158,10 @@ github.com/timshannon/badgerhold/v3 v3.0.0-20210909134927-2b6764d68c1e h1:zWSVsQ
156158
github.com/timshannon/badgerhold/v3 v3.0.0-20210909134927-2b6764d68c1e/go.mod h1:/Seq5xGNo8jLhSbDX3jdbeZrp4yFIpQ6/7n4TjziEWs=
157159
github.com/timshannon/badgerhold/v4 v4.0.2 h1:83OLY/NFnEaMnHEPd84bYtkLipVkjTsMbzQRYbk47g4=
158160
github.com/timshannon/badgerhold/v4 v4.0.2/go.mod h1:rh6RyXLQFsvrvcKondPQQFZnNovpRzu+gS0FlLxYuHY=
161+
github.com/tklauser/go-sysconf v0.3.11 h1:89WgdJhk5SNwJfu+GKyYveZ4IaJ7xAkecBo+KdJV0CM=
162+
github.com/tklauser/go-sysconf v0.3.11/go.mod h1:GqXfhXY3kiPa0nAXPDIQIWzJbMCB7AmcWpGR8lSZfqI=
163+
github.com/tklauser/numcpus v0.6.0 h1:kebhY2Qt+3U6RNK7UqpYNA+tJ23IBEGKkB7JQBfDYms=
164+
github.com/tklauser/numcpus v0.6.0/go.mod h1:FEZLMke0lhOUG6w2JadTzp0a+Nl8PF/GFkQ5UVIcaL4=
159165
github.com/ugorji/go/codec v0.0.0-20181204163529-d75b2dcb6bc8/go.mod h1:VFNgLljTbGfSG7qAOspJ7OScBnGdDN/yBr0sguwnwf0=
160166
github.com/valyala/bytebufferpool v1.0.0 h1:GqA5TC/0021Y/b9FG4Oi9Mr3q7XYx6KllzawFIhcdPw=
161167
github.com/valyala/bytebufferpool v1.0.0/go.mod h1:6bBcMArwyJ5K/AmCkWv1jt77kVWyCJ6HpOuEn7z0Csc=
@@ -165,6 +171,8 @@ github.com/valyala/fasttemplate v1.2.2/go.mod h1:KHLXt3tVN2HBp8eijSv/kGJopbvo7S+
165171
github.com/xordataexchange/crypt v0.0.3-0.20170626215501-b2862e3d0a77/go.mod h1:aYKd//L2LvnjZzWKhF00oedf4jCCReLcmhLdhm1A27Q=
166172
github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
167173
github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
174+
github.com/yusufpapurcu/wmi v1.2.2 h1:KBNDSne4vP5mbSWnJbO+51IMOXJB67QiYCSBrubbPRg=
175+
github.com/yusufpapurcu/wmi v1.2.2/go.mod h1:SBZ9tNy3G9/m5Oi98Zks0QjeHVDvuK0qfxQmPyzfmi0=
168176
go.opencensus.io v0.22.5/go.mod h1:5pWMHQbX5EPX2/62yrJeAkowc+lfs/XD7Uxpq3pI6kk=
169177
go.opencensus.io v0.23.0 h1:gqCw0LfLxScz8irSi8exQc7fyQ0fKQU/qnC/X8+V/1M=
170178
go.opencensus.io v0.23.0/go.mod h1:XItmlyltB5F7CS4xOC1DcqMoFqwtC6OG2xF7mCv7P7E=
@@ -200,23 +208,28 @@ golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJ
200208
golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
201209
golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
202210
golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
203-
golang.org/x/sys v0.0.0-20181122145206-62eef0e2fa9b/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
204211
golang.org/x/sys v0.0.0-20181205085412-a5c9d58dba9a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
205212
golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
206213
golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
207214
golang.org/x/sys v0.0.0-20190502145724-3ef323f4f1fd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
215+
golang.org/x/sys v0.0.0-20190916202348-b4ddaad3f8a3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
208216
golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
209217
golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
218+
golang.org/x/sys v0.0.0-20201204225414-ed752295db88/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
210219
golang.org/x/sys v0.0.0-20210124154548-22da62e12c0c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
211220
golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
212221
golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
213222
golang.org/x/sys v0.0.0-20210927094055-39ccf1dd6fa6/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
214223
golang.org/x/sys v0.0.0-20211103235746-7861aae1554b/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
215224
golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
216225
golang.org/x/sys v0.0.0-20221010170243-090e33056c14/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
226+
golang.org/x/sys v0.2.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
227+
golang.org/x/sys v0.4.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
217228
golang.org/x/sys v0.5.0 h1:MUK/U/4lj1t1oPg0HfuXDN/Z1wv31ZJ/YcPiGccS4DU=
218229
golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
219230
golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
231+
golang.org/x/term v0.5.0 h1:n2a8QNdAb0sZNpU9R1ALUXBbY+w51fCQDN+7EdxNBsY=
232+
golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k=
220233
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
221234
golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
222235
golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
@@ -233,7 +246,6 @@ golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4f
233246
golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
234247
golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
235248
golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
236-
golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1 h1:go1bK/D/BFZV2I8cIQd1NKEZ+0owSTG1fDTci4IqFcE=
237249
golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
238250
google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM=
239251
google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=

internal/server/app/dashboard.go internal/server/admin/dashboard.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package app
1+
package admin
22

33
import "github.com/timshannon/badgerhold/v4"
44

0 commit comments

Comments
 (0)