💾 Archived View for gemini.rmf-dev.com › repo › Vaati › Gemigit › files › 8ec36c1b476099591aa3c7c2a0… captured on 2023-04-26 at 13:22:03. Gemini links have been rewritten to link to archived content

View Raw

More Information

⬅️ Previous capture (2023-03-20)

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

0 package gmi

1

2 import (

3 "gemigit/db"

4 "github.com/pitr/gig"

5 )

6

7 func privilegeUpdate(privilege int, first bool) int {

8 if first {

9 return (privilege + 1)%3

10 }

11 if privilege == 0 {

12 return 2

13 }

14 return privilege - 1

15 }

16

17 func privilegeToString(privilege int) string {

18 switch (privilege) {

19 case 0:

20 return "none"

21 case 1:

22 return "read"

23 case 2:

24 return "read and write"

25 }

26 return "Invalid value"

27 }

28

29 func accessFirstOption(privilege int) string {

30 switch (privilege) {

31 case 0:

32 return "Grant read access"

33 case 1:

34 return "Grant write access"

35 default:

36 return "Revoke read and write access"

37 }

38 }

39

40 func accessSecondOption(privilege int) string {

41 switch (privilege) {

42 case 0:

43 return "Grant read and write access"

44 case 1:

45 return "Revoke read access"

46 default:

47 return "Revoke write access"

48 }

49 }

50

51 func changeGroupAccess(user db.User, repo string,

52 name string, first bool) error {

53 r, err := user.GetRepo(repo)

54 if err != nil {

55 return err

56 }

57 groupID, err := db.GetGroupID(name)

58 if err != nil {

59 return err

60 }

61 privilege, err := db.GetGroupAccess(r.RepoID, groupID)

62 if err != nil {

63 return err

64 }

65 privilege = privilegeUpdate(privilege, first)

66 err = db.SetGroupAccess(r.RepoID, groupID, privilege)

67 return err

68 }

69

70 func groupAccessOption(c gig.Context, first bool) error {

71 user, exist := db.GetUser(c.CertHash())

72 if !exist {

73 return c.NoContent(gig.StatusBadRequest, "Invalid group")

74 }

75 err := changeGroupAccess(user, c.Param("repo"),

76 c.Param("group"), first)

77 if err != nil {

78 return c.NoContent(gig.StatusBadRequest, err.Error())

79 }

80 return c.NoContent(gig.StatusRedirectTemporary,

81 "/account/repo/" + c.Param("repo") + "/access")

82 }

83

84 func GroupAccessFirstOption(c gig.Context) error {

85 return groupAccessOption(c, true)

86 }

87

88 func GroupAccessSecondOption(c gig.Context) error {

89 return groupAccessOption(c, false)

90 }

91

92 func changeUserAccess(user db.User, repo string,

93 name string, first bool) error {

94 r, err := user.GetRepo(repo)

95 if err != nil {

96 return err

97 }

98 userID, err := db.GetUserID(name)

99 if err != nil {

100 return err

101 }

102 privilege, err := db.GetUserAccess(r.RepoID, userID)

103 if err != nil {

104 return err

105 }

106 privilege = privilegeUpdate(privilege, first)

107 err = db.SetUserAccess(r.RepoID, userID, privilege)

108 return err

109 }

110

111 func userAccessOption(c gig.Context, first bool) error {

112 user, exist := db.GetUser(c.CertHash())

113 if !exist {

114 return c.NoContent(gig.StatusBadRequest, "Invalid username")

115 }

116 err := changeUserAccess(user, c.Param("repo"), c.Param("user"), first)

117 if err != nil {

118 return c.NoContent(gig.StatusBadRequest, err.Error())

119 }

120 return c.NoContent(gig.StatusRedirectTemporary,

121 "/account/repo/" + c.Param("repo") + "/access")

122 }

123

124 func UserAccessFirstOption(c gig.Context) error {

125 return userAccessOption(c, true)

126 }

127

128 func UserAccessSecondOption(c gig.Context) error {

129 return userAccessOption(c, false)

130 }

131

132 func addAcess(c gig.Context, param string) (string, db.User, db.Repo, error) {

133 query, err := c.QueryString()

134 if err != nil {

135 return "", db.User{}, db.Repo{},

136 c.NoContent(gig.StatusBadRequest, err.Error())

137 }

138 if query == "" {

139 return "", db.User{}, db.Repo{},

140 c.NoContent(gig.StatusInput, param)

141 }

142 user, exist := db.GetUser(c.CertHash())

143 if !exist {

144 return query, user, db.Repo{},

145 c.NoContent(gig.StatusBadRequest, "Invalid entry")

146 }

147

148 repo, err := user.GetRepo(c.Param("repo"))

149 if err != nil {

150 return query, user, db.Repo{},

151 c.NoContent(gig.StatusBadRequest,

152 "Repository not found")

153 }

154 return query, user, repo, nil

155 }

156

157 func AddUserAccess(c gig.Context) error {

158 query, user, repo, err := addAcess(c, "User")

159 if err != nil {

160 return err

161 }

162 err = db.AddUserAccess(user.ID, repo.RepoID, query)

163 if err != nil {

164 return c.NoContent(gig.StatusBadRequest,

165 "Invalid user")

166 }

167 return c.NoContent(gig.StatusRedirectTemporary,

168 "/account/repo/" + repo.Name + "/access")

169 }

170

171 func AddGroupAccess(c gig.Context) error {

172 query, _, repo, err := addAcess(c, "Group")

173 if err != nil {

174 return err

175 }

176 err = db.AddGroupAccess(repo.RepoID, query)

177 if err != nil {

178 return c.NoContent(gig.StatusBadRequest,

179 "Invalid user")

180 }

181 return c.NoContent(gig.StatusRedirectTemporary,

182 "/account/repo/" + repo.Name + "/access")

183 }

184

185 func RemoveUserAccess(c gig.Context) error {

186 user, exist := db.GetUser(c.CertHash())

187 if !exist {

188 return c.NoContent(gig.StatusBadRequest, "Invalid username")

189 }

190 userID, err := db.GetUserID(c.Param("user"))

191 if err != nil {

192 return c.NoContent(gig.StatusBadRequest,

193 "User not found")

194 }

195 repo, err := user.GetRepo(c.Param("repo"))

196 err = db.RemoveUserAccess(repo.RepoID, userID)

197 if err != nil {

198 return c.NoContent(gig.StatusBadRequest,

199 "User doesn't have access")

200 }

201 return c.NoContent(gig.StatusRedirectTemporary,

202 "/account/repo/" + repo.Name + "/access")

203 }

204

205 func RemoveGroupAccess(c gig.Context) error {

206 user, exist := db.GetUser(c.CertHash())

207 if !exist {

208 return c.NoContent(gig.StatusBadRequest, "Invalid username")

209 }

210 groupID, err := db.GetGroupID(c.Param("group"))

211 if err != nil {

212 return c.NoContent(gig.StatusBadRequest,

213 "Group not found")

214 }

215 repo, err := user.GetRepo(c.Param("repo"))

216 err = db.RemoveGroupAccess(repo.RepoID, groupID)

217 if err != nil {

218 return c.NoContent(gig.StatusBadRequest,

219 "Group doesn't have access")

220 }

221 return c.NoContent(gig.StatusRedirectTemporary,

222 "/account/repo/" + repo.Name + "/access")

223 }

224