mirror of
https://github.com/offen/docker-volume-backup.git
synced 2024-11-24 22:20:28 +01:00
Add OAuth2 mock server for CI testing
This commit is contained in:
parent
5147753a79
commit
7ddeb992e7
@ -72,6 +72,7 @@ type Config struct {
|
|||||||
AzureStoragePath string `split_words:"true"`
|
AzureStoragePath string `split_words:"true"`
|
||||||
AzureStorageEndpoint string `split_words:"true" default:"https://{{ .AccountName }}.blob.core.windows.net/"`
|
AzureStorageEndpoint string `split_words:"true" default:"https://{{ .AccountName }}.blob.core.windows.net/"`
|
||||||
DropboxEndpoint string `split_words:"true" default:"https://api.dropbox.com/"`
|
DropboxEndpoint string `split_words:"true" default:"https://api.dropbox.com/"`
|
||||||
|
DropboxOAuth2Endpoint string `split_words:"true" default:"https://api.dropbox.com/"`
|
||||||
DropboxRefreshToken string `split_words:"true"`
|
DropboxRefreshToken string `split_words:"true"`
|
||||||
DropboxAppKey string `split_words:"true"`
|
DropboxAppKey string `split_words:"true"`
|
||||||
DropboxAppSecret string `split_words:"true"`
|
DropboxAppSecret string `split_words:"true"`
|
||||||
|
@ -27,6 +27,7 @@ type dropboxStorage struct {
|
|||||||
// Config allows to configure a Dropbox storage backend.
|
// Config allows to configure a Dropbox storage backend.
|
||||||
type Config struct {
|
type Config struct {
|
||||||
Endpoint string
|
Endpoint string
|
||||||
|
OAuth2Endpoint string
|
||||||
RefreshToken string
|
RefreshToken string
|
||||||
AppKey string
|
AppKey string
|
||||||
AppSecret string
|
AppSecret string
|
||||||
@ -36,7 +37,7 @@ type Config struct {
|
|||||||
|
|
||||||
// NewStorageBackend creates and initializes a new Dropbox storage backend.
|
// NewStorageBackend creates and initializes a new Dropbox storage backend.
|
||||||
func NewStorageBackend(opts Config, logFunc storage.Log) (storage.Backend, error) {
|
func NewStorageBackend(opts Config, logFunc storage.Log) (storage.Backend, error) {
|
||||||
tokenUrl, _ := url.JoinPath(opts.Endpoint, "oauth2/token")
|
tokenUrl, _ := url.JoinPath(opts.OAuth2Endpoint, "oauth2/token")
|
||||||
|
|
||||||
conf := &oauth2.Config{
|
conf := &oauth2.Config{
|
||||||
ClientID: opts.AppKey,
|
ClientID: opts.AppKey,
|
||||||
@ -46,28 +47,21 @@ func NewStorageBackend(opts Config, logFunc storage.Log) (storage.Backend, error
|
|||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
isCITest := opts.Endpoint != "https://api.dropbox.com/"
|
|
||||||
|
|
||||||
logFunc(storage.LogLevelInfo, "Dropbox", "Fetching fresh access token for Dropbox storage backend.")
|
logFunc(storage.LogLevelInfo, "Dropbox", "Fetching fresh access token for Dropbox storage backend.")
|
||||||
token := &oauth2.Token{RefreshToken: opts.RefreshToken}
|
tkSource := conf.TokenSource(context.Background(), &oauth2.Token{RefreshToken: opts.RefreshToken})
|
||||||
if !isCITest {
|
token, err := tkSource.Token()
|
||||||
tkSource := conf.TokenSource(context.Background(), &oauth2.Token{RefreshToken: opts.RefreshToken})
|
if err != nil {
|
||||||
var err error
|
return nil, fmt.Errorf("(*dropboxStorage).NewStorageBackend: Error refreshing token: %w", err)
|
||||||
token, err = tkSource.Token()
|
|
||||||
if err != nil {
|
|
||||||
return nil, fmt.Errorf("(*dropboxStorage).NewStorageBackend: Error refreshing token: %w", err)
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
dbxConfig := dropbox.Config{}
|
dbxConfig := dropbox.Config{
|
||||||
|
Token: token.AccessToken,
|
||||||
|
}
|
||||||
|
|
||||||
if isCITest {
|
if opts.Endpoint != "https://api.dropbox.com/" {
|
||||||
dbxConfig.Token = opts.RefreshToken
|
|
||||||
dbxConfig.URLGenerator = func(hostType string, namespace string, route string) string {
|
dbxConfig.URLGenerator = func(hostType string, namespace string, route string) string {
|
||||||
return fmt.Sprintf("%s/%d/%s/%s", opts.Endpoint, 2, namespace, route)
|
return fmt.Sprintf("%s/%d/%s/%s", opts.Endpoint, 2, namespace, route)
|
||||||
}
|
}
|
||||||
} else {
|
|
||||||
dbxConfig.Token = token.AccessToken
|
|
||||||
}
|
}
|
||||||
|
|
||||||
client := files.New(dbxConfig)
|
client := files.New(dbxConfig)
|
||||||
|
@ -11,6 +11,17 @@ services:
|
|||||||
volumes:
|
volumes:
|
||||||
- ./user_v2.yaml:/etc/openapi/user_v2.yaml
|
- ./user_v2.yaml:/etc/openapi/user_v2.yaml
|
||||||
|
|
||||||
|
oauth2_mock:
|
||||||
|
image: ghcr.io/navikt/mock-oauth2-server:1.0.0
|
||||||
|
ports:
|
||||||
|
- 8090:8090
|
||||||
|
environment:
|
||||||
|
PORT: 8090
|
||||||
|
JSON_CONFIG_PATH: '/etc/oauth2/config.yaml'
|
||||||
|
volumes:
|
||||||
|
- ./oauth2_config.yaml:/etc/oauth2/config.yaml
|
||||||
|
hostname: host.docker.internal
|
||||||
|
|
||||||
backup:
|
backup:
|
||||||
image: offen/docker-volume-backup:${TEST_VERSION:-canary}
|
image: offen/docker-volume-backup:${TEST_VERSION:-canary}
|
||||||
hostname: hostnametoken
|
hostname: hostnametoken
|
||||||
@ -25,6 +36,7 @@ services:
|
|||||||
BACKUP_PRUNING_LEEWAY: 5s
|
BACKUP_PRUNING_LEEWAY: 5s
|
||||||
BACKUP_PRUNING_PREFIX: test
|
BACKUP_PRUNING_PREFIX: test
|
||||||
DROPBOX_ENDPOINT: http://openapi_mock:8080
|
DROPBOX_ENDPOINT: http://openapi_mock:8080
|
||||||
|
DROPBOX_OAUTH2_ENDPOINT: http://oauth2_mock:8090
|
||||||
DROPBOX_REFRESH_TOKEN: test
|
DROPBOX_REFRESH_TOKEN: test
|
||||||
DROPBOX_APP_KEY: test
|
DROPBOX_APP_KEY: test
|
||||||
DROPBOX_APP_SECRET: test
|
DROPBOX_APP_SECRET: test
|
||||||
|
32
test/dropbox/oauth2_config.yaml
Normal file
32
test/dropbox/oauth2_config.yaml
Normal file
@ -0,0 +1,32 @@
|
|||||||
|
{
|
||||||
|
"issuer":"http://localhost:8090/default",
|
||||||
|
"authorization_endpoint":"http://localhost:8090/default/authorize",
|
||||||
|
"end_session_endpoint" : "http://localhost:8090/default/endsession",
|
||||||
|
"revocation_endpoint" : "http://localhost:8090/default/revoke",
|
||||||
|
"token_endpoint":"http://localhost:8090/default/token",
|
||||||
|
"userinfo_endpoint":"http://localhost:8090/default/userinfo",
|
||||||
|
"jwks_uri":"http://localhost:8090/default/jwks",
|
||||||
|
"introspection_endpoint":"http://localhost:8090/default/introspect",
|
||||||
|
"response_types_supported":[
|
||||||
|
"query",
|
||||||
|
"fragment",
|
||||||
|
"form_post"
|
||||||
|
],
|
||||||
|
"subject_types_supported":[
|
||||||
|
"public"
|
||||||
|
],
|
||||||
|
"id_token_signing_alg_values_supported":[
|
||||||
|
"ES256",
|
||||||
|
"ES384",
|
||||||
|
"RS256",
|
||||||
|
"RS384",
|
||||||
|
"RS512",
|
||||||
|
"PS256",
|
||||||
|
"PS384",
|
||||||
|
"PS512"
|
||||||
|
],
|
||||||
|
"code_challenge_methods_supported":[
|
||||||
|
"plain",
|
||||||
|
"S256"
|
||||||
|
]
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user