diff options
Diffstat (limited to 'OpenSim/Server/Handlers/Hypergrid')
-rw-r--r-- | OpenSim/Server/Handlers/Hypergrid/HGFriendsServerPostHandler.cs | 43 |
1 files changed, 41 insertions, 2 deletions
diff --git a/OpenSim/Server/Handlers/Hypergrid/HGFriendsServerPostHandler.cs b/OpenSim/Server/Handlers/Hypergrid/HGFriendsServerPostHandler.cs index dde7875..a83d0e8 100644 --- a/OpenSim/Server/Handlers/Hypergrid/HGFriendsServerPostHandler.cs +++ b/OpenSim/Server/Handlers/Hypergrid/HGFriendsServerPostHandler.cs | |||
@@ -88,6 +88,8 @@ namespace OpenSim.Server.Handlers.Hypergrid | |||
88 | case "newfriendship": | 88 | case "newfriendship": |
89 | return NewFriendship(request); | 89 | return NewFriendship(request); |
90 | 90 | ||
91 | case "deletefriendship": | ||
92 | return DeleteFriendship(request); | ||
91 | } | 93 | } |
92 | m_log.DebugFormat("[HGFRIENDS HANDLER]: unknown method {0} request {1}", method.Length, method); | 94 | m_log.DebugFormat("[HGFRIENDS HANDLER]: unknown method {0} request {1}", method.Length, method); |
93 | } | 95 | } |
@@ -143,11 +145,21 @@ namespace OpenSim.Server.Handlers.Hypergrid | |||
143 | 145 | ||
144 | // OK, can proceed | 146 | // OK, can proceed |
145 | FriendInfo friend = new FriendInfo(request); | 147 | FriendInfo friend = new FriendInfo(request); |
148 | UUID friendID; | ||
149 | string tmp = string.Empty; | ||
150 | if (!Util.ParseUniversalUserIdentifier(friend.Friend, out friendID, out tmp, out tmp, out tmp, out tmp)) | ||
151 | return FailureResult(); | ||
152 | |||
153 | m_log.DebugFormat("[HGFRIENDS HANDLER]: New friendship {0} {1}", friend.PrincipalID, friend.Friend); | ||
154 | |||
155 | // If the friendship already exists, return fail | ||
156 | FriendInfo[] finfos = m_FriendsService.GetFriends(friend.PrincipalID); | ||
157 | foreach (FriendInfo finfo in finfos) | ||
158 | if (finfo.Friend.StartsWith(friendID.ToString())) | ||
159 | return FailureResult(); | ||
146 | 160 | ||
147 | // the user needs to confirm when he gets home | 161 | // the user needs to confirm when he gets home |
148 | bool success = m_FriendsService.StoreFriend(friend.PrincipalID.ToString(), friend.Friend, 0); | 162 | bool success = m_FriendsService.StoreFriend(friend.PrincipalID.ToString(), friend.Friend, 0); |
149 | //if (success) | ||
150 | // m_FriendsService.StoreFriend(friend.Friend, friend.PrincipalID.ToString(), 1); | ||
151 | 163 | ||
152 | if (success) | 164 | if (success) |
153 | return SuccessResult(); | 165 | return SuccessResult(); |
@@ -155,6 +167,33 @@ namespace OpenSim.Server.Handlers.Hypergrid | |||
155 | return FailureResult(); | 167 | return FailureResult(); |
156 | } | 168 | } |
157 | 169 | ||
170 | byte[] DeleteFriendship(Dictionary<string, object> request) | ||
171 | { | ||
172 | FriendInfo friend = new FriendInfo(request); | ||
173 | string secret = string.Empty; | ||
174 | if (request.ContainsKey("SECRET")) | ||
175 | secret = request["SECRET"].ToString(); | ||
176 | |||
177 | if (secret == string.Empty) | ||
178 | return FailureResult(); | ||
179 | |||
180 | FriendInfo[] finfos = m_FriendsService.GetFriends(friend.PrincipalID); | ||
181 | foreach (FriendInfo finfo in finfos) | ||
182 | { | ||
183 | // We check the secret here | ||
184 | if (finfo.Friend.StartsWith(friend.Friend) && finfo.Friend.EndsWith(secret)) | ||
185 | { | ||
186 | m_log.DebugFormat("[HGFRIENDS HANDLER]: Delete friendship {0} {1}", friend.PrincipalID, friend.Friend); | ||
187 | m_FriendsService.Delete(friend.PrincipalID, finfo.Friend); | ||
188 | m_FriendsService.Delete(finfo.Friend, friend.PrincipalID.ToString()); | ||
189 | |||
190 | return SuccessResult(); | ||
191 | } | ||
192 | } | ||
193 | |||
194 | return FailureResult(); | ||
195 | } | ||
196 | |||
158 | #endregion | 197 | #endregion |
159 | 198 | ||
160 | #region Misc | 199 | #region Misc |