💾 Archived View for gemini.rmf-dev.com › repo › Vaati › Gemigit › files › e59b6ad4eb30027abad339c5c4… captured on 2023-04-19 at 23:34:02. Gemini links have been rewritten to link to archived content

View Raw

More Information

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

0 package gmi

1

2 import (

3 "gemigit/db"

4 "github.com/pitr/gig"

5 )

6

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

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

9 if !exist {

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

11 "Invalid username")

12 }

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

14 if err != nil {

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

16 }

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

18 if err != nil {

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

20 }

21 if !owner {

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

23 "Permission denied")

24 }

25 return groupID, nil

26 }

27

28 func SetGroupDesc(c gig.Context) error {

29 query, err := c.QueryString()

30 if err != nil {

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

32 }

33 if query == "" {

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

35 }

36

37 id, err := isGroupOwner(c)

38 if err != nil {

39 return err

40 }

41

42 err = db.SetGroupDescription(id, query)

43 if err != nil {

44 return err

45 }

46 return c.NoContent(gig.StatusRedirectTemporary,

47 "/account/groups/" + c.Param("group"))

48 }

49

50 func DeleteGroup(c gig.Context) error {

51 name, err := c.QueryString()

52 if err != nil {

53 return c.NoContent(gig.StatusBadRequest,

54 "Invalid input received")

55 }

56 if name == "" {

57 return c.NoContent(gig.StatusInput,

58 "To confirm type the group name")

59 }

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

61 return c.NoContent(gig.StatusRedirectTemporary,

62 "/account/groups/" + c.Param("group"))

63 }

64 id, err := isGroupOwner(c)

65 if err != nil {

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

67 }

68 err = db.DeleteGroup(id)

69 if err != nil {

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

71 }

72 return c.NoContent(gig.StatusRedirectTemporary, "/account/groups")

73 }

74

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

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

77 if !exist {

78 return c.NoContent(gig.StatusBadRequest,

79 "Invalid username")

80 }

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

82 if err != nil {

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

84 }

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

86 if err != nil {

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

88 }

89 if owner {

90 return c.NoContent(gig.StatusBadRequest,

91 "You cannot leave your own group")

92 }

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

94 if err != nil {

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

96 }

97 return c.NoContent(gig.StatusRedirectTemporary, "/account/groups")

98 }

99

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

101 groupID, err := isGroupOwner(c)

102 if err != nil {

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

104 }

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

106 if err != nil {

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

108 }

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

110 if !exist {

111 return c.NoContent(gig.StatusBadRequest,

112 "Invalid username")

113 }

114 if userID == user.ID {

115 return c.NoContent(gig.StatusBadRequest,

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

117 }

118 err = db.DeleteMember(userID, groupID)

119 if err != nil {

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

121 }

122 return c.NoContent(gig.StatusRedirectTemporary,

123 "/account/groups/" + c.Param("group"))

124 }

125

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

127 query, err := c.QueryString()

128 if err != nil {

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

130 }

131 if query == "" {

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

133 }

134

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

136 if !exist {

137 return c.NoContent(gig.StatusBadRequest,

138 "Invalid username")

139 }

140

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

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

143 if err != nil {

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

145 }

146 if !owner {

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

148 }

149

150 if err = db.AddUserToGroup(group, query); err != nil {

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

152 }

153 return c.NoContent(gig.StatusRedirectTemporary,

154 "/account/groups/" + group)

155 }

156