💾 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

View Raw

More Information

-=-=-=-=-=-=-

Go Back

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