Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
14 changes: 0 additions & 14 deletions changelog.d/5-internal/WPB-663

This file was deleted.

3 changes: 0 additions & 3 deletions libs/types-common/src/Data/Range.hs
Original file line number Diff line number Diff line change
Expand Up @@ -152,9 +152,6 @@ numRangedSchemaDocModifier n m = S.schema %~ ((S.minimum_ ?~ fromIntegral n) . (

instance S.HasSchema d S.Schema => HasRangedSchemaDocModifier d [a] where rangedSchemaDocModifier _ = listRangedSchemaDocModifier

-- Sets are effectively lists, so we can reuse that code.
instance S.HasSchema d S.Schema => HasRangedSchemaDocModifier d (Set a) where rangedSchemaDocModifier _ = listRangedSchemaDocModifier

instance S.HasSchema d S.Schema => HasRangedSchemaDocModifier d Text where rangedSchemaDocModifier _ = stringRangedSchemaDocModifier

instance S.HasSchema d S.Schema => HasRangedSchemaDocModifier d String where rangedSchemaDocModifier _ = stringRangedSchemaDocModifier
Expand Down
115 changes: 1 addition & 114 deletions libs/wire-api/src/Wire/API/Provider/Service.hs
Original file line number Diff line number Diff line change
Expand Up @@ -47,7 +47,6 @@ module Wire.API.Provider.Service

-- * UpdateServiceWhitelist
UpdateServiceWhitelist (..),
UpdateServiceWhitelistResp (..),
)
where

Expand All @@ -64,16 +63,14 @@ import Data.List1 (List1)
import Data.Misc (HttpsUrl (..), PlainTextPassword6)
import Data.PEM (PEM, pemParseBS, pemWriteLBS)
import Data.Proxy
import Data.Range (Range, fromRange, rangedSchema)
import Data.SOP
import Data.Range (Range)
import Data.Schema
import Data.Swagger qualified as S
import Data.Text qualified as Text
import Data.Text.Ascii
import Data.Text.Encoding qualified as Text
import Imports
import Wire.API.Provider.Service.Tag (ServiceTag (..))
import Wire.API.Routes.MultiVerb
import Wire.API.User.Profile (Asset, Name)
import Wire.Arbitrary (Arbitrary (arbitrary), GenericUniform (..))

Expand Down Expand Up @@ -208,22 +205,6 @@ data Service = Service
}
deriving stock (Eq, Show, Generic)
deriving (Arbitrary) via (GenericUniform Service)
deriving (S.ToSchema) via (Schema Service)

instance ToSchema Service where
schema =
object "Service" $
Service
<$> serviceId .= field "id" schema
<*> serviceName .= field "name" schema
<*> serviceSummary .= field "summary" schema
<*> serviceDescr .= field "description" schema
<*> serviceUrl .= field "base_url" schema
<*> serviceTokens .= field "auth_tokens" schema
<*> serviceKeys .= field "public_keys" schema
<*> serviceAssets .= field "assets" (array schema)
<*> serviceTags .= field "tags" (set schema)
<*> serviceEnabled .= field "enabled" schema

instance ToJSON Service where
toJSON s =
Expand Down Expand Up @@ -284,7 +265,6 @@ data ServiceProfile = ServiceProfile
}
deriving stock (Eq, Show, Generic)
deriving (Arbitrary) via (GenericUniform ServiceProfile)
deriving (S.ToSchema) via (Schema ServiceProfile)

instance ToJSON ServiceProfile where
toJSON s =
Expand All @@ -311,19 +291,6 @@ instance FromJSON ServiceProfile where
<*> o A..: "tags"
<*> o A..: "enabled"

instance ToSchema ServiceProfile where
schema =
object "ServiceProfile" $
ServiceProfile
<$> serviceProfileId .= field "id" schema
<*> serviceProfileProvider .= field "provider" schema
<*> serviceProfileName .= field "name" schema
<*> serviceProfileSummary .= field "summary" schema
<*> serviceProfileDescr .= field "description" schema
<*> serviceProfileAssets .= field "assets" (array schema)
<*> serviceProfileTags .= field "tags" (set schema)
<*> serviceProfileEnabled .= field "enabled" schema

--------------------------------------------------------------------------------
-- ServiceProfilePage

Expand All @@ -333,7 +300,6 @@ data ServiceProfilePage = ServiceProfilePage
}
deriving stock (Eq, Show, Generic)
deriving (Arbitrary) via (GenericUniform ServiceProfilePage)
deriving (S.ToSchema) via (Schema ServiceProfilePage)

instance ToJSON ServiceProfilePage where
toJSON p =
Expand All @@ -348,13 +314,6 @@ instance FromJSON ServiceProfilePage where
<$> o A..: "has_more"
<*> o A..: "services"

instance ToSchema ServiceProfilePage where
schema =
object "ServiceProfile" $
ServiceProfilePage
<$> serviceProfilePageHasMore .= field "has_more" schema
<*> serviceProfilePageResults .= field "services" (array schema)

--------------------------------------------------------------------------------
-- NewService

Expand All @@ -371,20 +330,6 @@ data NewService = NewService
}
deriving stock (Eq, Show, Generic)
deriving (Arbitrary) via (GenericUniform NewService)
deriving (S.ToSchema) via (Schema NewService)

instance ToSchema NewService where
schema =
object "NewService" $
NewService
<$> newServiceName .= field "name" schema
<*> newServiceSummary .= field "summary" schema
<*> newServiceDescr .= field "description" schema
<*> newServiceUrl .= field "base_url" schema
<*> newServiceKey .= field "public_key" schema
<*> newServiceToken .= maybe_ (optField "auth_token" schema)
<*> newServiceAssets .= field "assets" (array schema)
<*> newServiceTags .= field "tags" (fromRange .= rangedSchema (set schema))

instance ToJSON NewService where
toJSON s =
Expand Down Expand Up @@ -421,14 +366,6 @@ data NewServiceResponse = NewServiceResponse
}
deriving stock (Eq, Show, Generic)
deriving (Arbitrary) via (GenericUniform NewServiceResponse)
deriving (S.ToSchema) via (Schema NewServiceResponse)

instance ToSchema NewServiceResponse where
schema =
object "NewServiceResponse" $
NewServiceResponse
<$> rsNewServiceId .= field "id" schema
<*> rsNewServiceToken .= maybe_ (optField "auth_token" schema)

instance ToJSON NewServiceResponse where
toJSON r =
Expand Down Expand Up @@ -456,17 +393,6 @@ data UpdateService = UpdateService
}
deriving stock (Eq, Show, Generic)
deriving (Arbitrary) via (GenericUniform UpdateService)
deriving (S.ToSchema) via (Schema UpdateService)

instance ToSchema UpdateService where
schema =
object "UpdateService" $
UpdateService
<$> updateServiceName .= maybe_ (optField "name" schema)
<*> updateServiceSummary .= maybe_ (optField "summary" schema)
<*> updateServiceDescr .= maybe_ (optField "description" schema)
<*> updateServiceAssets .= maybe_ (optField "assets" $ array schema)
<*> updateServiceTags .= maybe_ (optField "tags" (fromRange .= rangedSchema (set schema)))

instance ToJSON UpdateService where
toJSON u =
Expand Down Expand Up @@ -501,17 +427,6 @@ data UpdateServiceConn = UpdateServiceConn
}
deriving stock (Eq, Show, Generic)
deriving (Arbitrary) via (GenericUniform UpdateServiceConn)
deriving (S.ToSchema) via (Schema UpdateServiceConn)

instance ToSchema UpdateServiceConn where
schema =
object "UpdateServiceConn" $
UpdateServiceConn
<$> updateServiceConnPassword .= field "password" schema
<*> updateServiceConnUrl .= maybe_ (optField "base_url" schema)
<*> updateServiceConnKeys .= maybe_ (optField "public_keys" (fromRange .= rangedSchema (array schema)))
<*> updateServiceConnTokens .= maybe_ (optField "auth_tokens" (fromRange .= rangedSchema (array schema)))
<*> updateServiceConnEnabled .= maybe_ (optField "enabled" schema)

mkUpdateServiceConn :: PlainTextPassword6 -> UpdateServiceConn
mkUpdateServiceConn pw = UpdateServiceConn pw Nothing Nothing Nothing Nothing
Expand Down Expand Up @@ -543,13 +458,6 @@ newtype DeleteService = DeleteService
{deleteServicePassword :: PlainTextPassword6}
deriving stock (Eq, Show)
deriving newtype (Arbitrary)
deriving (S.ToSchema) via (Schema DeleteService)

instance ToSchema DeleteService where
schema =
object "DeleteService" $
DeleteService
<$> deleteServicePassword .= field "password" schema

instance ToJSON DeleteService where
toJSON d =
Expand All @@ -571,15 +479,6 @@ data UpdateServiceWhitelist = UpdateServiceWhitelist
}
deriving stock (Eq, Show, Generic)
deriving (Arbitrary) via (GenericUniform UpdateServiceWhitelist)
deriving (S.ToSchema) via (Schema UpdateServiceWhitelist)

instance ToSchema UpdateServiceWhitelist where
schema =
object "UpdateServiceWhitelist" $
UpdateServiceWhitelist
<$> updateServiceWhitelistProvider .= field "provider" schema
<*> updateServiceWhitelistService .= field "id" schema
<*> updateServiceWhitelistStatus .= field "whitelisted" schema

instance ToJSON UpdateServiceWhitelist where
toJSON u =
Expand All @@ -595,15 +494,3 @@ instance FromJSON UpdateServiceWhitelist where
<$> o A..: "provider"
<*> o A..: "id"
<*> o A..: "whitelisted"

data UpdateServiceWhitelistResp
= UpdateServiceWhitelistRespChanged
| UpdateServiceWhitelistRespUnchanged

-- basically the same as the instance for CheckBlacklistResponse
instance AsUnion '[RespondEmpty 200 "UpdateServiceWhitelistRespChanged", RespondEmpty 204 "UpdateServiceWhitelistRespUnchanged"] UpdateServiceWhitelistResp where
toUnion UpdateServiceWhitelistRespChanged = Z (I ())
toUnion UpdateServiceWhitelistRespUnchanged = S (Z (I ()))
fromUnion (Z (I ())) = UpdateServiceWhitelistRespChanged
fromUnion (S (Z (I ()))) = UpdateServiceWhitelistRespUnchanged
fromUnion (S (S x)) = case x of {}
67 changes: 1 addition & 66 deletions libs/wire-api/src/Wire/API/Provider/Service/Tag.hs
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
{-# LANGUAGE GeneralizedNewtypeDeriving #-}
{-# OPTIONS_GHC -Wno-orphans #-}

-- This file is part of the Wire Server implementation.
--
Expand Down Expand Up @@ -40,30 +39,18 @@ module Wire.API.Provider.Service.Tag
)
where

import Control.Lens (Prism', prism)
import Data.Aeson (FromJSON (parseJSON), ToJSON (toJSON))
import Data.Aeson qualified as A
import Data.Aeson qualified as JSON
import Data.Attoparsec.ByteString (IResult (..), parse)
import Data.ByteString (toStrict)
import Data.ByteString.Builder qualified as BB
import Data.ByteString.Char8 qualified as C8
import Data.ByteString.Conversion
import Data.Range (Range, fromRange, rangedSchema)
import Data.Range (Range, fromRange)
import Data.Range qualified as Range
import Data.Schema
import Data.Set qualified as Set
import Data.Swagger (ParamSchema (_paramSchemaEnum, _paramSchemaType), SwaggerType (SwaggerString), ToParamSchema (toParamSchema))
import Data.Swagger qualified as S
import Data.Text qualified as T
import Data.Text.Encoding (decodeUtf8)
import Data.Text.Encoding qualified as T
import Data.Text.Encoding qualified as Text
import Data.Type.Ord
import GHC.TypeLits (KnownNat, Nat)
import Imports
import Web.HttpApiData (FromHttpApiData (parseUrlPiece), ToHttpApiData, toQueryParam)
import Web.Internal.HttpApiData (toUrlPiece)
import Wire.Arbitrary (Arbitrary (..), GenericUniform (..))

--------------------------------------------------------------------------------
Expand All @@ -72,13 +59,6 @@ import Wire.Arbitrary (Arbitrary (..), GenericUniform (..))
newtype ServiceTagList = ServiceTagList [ServiceTag]
deriving stock (Eq, Ord, Show)
deriving newtype (FromJSON, ToJSON, Arbitrary)
deriving (S.ToSchema) via (Schema ServiceTagList)

_ServiceTagList :: Prism' ServiceTagList [ServiceTag]
_ServiceTagList = prism ServiceTagList (\(ServiceTagList l) -> pure l)

instance ToSchema ServiceTagList where
schema = named "ServiceTagList" $ tag _ServiceTagList $ array schema

-- | A fixed enumeration of tags for services.
data ServiceTag
Expand Down Expand Up @@ -115,7 +95,6 @@ data ServiceTag
| WeatherTag
deriving stock (Eq, Show, Ord, Enum, Bounded, Generic)
deriving (Arbitrary) via (GenericUniform ServiceTag)
deriving (S.ToSchema) via (Schema ServiceTag)

instance FromByteString ServiceTag where
parser =
Expand Down Expand Up @@ -194,12 +173,6 @@ instance FromJSON ServiceTag where
JSON.withText "ServiceTag" $
either fail pure . runParser parser . Text.encodeUtf8

instance ToSchema ServiceTag where
schema = enum @Text "" . mconcat $ (\a -> element (decodeUtf8 $ toStrict $ toByteString a) a) <$> [minBound ..]

instance ToHttpApiData ServiceTag where
toUrlPiece = cs . toByteString'

--------------------------------------------------------------------------------
-- Bounded ServiceTag Queries

Expand All @@ -208,19 +181,6 @@ newtype QueryAnyTags (m :: Nat) (n :: Nat) = QueryAnyTags
{queryAnyTagsRange :: Range m n (Set (QueryAllTags m n))}
deriving stock (Eq, Show, Ord)

instance (m <= n) => ToParamSchema (QueryAnyTags m n) where
toParamSchema _ =
mempty
{ _paramSchemaType = Just SwaggerString,
_paramSchemaEnum = Just (A.String . toQueryParam <$> [(minBound :: ServiceTag) ..])
}

instance (KnownNat n, KnownNat m, m <= n) => ToSchema (QueryAnyTags m n) where
schema =
let sch :: ValueSchema NamedSwaggerDoc (Range m n (Set (QueryAllTags m n)))
sch = fromRange .= rangedSchema (named "QueryAnyTags" $ set schema)
in queryAnyTagsRange .= (QueryAnyTags <$> sch)

instance (KnownNat m, KnownNat n, m <= n) => Arbitrary (QueryAnyTags m n) where
arbitrary = QueryAnyTags <$> arbitrary

Expand All @@ -247,31 +207,11 @@ instance (KnownNat n, KnownNat m, m <= n) => FromByteString (QueryAnyTags m n) w
rs <- either fail pure (Range.checkedEither (Set.fromList ts))
pure $! QueryAnyTags rs

runPartial :: IsString i => Bool -> IResult i b -> Either Text b
runPartial alreadyRun result = case result of
Fail _ _ e -> Left $ T.pack e
Partial f ->
if alreadyRun
then Left "A partial parse returned another partial parse."
else runPartial True $ f ""
Done _ r -> pure r

instance (KnownNat n, KnownNat m, m <= n) => FromHttpApiData (QueryAnyTags m n) where
parseUrlPiece t = do
txt <- parseUrlPiece t
runPartial False $ parse parser $ T.encodeUtf8 txt

-- | Bounded logical conjunction of 'm' to 'n' 'ServiceTag's to match.
newtype QueryAllTags (m :: Nat) (n :: Nat) = QueryAllTags
{queryAllTagsRange :: Range m n (Set ServiceTag)}
deriving stock (Eq, Show, Ord)

instance (KnownNat n, KnownNat m, m <= n) => ToSchema (QueryAllTags m n) where
schema =
let sch :: ValueSchema NamedSwaggerDoc (Range m n (Set ServiceTag))
sch = fromRange .= rangedSchema (named "QueryAllTags" $ set schema)
in queryAllTagsRange .= (QueryAllTags <$> sch)

instance (KnownNat m, KnownNat n, m <= n) => Arbitrary (QueryAllTags m n) where
arbitrary = QueryAllTags <$> arbitrary

Expand All @@ -296,11 +236,6 @@ instance (KnownNat m, KnownNat n, m <= n) => FromByteString (QueryAllTags m n) w
rs <- either fail pure (Range.checkedEither (Set.fromList ts))
pure $! QueryAllTags rs

instance (KnownNat n, KnownNat m, m <= n) => FromHttpApiData (QueryAllTags m n) where
parseUrlPiece t = do
txt <- parseUrlPiece t
runPartial False $ parse parser $ T.encodeUtf8 txt

--------------------------------------------------------------------------------
-- ServiceTag Matchers

Expand Down
Loading