Skip to content

Commit d6eae9a

Browse files
committed
delete /push/tokens/:pid
1 parent 292d7a1 commit d6eae9a

File tree

5 files changed

+45
-8
lines changed

5 files changed

+45
-8
lines changed

libs/wire-api/src/Wire/API/Error/Gundeck.hs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ data GundeckError
2525
| AddTokenErrorInvalid
2626
| AddTokenErrorTooLong
2727
| AddTokenErrorMetadataTooLong
28+
| TokenNotFound
2829

2930
instance KnownError (MapError e) => IsSwaggerError (e :: GundeckError) where
3031
addToSwagger = addStaticErrorToSwagger @(MapError e)
@@ -38,3 +39,5 @@ type instance MapError 'AddTokenErrorInvalid = 'StaticError 404 "invalid-token"
3839
type instance MapError 'AddTokenErrorTooLong = 'StaticError 413 "token-too-long" "Push token length must be < 8192 for GCM or 400 for APNS"
3940

4041
type instance MapError 'AddTokenErrorMetadataTooLong = 'StaticError 413 "metadata-too-long" "Tried to add token to endpoint resulting in metadata length > 2048"
42+
43+
type instance MapError 'TokenNotFound = 'StaticError 404 "not-found" "Push token not found"

libs/wire-api/src/Wire/API/Push/V2/Token.hs

Lines changed: 21 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,8 @@ module Wire.API.Push.V2.Token
3838
AddTokenError (..),
3939
AddTokenSuccess (..),
4040
AddTokenResponses,
41+
DeleteTokenError (..),
42+
DeleteTokenResponses,
4143

4244
-- * Swagger
4345
modelPushToken,
@@ -205,7 +207,7 @@ instance ToSchema AppName where
205207
makeLenses ''PushToken
206208

207209
--------------------------------------------------------------------------------
208-
-- API types
210+
-- Add token types
209211

210212
type AddTokenErrorResponses =
211213
'[ ErrorResponse 'E.AddTokenErrorNoBudget,
@@ -244,3 +246,21 @@ instance AsHeaders '[Token] PushToken AddTokenSuccess where
244246
instance (res ~ AddTokenResponses) => AsUnion res (Either AddTokenError AddTokenSuccess) where
245247
toUnion = eitherToUnion (toUnion @AddTokenErrorResponses) (Z . I)
246248
fromUnion = eitherFromUnion (fromUnion @AddTokenErrorResponses) (unI . unZ)
249+
250+
--------------------------------------------------------------------------------
251+
-- Delete token types
252+
253+
data DeleteTokenError = DeleteTokenErrorNotFound
254+
deriving (Generic)
255+
256+
-- deriving (AsUnion DeleteTokenErrorResponses) via GenericAsUnion DeleteTokenErrorResponses DeleteTokenError
257+
258+
-- instance GSOP.Generic DeleteTokenError
259+
260+
type DeleteTokenErrorResponses = '[ErrorResponse 'E.TokenNotFound]
261+
262+
type DeleteTokenResponses = DeleteTokenErrorResponses .++ '[RespondEmpty 204 "Push token unregistered"]
263+
264+
-- instance (res ~ DeleteTokenResponses) => AsUnion res (Maybe DeleteTokenError) where
265+
-- toUnion = maybeToUnion (toUnion @DeleteTokenErrorResponses)
266+
-- fromUnion = maybeFromUnion (fromUnion @DeleteTokenErrorResponses)

libs/wire-api/src/Wire/API/Routes/Public/Gundeck.hs

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,15 @@ type GundeckAPI =
3838
:> ReqBody '[JSON] PushToken
3939
:> MultiVerb 'POST '[JSON] AddTokenResponses (Either AddTokenError AddTokenSuccess)
4040
)
41+
:<|> Named
42+
"delete-push-token"
43+
( Summary "Unregister a native push token"
44+
:> ZUser
45+
:> "push"
46+
:> "tokens"
47+
:> Capture' '[Description "The push token to delete"] "pid" Token
48+
:> MultiVerb 'DELETE '[JSON] DeleteTokenResponses (Maybe DeleteTokenError)
49+
)
4150

4251
swaggerDoc :: Swagger.Swagger
4352
swaggerDoc = toSwagger (Proxy @GundeckAPI)

services/gundeck/src/Gundeck/API/Public.hs

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@ import Network.Wai.Predicate hiding (setStatus)
4040
import Network.Wai.Routing hiding (route)
4141
import Network.Wai.Utilities as Wai
4242
import Network.Wai.Utilities.Swagger
43-
import Servant (HasServer (..))
43+
import Servant (HasServer (..), (:<|>) (..))
4444
import Wire.API.Notification (NotificationId)
4545
import qualified Wire.API.Notification as Public
4646
import qualified Wire.API.Push.Token as Public
@@ -52,7 +52,9 @@ import qualified Wire.API.Swagger as Public.Swagger
5252
-- Servant API
5353

5454
servantSitemap :: ServerT GundeckAPI Gundeck
55-
servantSitemap = Named @"register-push-token" addToken
55+
servantSitemap =
56+
Named @"register-push-token" addToken
57+
:<|> Named @"delete-push-token" deleteToken
5658

5759
--------------------------------------------------------------------------------
5860
-- Wai Routes API
@@ -158,6 +160,10 @@ deleteTokenH :: UserId ::: Public.Token ::: JSON -> Gundeck Response
158160
deleteTokenH (uid ::: tok ::: _) =
159161
setStatus status204 empty <$ Push.deleteToken uid tok
160162

163+
deleteToken :: UserId -> Public.Token -> Gundeck (Maybe Public.DeleteTokenError)
164+
deleteToken _uid _tok =
165+
pure Nothing
166+
161167
listTokensH :: UserId ::: JSON -> Gundeck Response
162168
listTokensH (uid ::: _) =
163169
setStatus status200 . json @Public.PushTokenList <$> Push.listTokens uid

services/gundeck/src/Gundeck/Push.hs

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -542,12 +542,11 @@ updateEndpoint uid t arn e = do
542542
~~ "arn" .= toText r
543543
~~ msg (val m)
544544

545-
deleteToken :: UserId -> Token -> Gundeck ()
545+
deleteToken :: UserId -> Token -> Gundeck (Maybe Public.DeleteTokenError)
546546
deleteToken uid tok = do
547-
as <- filter (\x -> x ^. addrToken == tok) <$> Data.lookup uid Data.LocalQuorum
548-
when (null as) $
549-
throwM (mkError status404 "not-found" "Push token not found")
550-
Native.deleteTokens as Nothing
547+
filter (\x -> x ^. addrToken == tok) <$> Data.lookup uid Data.LocalQuorum >>= \case
548+
[] -> pure (Just Public.DeleteTokenErrorNotFound)
549+
as -> Native.deleteTokens as Nothing >> pure Nothing
551550

552551
listTokens :: UserId -> Gundeck PushTokenList
553552
listTokens uid = PushTokenList . map (^. addrPushToken) <$> Data.lookup uid Data.LocalQuorum

0 commit comments

Comments
 (0)