💾 Archived View for gemini.rmf-dev.com › repo › Vaati › Gemigit › files › db2b394b94c4a088bcaf95ada6… captured on 2024-02-05 at 09:48:04. Gemini links have been rewritten to link to archived content
-=-=-=-=-=-=-
0 package gmi
1
2 import (
3 "log"
4 "strconv"
5
6 "gemigit/db"
7 "gemigit/csrf"
8
9 "github.com/pitr/gig"
10 )
11
12 func tokenRedirect(c gig.Context) error {
13 return c.NoContent(gig.StatusRedirectTemporary,
14 "/account/" + csrf.Token(c.CertHash()) + "/token")
15 }
16
17 func CreateToken(c gig.Context, readOnly bool) error {
18
19 user, exist := db.GetUser(c.CertHash())
20 if !exist {
21 return c.NoContent(gig.StatusBadRequest, "Invalid username")
22 }
23
24 token, err := user.CreateToken(readOnly)
25 if err != nil {
26 log.Println(err)
27 return c.NoContent(gig.StatusBadRequest, "Unexpected error")
28 }
29 data := struct {
30 Token string
31 }{
32 Token: token,
33 }
34 return execT(c, "token_new.gmi", data)
35 }
36
37 func CreateWriteToken(c gig.Context) error {
38 return CreateToken(c, false)
39 }
40
41 func CreateReadToken(c gig.Context) error {
42 return CreateToken(c, true)
43 }
44
45 func ListTokens(c gig.Context) error {
46
47 user, exist := db.GetUser(c.CertHash())
48 if !exist {
49 return c.NoContent(gig.StatusBadRequest, "Invalid username")
50 }
51
52 tokens, err := user.GetTokens()
53 if err != nil {
54 log.Println(err)
55 return c.NoContent(gig.StatusBadRequest, "Unexpected error")
56 }
57
58 data := struct {
59 Tokens []db.Token
60 Secure bool
61 }{
62 Tokens: tokens,
63 Secure: user.SecureGit,
64 }
65 return execT(c, "token.gmi", data)
66 }
67
68 func ToggleTokenAuth(c gig.Context) error {
69
70 user, exist := db.GetUser(c.CertHash())
71 if !exist {
72 return c.NoContent(gig.StatusBadRequest, "Invalid username")
73 }
74
75 err := user.ToggleSecure()
76 if err != nil {
77 log.Println(err)
78 return c.NoContent(gig.StatusBadRequest, "Unexpected error")
79 }
80
81 return tokenRedirect(c)
82 }
83
84 func RenewToken(c gig.Context) error {
85
86 user, exist := db.GetUser(c.CertHash())
87 if !exist {
88 return c.NoContent(gig.StatusBadRequest, "Invalid username")
89 }
90
91 id, err := strconv.Atoi(c.Param("token"))
92 if err != nil || user.RenewToken(id) != nil {
93 return c.NoContent(gig.StatusBadRequest, "Invalid token")
94 }
95
96 return tokenRedirect(c)
97 }
98
99 func DeleteToken(c gig.Context) error {
100
101 user, exist := db.GetUser(c.CertHash())
102 if !exist {
103 return c.NoContent(gig.StatusBadRequest, "Invalid username")
104 }
105
106 id, err := strconv.Atoi(c.Param("token"))
107 if err != nil || user.DeleteToken(id) != nil {
108 return c.NoContent(gig.StatusBadRequest, "Invalid token")
109 }
110
111 return tokenRedirect(c)
112 }
113