💾 Archived View for gemini.rmf-dev.com › repo › Vaati › Gemigit › files › ceb629cb442b60b7ef07041694… captured on 2024-02-05 at 09:47:31. Gemini links have been rewritten to link to archived content

View Raw

More Information

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

Go Back

0 package gmi

1

2 import (

3 "gemigit/db"

4 "gemigit/csrf"

5

6 "github.com/pitr/gig"

7 )

8

9 func groupRedirect(c gig.Context) error {

10 return c.NoContent(gig.StatusRedirectTemporary, "/account/" +

11 csrf.Token(c.CertHash()) + "/groups/" + c.Param("group"))

12 }

13

14 func groupsListRedirect(c gig.Context) error {

15 return c.NoContent(gig.StatusRedirectTemporary, "/account/" +

16 csrf.Token(c.CertHash()) + "/groups")

17 }

18

19 func isGroupOwner(c gig.Context) (int, error) {

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

21 if !exist {

22 return -1, c.NoContent(gig.StatusBadRequest,

23 "Invalid username")

24 }

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

26 if err != nil {

27 return -1, c.NoContent(gig.StatusBadRequest, err.Error())

28 }

29 owner, err := user.IsInGroupID(groupID)

30 if err != nil {

31 return -1, c.NoContent(gig.StatusBadRequest, err.Error())

32 }

33 if !owner {

34 return -1, c.NoContent(gig.StatusBadRequest,

35 "Permission denied")

36 }

37 return groupID, nil

38 }

39

40 func SetGroupDesc(c gig.Context) error {

41 query, err := c.QueryString()

42 if err != nil {

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

44 }

45 if query == "" {

46 return c.NoContent(gig.StatusInput, "Description")

47 }

48

49 id, err := isGroupOwner(c)

50 if err != nil {

51 return err

52 }

53

54 err = db.SetGroupDescription(id, query)

55 if err != nil {

56 return err

57 }

58 return groupRedirect(c)

59 }

60

61 func DeleteGroup(c gig.Context) error {

62 name, err := c.QueryString()

63 if err != nil {

64 return c.NoContent(gig.StatusBadRequest,

65 "Invalid input received")

66 }

67 if name == "" {

68 return c.NoContent(gig.StatusInput,

69 "To confirm type the group name")

70 }

71 if name != c.Param("group") {

72 return groupRedirect(c)

73 }

74 id, err := isGroupOwner(c)

75 if err != nil {

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

77 }

78 err = db.DeleteGroup(id)

79 if err != nil {

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

81 }

82 return groupsListRedirect(c)

83 }

84

85 func LeaveGroup(c gig.Context) (error) {

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

87 if !exist {

88 return c.NoContent(gig.StatusBadRequest,

89 "Invalid username")

90 }

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

92 if err != nil {

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

94 }

95 owner, err := user.IsInGroupID(groupID)

96 if err != nil {

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

98 }

99 if owner {

100 return c.NoContent(gig.StatusBadRequest,

101 "You cannot leave your own group")

102 }

103 err = db.DeleteMember(user.ID, groupID)

104 if err != nil {

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

106 }

107 return groupsListRedirect(c)

108 }

109

110 func RmFromGroup(c gig.Context) (error) {

111 groupID, err := isGroupOwner(c)

112 if err != nil {

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

114 }

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

116 if err != nil {

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

118 }

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

120 if !exist {

121 return c.NoContent(gig.StatusBadRequest,

122 "Invalid username")

123 }

124 if userID == user.ID {

125 return c.NoContent(gig.StatusBadRequest,

126 "You cannot remove yourself from your own group")

127 }

128 err = db.DeleteMember(userID, groupID)

129 if err != nil {

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

131 }

132 return groupRedirect(c)

133 }

134

135 func AddToGroup(c gig.Context) (error) {

136 query, err := c.QueryString()

137 if err != nil {

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

139 }

140 if query == "" {

141 return c.NoContent(gig.StatusInput, "Username")

142 }

143

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

145 if !exist {

146 return c.NoContent(gig.StatusBadRequest,

147 "Invalid username")

148 }

149

150 group := c.Param("group")

151 owner, err := user.IsInGroup(group)

152 if err != nil {

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

154 }

155 if !owner {

156 return c.NoContent(gig.StatusBadRequest, "Permission denied")

157 }

158

159 if err = user.AddUserToGroup(group, query); err != nil {

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

161 }

162 return groupRedirect(c)

163 }

164