github.com/kyma-incubator/compass/components/director@v0.0.0-20230623144113-d764f56ff805/pkg/auth/converter.go (about) 1 package auth 2 3 import ( 4 "github.com/kyma-incubator/compass/components/director/internal/model" 5 "github.com/kyma-incubator/compass/components/director/pkg/graphql" 6 "github.com/kyma-incubator/compass/components/director/pkg/str" 7 "github.com/pkg/errors" 8 ) 9 10 // ToGraphQLInput converts model.Auth to graphql.AuthInput 11 func ToGraphQLInput(in *model.Auth) (*graphql.AuthInput, error) { 12 if in == nil { 13 return nil, errors.New("Missing system auth") 14 } 15 credentialDataInput := credentialDataToInput(in.Credential) 16 17 requestAuthInput, err := requestAuthToInput(in.RequestAuth) 18 if err != nil { 19 return nil, err 20 } 21 22 var headers graphql.HTTPHeaders 23 var headersSerialized *graphql.HTTPHeadersSerialized 24 if len(in.AdditionalHeaders) != 0 { 25 headers = in.AdditionalHeaders 26 27 serialized, err := graphql.NewHTTPHeadersSerialized(in.AdditionalHeaders) 28 if err != nil { 29 return nil, errors.Wrap(err, "while marshaling AdditionalHeaders") 30 } 31 headersSerialized = &serialized 32 } 33 34 var params graphql.QueryParams 35 var paramsSerialized *graphql.QueryParamsSerialized 36 if len(in.AdditionalQueryParams) != 0 { 37 params = in.AdditionalQueryParams 38 39 serialized, err := graphql.NewQueryParamsSerialized(in.AdditionalQueryParams) 40 if err != nil { 41 return nil, errors.Wrap(err, "while marshaling AdditionalQueryParams") 42 } 43 paramsSerialized = &serialized 44 } 45 46 return &graphql.AuthInput{ 47 Credential: credentialDataInput, 48 AccessStrategy: in.AccessStrategy, 49 AdditionalHeaders: headers, 50 AdditionalHeadersSerialized: headersSerialized, 51 AdditionalQueryParamsSerialized: paramsSerialized, 52 AdditionalQueryParams: params, 53 RequestAuth: requestAuthInput, 54 }, nil 55 } 56 57 func requestAuthToInput(in *model.CredentialRequestAuth) (*graphql.CredentialRequestAuthInput, error) { 58 if in == nil || in.Csrf == nil { 59 return nil, nil 60 } 61 62 var headers graphql.HTTPHeaders 63 var headersSerialized *graphql.HTTPHeadersSerialized 64 if len(in.Csrf.AdditionalHeaders) != 0 { 65 headers = in.Csrf.AdditionalHeaders 66 67 serialized, err := graphql.NewHTTPHeadersSerialized(in.Csrf.AdditionalHeaders) 68 if err != nil { 69 return nil, errors.Wrap(err, "while marshaling AdditionalHeaders") 70 } 71 headersSerialized = &serialized 72 } 73 74 var params graphql.QueryParams 75 var paramsSerialized *graphql.QueryParamsSerialized 76 if len(in.Csrf.AdditionalQueryParams) != 0 { 77 params = in.Csrf.AdditionalQueryParams 78 79 serialized, err := graphql.NewQueryParamsSerialized(in.Csrf.AdditionalQueryParams) 80 if err != nil { 81 return nil, errors.Wrap(err, "while marshaling AdditionalQueryParams") 82 } 83 paramsSerialized = &serialized 84 } 85 86 credentialDataInput := credentialDataToInput(in.Csrf.Credential) 87 88 requestAuth := &graphql.CredentialRequestAuthInput{ 89 Csrf: &graphql.CSRFTokenCredentialRequestAuthInput{ 90 TokenEndpointURL: in.Csrf.TokenEndpointURL, 91 AdditionalHeaders: headers, 92 AdditionalHeadersSerialized: headersSerialized, 93 AdditionalQueryParams: params, 94 AdditionalQueryParamsSerialized: paramsSerialized, 95 Credential: credentialDataInput, 96 }, 97 } 98 99 return requestAuth, nil 100 } 101 102 func credentialDataToInput(in model.CredentialData) *graphql.CredentialDataInput { 103 var basicCredentials *model.BasicCredentialData 104 var oauthCredentials *model.OAuthCredentialData 105 106 if in.Basic != nil { 107 basicCredentials = in.Basic 108 } 109 110 if in.Oauth != nil { 111 oauthCredentials = in.Oauth 112 } 113 114 return &graphql.CredentialDataInput{ 115 Basic: basicCredentialToInput(basicCredentials), 116 Oauth: oauthCredentialToInput(oauthCredentials), 117 } 118 } 119 120 func basicCredentialToInput(in *model.BasicCredentialData) *graphql.BasicCredentialDataInput { 121 if in == nil { 122 return nil 123 } 124 125 return &graphql.BasicCredentialDataInput{ 126 Username: in.Username, 127 Password: in.Password, 128 } 129 } 130 131 func oauthCredentialToInput(in *model.OAuthCredentialData) *graphql.OAuthCredentialDataInput { 132 if in == nil { 133 return nil 134 } 135 136 return &graphql.OAuthCredentialDataInput{ 137 ClientID: in.ClientID, 138 ClientSecret: in.ClientSecret, 139 URL: in.URL, 140 } 141 } 142 143 // ToModel converts graphql.Auth to model.Auth 144 func ToModel(in *graphql.Auth) (*model.Auth, error) { 145 if in == nil { 146 return nil, nil 147 } 148 149 var headers map[string][]string 150 if len(in.AdditionalHeaders) != 0 { 151 if err := in.AdditionalHeaders.UnmarshalGQL(headers); err != nil { 152 return nil, err 153 } 154 } 155 156 var params map[string][]string 157 if len(in.AdditionalQueryParams) != 0 { 158 if err := in.AdditionalQueryParams.UnmarshalGQL(params); err != nil { 159 return nil, err 160 } 161 } 162 163 reqAuthModel, err := requestAuthToModel(in.RequestAuth) 164 if err != nil { 165 return nil, err 166 } 167 168 return &model.Auth{ 169 Credential: credentialToModel(in.Credential), 170 AccessStrategy: in.AccessStrategy, 171 AdditionalHeaders: headers, 172 AdditionalQueryParams: params, 173 RequestAuth: reqAuthModel, 174 CertCommonName: str.PtrStrToStr(in.CertCommonName), 175 }, nil 176 } 177 178 func requestAuthToModel(in *graphql.CredentialRequestAuth) (*model.CredentialRequestAuth, error) { 179 if in == nil { 180 return nil, nil 181 } 182 183 var csrf *model.CSRFTokenCredentialRequestAuth 184 if in.Csrf != nil { 185 var headers map[string][]string 186 if len(in.Csrf.AdditionalHeaders) != 0 { 187 if err := in.Csrf.AdditionalHeaders.UnmarshalGQL(headers); err != nil { 188 return nil, err 189 } 190 } 191 192 var params map[string][]string 193 if len(in.Csrf.AdditionalQueryParams) != 0 { 194 if err := in.Csrf.AdditionalQueryParams.UnmarshalGQL(params); err != nil { 195 return nil, err 196 } 197 } 198 199 csrf = &model.CSRFTokenCredentialRequestAuth{ 200 TokenEndpointURL: in.Csrf.TokenEndpointURL, 201 AdditionalQueryParams: params, 202 AdditionalHeaders: headers, 203 Credential: credentialToModel(in.Csrf.Credential), 204 } 205 } 206 207 return &model.CredentialRequestAuth{ 208 Csrf: csrf, 209 }, nil 210 } 211 212 func credentialToModel(in graphql.CredentialData) model.CredentialData { 213 var basic *model.BasicCredentialData 214 var oauth *model.OAuthCredentialData 215 216 switch cred := in.(type) { 217 case graphql.BasicCredentialData: 218 basic = &model.BasicCredentialData{ 219 Username: cred.Username, 220 Password: cred.Password, 221 } 222 case graphql.OAuthCredentialData: 223 oauth = &model.OAuthCredentialData{ 224 ClientID: cred.ClientID, 225 ClientSecret: cred.ClientSecret, 226 URL: cred.URL, 227 } 228 } 229 230 switch cred := in.(type) { 231 case *graphql.BasicCredentialData: 232 if basic == nil { 233 basic = &model.BasicCredentialData{ 234 Username: cred.Username, 235 Password: cred.Password, 236 } 237 } 238 case *graphql.OAuthCredentialData: 239 if oauth == nil { 240 oauth = &model.OAuthCredentialData{ 241 ClientID: cred.ClientID, 242 ClientSecret: cred.ClientSecret, 243 URL: cred.URL, 244 } 245 } 246 } 247 248 return model.CredentialData{Basic: basic, Oauth: oauth} 249 }