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
1 change: 1 addition & 0 deletions changelog.d/3-bug-fixes/pr-3152
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
Fix version parsing in swagger-ui end-points
1 change: 1 addition & 0 deletions services/brig/brig.cabal
Original file line number Diff line number Diff line change
Expand Up @@ -452,6 +452,7 @@ executable brig-integration
API.Search
API.Search.Util
API.Settings
API.Swagger
API.SystemSettings
API.Team
API.Team.Util
Expand Down
20 changes: 10 additions & 10 deletions services/brig/src/Brig/API/Public.hs
Original file line number Diff line number Diff line change
Expand Up @@ -163,7 +163,7 @@ docsAPI =
--
-- Dual to `internalEndpointsSwaggerDocsAPI`.
versionedSwaggerDocsAPI :: Servant.Server VersionedSwaggerDocsAPI
versionedSwaggerDocsAPI (Just V4) =
versionedSwaggerDocsAPI (Just (VersionNumber V4)) =
swaggerSchemaUIServer $
( brigSwagger
<> versionSwagger
Expand All @@ -178,10 +178,10 @@ versionedSwaggerDocsAPI (Just V4) =
& S.info . S.title .~ "Wire-Server API"
& S.info . S.description ?~ $(embedText =<< makeRelativeToProject "docs/swagger.md")
& cleanupSwagger
versionedSwaggerDocsAPI (Just V0) = swaggerPregenUIServer $(pregenSwagger V0)
versionedSwaggerDocsAPI (Just V1) = swaggerPregenUIServer $(pregenSwagger V1)
versionedSwaggerDocsAPI (Just V2) = swaggerPregenUIServer $(pregenSwagger V2)
versionedSwaggerDocsAPI (Just V3) = swaggerPregenUIServer $(pregenSwagger V3)
versionedSwaggerDocsAPI (Just (VersionNumber V0)) = swaggerPregenUIServer $(pregenSwagger V0)
versionedSwaggerDocsAPI (Just (VersionNumber V1)) = swaggerPregenUIServer $(pregenSwagger V1)
versionedSwaggerDocsAPI (Just (VersionNumber V2)) = swaggerPregenUIServer $(pregenSwagger V2)
versionedSwaggerDocsAPI (Just (VersionNumber V3)) = swaggerPregenUIServer $(pregenSwagger V3)
versionedSwaggerDocsAPI Nothing = versionedSwaggerDocsAPI (Just maxBound)

-- | Serves Swagger docs for internal endpoints
Expand All @@ -195,15 +195,15 @@ internalEndpointsSwaggerDocsAPI ::
PortNumber ->
S.Swagger ->
Servant.Server (VersionedSwaggerDocsAPIBase service)
internalEndpointsSwaggerDocsAPI service examplePort swagger (Just V4) =
internalEndpointsSwaggerDocsAPI service examplePort swagger (Just (VersionNumber V4)) =
swaggerSchemaUIServer $
swagger
& adjustSwaggerForInternalEndpoint service examplePort
& cleanupSwagger
internalEndpointsSwaggerDocsAPI _ _ _ (Just V0) = emptySwagger
internalEndpointsSwaggerDocsAPI _ _ _ (Just V1) = emptySwagger
internalEndpointsSwaggerDocsAPI _ _ _ (Just V2) = emptySwagger
internalEndpointsSwaggerDocsAPI _ _ _ (Just V3) = emptySwagger
internalEndpointsSwaggerDocsAPI _ _ _ (Just (VersionNumber V0)) = emptySwagger
internalEndpointsSwaggerDocsAPI _ _ _ (Just (VersionNumber V1)) = emptySwagger
internalEndpointsSwaggerDocsAPI _ _ _ (Just (VersionNumber V2)) = emptySwagger
internalEndpointsSwaggerDocsAPI _ _ _ (Just (VersionNumber V3)) = emptySwagger
internalEndpointsSwaggerDocsAPI service examplePort swagger Nothing =
internalEndpointsSwaggerDocsAPI service examplePort swagger (Just maxBound)

Expand Down
4 changes: 2 additions & 2 deletions services/brig/src/Brig/API/Public/Swagger.hs
Original file line number Diff line number Diff line change
Expand Up @@ -36,11 +36,11 @@ import Wire.API.Routes.Version

type SwaggerDocsAPIBase = SwaggerSchemaUI "swagger-ui" "swagger.json"

type VersionedSwaggerDocsAPI = "api" :> Header VersionHeader Version :> SwaggerDocsAPIBase
type VersionedSwaggerDocsAPI = "api" :> Header VersionHeader VersionNumber :> SwaggerDocsAPIBase

type ServiceSwaggerDocsAPIBase service = SwaggerSchemaUI service (AppendSymbol service "-swagger.json")

type VersionedSwaggerDocsAPIBase service = Header VersionHeader Version :> ServiceSwaggerDocsAPIBase service
type VersionedSwaggerDocsAPIBase service = Header VersionHeader VersionNumber :> ServiceSwaggerDocsAPIBase service

type InternalEndpointsSwaggerDocsAPI =
"api-internal"
Expand Down
47 changes: 47 additions & 0 deletions services/brig/test/integration/API/Swagger.hs
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
-- This file is part of the Wire Server implementation.
--
-- Copyright (C) 2022 Wire Swiss GmbH <opensource@wire.com>
--
-- This program is free software: you can redistribute it and/or modify it under
-- the terms of the GNU Affero General Public License as published by the Free
-- Software Foundation, either version 3 of the License, or (at your option) any
-- later version.
--
-- This program is distributed in the hope that it will be useful, but WITHOUT
-- ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
-- FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more
-- details.
--
-- You should have received a copy of the GNU Affero General Public License along
-- with this program. If not, see <https://www.gnu.org/licenses/>.

module API.Swagger (tests) where

import Bilge
import Brig.Options
import Control.Lens
import Data.Aeson.Lens
import Data.String.Conversions
import Imports
import Test.Tasty
import Test.Tasty.HUnit
import Util

tests :: Manager -> Opts -> Brig -> TestTree
tests p _opts brigNoImplicitVersion =
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Remove _opts?

testGroup "version" $
[ test p "GET /api/swagger.json" $ testSwaggerJson brigNoImplicitVersion "",
test p "GET /api/swagger-ui" $ testSwaggerUI brigNoImplicitVersion "",
test p "GET /v2/api/swagger.json" $ testSwaggerJson brigNoImplicitVersion "/v2",
test p "GET /v2/api/swagger-ui" $ testSwaggerUI brigNoImplicitVersion "/v2"
]

testSwaggerJson :: Brig -> ByteString -> Http ()
testSwaggerJson brig version = do
r <- get (brig . path (version <> "/api/swagger.json") . expect2xx)
liftIO $ assertBool "json body" (isJust $ ((^? _Object) <=< responseBody) r)

testSwaggerUI :: Brig -> ByteString -> Http ()
testSwaggerUI brig version = do
r <- get (brig . path (version <> "/api/swagger-ui") . expect2xx)
liftIO $ assertBool "HTML body" ("<div id=\"swagger-ui\"></div>" `isInfixOf` (cs . fromJust . responseBody $ r))
4 changes: 4 additions & 0 deletions services/brig/test/integration/Main.hs
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,7 @@ import qualified API.OAuth
import qualified API.Provider as Provider
import qualified API.Search as Search
import qualified API.Settings as Settings
import qualified API.Swagger
import qualified API.SystemSettings as SystemSettings
import qualified API.Team as Team
import qualified API.TeamUserSearch as TeamUserSearch
Expand Down Expand Up @@ -113,6 +114,7 @@ instance FromJSON Config
runTests :: Config -> Opts.Opts -> [String] -> IO ()
runTests iConf brigOpts otherArgs = do
let b = mkVersionedRequest $ brig iConf
brigNoImplicitVersion = mkRequest $ brig iConf
c = mkVersionedRequest $ cannon iConf
gd = mkVersionedRequest $ gundeck iConf
ch = mkVersionedRequest $ cargohold iConf
Expand Down Expand Up @@ -159,6 +161,7 @@ runTests iConf brigOpts otherArgs = do

let smtp = SMTP.tests mg lg
versionApi = API.Version.tests mg brigOpts b
swaggerApi = API.Swagger.tests mg brigOpts brigNoImplicitVersion
mlsApi = MLS.tests mg b brigOpts
oauthAPI = API.OAuth.tests mg db b n brigOpts

Expand All @@ -184,6 +187,7 @@ runTests iConf brigOpts otherArgs = do
federationEndpoints,
internalApi,
versionApi,
swaggerApi,
mlsApi,
smtp,
oauthAPI
Expand Down