summaryrefslogtreecommitdiff
path: root/web/src/actions/auth.js
blob: 222ab05c1a218eead3e3768c3512f496abeda84b (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
// Copyright 2020 Red Hat, Inc
//
// Licensed under the Apache License, Version 2.0 (the "License"); you may
// not use this file except in compliance with the License. You may obtain
// a copy of the License at
//
//      http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
// License for the specific language governing permissions and limitations
// under the License.


import * as API from '../api'

export const AUTH_CONFIG_REQUEST = 'AUTH_CONFIG_REQUEST'
export const AUTH_CONFIG_SUCCESS = 'AUTH_CONFIG_SUCCESS'
export const AUTH_CONFIG_FAIL = 'AUTH_CONFIG_FAIL'

export const USER_ACL_REQUEST = 'USER_ACL_REQUEST'
export const USER_ACL_SUCCESS = 'USER_ACL_SUCCESS'
export const USER_ACL_FAIL = 'USER_ACL_FAIL'

export const AUTH_START = 'AUTH_START'

const authConfigRequest = () => ({
  type: AUTH_CONFIG_REQUEST
})

function createAuthParamsFromJson(json) {
  let auth_info = json.info.capabilities.auth

  let auth_params = {
    authority: '',
    clientId: '',
    scope: '',
  }
  if (!auth_info) {
    console.log('No auth config')
    return auth_params
  }
  const realm = auth_info.default_realm
  const client_config = auth_info.realms[realm]
  if (client_config.driver === 'OpenIDConnect') {
    auth_params.clientId = client_config.client_id
    auth_params.scope = client_config.scope
    auth_params.authority = client_config.authority
    return auth_params
  } else {
    console.log('No OpenIDConnect provider found')
    return auth_params
  }
}

const authConfigSuccess = (json, auth_params) => ({
  type: AUTH_CONFIG_SUCCESS,
  info: json.info,
  auth_params: auth_params,
})

const authConfigFail = error => ({
    type: AUTH_CONFIG_FAIL,
    error
})

export const configureAuthFromTenant = (tenantName) => (dispatch) => {
  dispatch(authConfigRequest())
  return API.fetchTenantInfo('tenant/' + tenantName + '/')
    .then(response => {
      dispatch(authConfigSuccess(
        response.data,
        createAuthParamsFromJson(response.data)))
    })
    .catch(error => {
      dispatch(authConfigFail(error))
    })
}

export const configureAuthFromInfo = (info) => (dispatch) => {
  dispatch(authConfigSuccess(
    {info: info},
    createAuthParamsFromJson({info: info})))
}