@@ -224,12 +224,41 @@ type GetSelf =
224
224
:> " self"
225
225
:> Get '[Servant. JSON ] Public. SelfProfile
226
226
227
+ -- See Note [document responses]
228
+ -- The responses looked like this:
229
+ -- Doc.returns (Doc.ref Public.modelUserHandleInfo)
230
+ -- Doc.response 200 "Handle info" Doc.end
231
+ -- Doc.errorResponse handleNotFound
232
+ type GetHandleInfoUnqualified =
233
+ Summary " Get information on a user handle"
234
+ :> ZAuthServant
235
+ :> " users"
236
+ :> " handles"
237
+ :> Capture' '[Description " The user handle" ] " handle" Handle
238
+ :> Get '[Servant. JSON ] Public. UserHandleInfo
239
+
240
+ -- See Note [document responses]
241
+ -- The responses looked like this:
242
+ -- Doc.returns (Doc.ref Public.modelUserHandleInfo)
243
+ -- Doc.response 200 "Handle info" Doc.end
244
+ -- Doc.errorResponse handleNotFound
245
+ type GetHandleInfoQualified =
246
+ Summary " Get information on a user handle"
247
+ :> ZAuthServant
248
+ :> " users"
249
+ :> " handles"
250
+ :> Capture " domain" Domain
251
+ :> Capture' '[Description " The user handle" ] " handle" Handle
252
+ :> Get '[Servant. JSON ] Public. UserHandleInfo
253
+
227
254
type OutsideWorldAPI =
228
255
CheckUserExistsUnqualified
229
256
:<|> CheckUserExistsQualified
230
257
:<|> GetUserUnqualified
231
258
:<|> GetUserQualified
232
259
:<|> GetSelf
260
+ :<|> GetHandleInfoUnqualified
261
+ :<|> GetHandleInfoQualified
233
262
234
263
type SwaggerDocsAPI = " api" :> SwaggerSchemaUI " swagger-ui" " swagger.json"
235
264
@@ -253,6 +282,8 @@ servantSitemap =
253
282
:<|> getUserUnqualifiedH
254
283
:<|> getUserH
255
284
:<|> getSelf
285
+ :<|> getHandleInfoUnqualifiedH
286
+ :<|> getHandleInfoH
256
287
257
288
-- Note [ephemeral user sideeffect]
258
289
-- If the user is ephemeral and expired, it will be removed upon calling
@@ -287,18 +318,7 @@ sitemap o = do
287
318
Doc. errorResponse invalidHandle
288
319
Doc. errorResponse handleNotFound
289
320
290
- get " /users/handles/:handle" (continue getHandleInfoH) $
291
- accept " application" " json"
292
- .&. zauthUserId
293
- .&. capture " handle"
294
- document " GET" " getUserHandleInfo" $ do
295
- Doc. summary " Get information on a user handle"
296
- Doc. parameter Doc. Path " handle" Doc. bytes' $
297
- Doc. description " The user handle"
298
- Doc. returns (Doc. ref Public. modelUserHandleInfo)
299
- Doc. response 200 " Handle info" Doc. end
300
- Doc. errorResponse handleNotFound
301
-
321
+ -- some APIs moved to servant
302
322
-- end User Handle API
303
323
304
324
-- If the user is ephemeral and expired, it will be removed, see 'Brig.API.User.userGC'.
@@ -1297,23 +1317,34 @@ checkHandlesH (_ ::: _ ::: req) = do
1297
1317
free <- lift $ API. checkHandles handles (fromRange num)
1298
1318
return $ json (free :: [Handle ])
1299
1319
1300
- getHandleInfoH :: JSON ::: UserId ::: Handle -> Handler Response
1301
- getHandleInfoH (_ ::: self ::: handle) =
1302
- maybe (setStatus status404 empty) json
1303
- <$> getHandleInfo self handle
1320
+ getHandleInfoUnqualifiedH :: UserId -> Handle -> Handler Public. UserHandleInfo
1321
+ getHandleInfoUnqualifiedH self handle = do
1322
+ domain <- API. viewFederationDomain
1323
+ getHandleInfoH self domain handle
1324
+
1325
+ getHandleInfoH :: UserId -> Domain -> Handle -> Handler Public. UserHandleInfo
1326
+ getHandleInfoH self domain handle =
1327
+ ifNothing (notFound " handle not found" )
1328
+ =<< getHandleInfo self (Qualified handle domain)
1304
1329
1305
1330
-- FUTUREWORK: use 'runMaybeT' to simplify this.
1306
- getHandleInfo :: UserId -> Handle -> Handler (Maybe Public. UserHandleInfo )
1331
+ getHandleInfo :: UserId -> Qualified Handle -> Handler (Maybe Public. UserHandleInfo )
1307
1332
getHandleInfo self handle = do
1308
- ownerProfile <- do
1309
- -- FUTUREWORK(federation, #1268): resolve qualified handles, too
1310
- domain <- viewFederationDomain
1311
- maybeOwnerId <- fmap (flip Qualified domain) <$> (lift $ API. lookupHandle handle)
1312
- case maybeOwnerId of
1313
- Just ownerId -> lift $ API. lookupProfile self ownerId
1314
- Nothing -> return Nothing
1315
- owner <- filterHandleResults self (maybeToList ownerProfile)
1316
- return $ Public. UserHandleInfo . Public. profileId <$> listToMaybe owner
1333
+ domain <- API. viewFederationDomain
1334
+ if _qDomain handle == domain
1335
+ then getLocalHandleInfo domain
1336
+ else getRemoteHandleInfo
1337
+ where
1338
+ getLocalHandleInfo domain = do
1339
+ maybeOwnerId <- lift $ API. lookupHandle (_qLocalPart handle)
1340
+ case maybeOwnerId of
1341
+ Nothing -> return Nothing
1342
+ Just ownerId -> do
1343
+ ownerProfile <- lift $ API. lookupProfile self (Qualified ownerId domain)
1344
+ owner <- filterHandleResults self (maybeToList ownerProfile)
1345
+ return $ Public. UserHandleInfo . Public. profileId <$> listToMaybe owner
1346
+ -- FUTUREWORK: Federate with remote backends
1347
+ getRemoteHandleInfo = return Nothing
1317
1348
1318
1349
changeHandleH :: UserId ::: ConnId ::: JsonRequest Public. HandleUpdate -> Handler Response
1319
1350
changeHandleH (u ::: conn ::: req) = do
0 commit comments