mirror of
https://github.com/davidallendj/opaal.git
synced 2025-12-20 03:27:02 -07:00
Refactor and added ability to use include multiple providers in config
This commit is contained in:
parent
53d1a8cc35
commit
4bca62ec2f
13 changed files with 660 additions and 712 deletions
|
|
@ -1,7 +1,6 @@
|
|||
package opaal
|
||||
|
||||
import (
|
||||
"davidallendj/opaal/internal/oidc"
|
||||
"log"
|
||||
"os"
|
||||
"path/filepath"
|
||||
|
|
@ -11,20 +10,46 @@ import (
|
|||
"gopkg.in/yaml.v2"
|
||||
)
|
||||
|
||||
type FlowOptions map[string]string
|
||||
type Flows map[string]FlowOptions
|
||||
type Providers map[string]string
|
||||
|
||||
type Options struct {
|
||||
DecodeIdToken bool `yaml:"decode-id-token"`
|
||||
DecodeAccessToken bool `yaml:"decode-access-token"`
|
||||
RunOnce bool `yaml:"run-once"`
|
||||
OpenBrowser bool `yaml:"open-browser"`
|
||||
FlowType string `yaml:"flow"`
|
||||
CachePath string `yaml:"cache"`
|
||||
LocalOnly bool `yaml:"local-only"`
|
||||
}
|
||||
|
||||
type RequestUrls struct {
|
||||
Identities string `yaml:"identities"`
|
||||
TrustedIssuers string `yaml:"trusted-issuers"`
|
||||
Login string `yaml:"login"`
|
||||
Clients string `yaml:"clients"`
|
||||
Token string `yaml:"token"`
|
||||
Authorize string `yaml:"authorize"`
|
||||
Register string `yaml:"register"`
|
||||
}
|
||||
|
||||
type Authentication struct {
|
||||
Clients []Client `yaml:"clients"`
|
||||
Flows Flows `yaml:"flows"`
|
||||
}
|
||||
|
||||
type Authorization struct {
|
||||
RequestUrls RequestUrls `yaml:"urls"`
|
||||
}
|
||||
|
||||
type Config struct {
|
||||
Version string `yaml:"version"`
|
||||
Server Server `yaml:"server"`
|
||||
Client Client `yaml:"client"`
|
||||
IdentityProvider oidc.IdentityProvider `yaml:"oidc"`
|
||||
State string `yaml:"state"`
|
||||
ResponseType string `yaml:"response-type"`
|
||||
Scope []string `yaml:"scope"`
|
||||
ActionUrls ActionUrls `yaml:"urls"`
|
||||
OpenBrowser bool `yaml:"open-browser"`
|
||||
DecodeIdToken bool `yaml:"decode-id-token"`
|
||||
DecodeAccessToken bool `yaml:"decode-access-token"`
|
||||
RunOnce bool `yaml:"run-once"`
|
||||
GrantType string `yaml:"grant-type"`
|
||||
Version string `yaml:"version"`
|
||||
Server Server `yaml:"server"`
|
||||
Providers Providers `yaml:"providers"`
|
||||
Options Options `yaml:"options"`
|
||||
Authentication Authentication `yaml:"authentication"`
|
||||
Authorization Authorization `yaml:"authorization"`
|
||||
}
|
||||
|
||||
func NewConfig() Config {
|
||||
|
|
@ -34,31 +59,17 @@ func NewConfig() Config {
|
|||
Host: "127.0.0.1",
|
||||
Port: 3333,
|
||||
},
|
||||
Client: Client{
|
||||
Id: "",
|
||||
Secret: "",
|
||||
RedirectUris: []string{""},
|
||||
Options: Options{
|
||||
DecodeIdToken: true,
|
||||
DecodeAccessToken: true,
|
||||
RunOnce: true,
|
||||
OpenBrowser: false,
|
||||
CachePath: "opaal.db",
|
||||
FlowType: "authorization_code",
|
||||
LocalOnly: false,
|
||||
},
|
||||
IdentityProvider: *oidc.NewIdentityProvider(),
|
||||
State: goutil.RandomString(20),
|
||||
ResponseType: "code",
|
||||
Scope: []string{"openid", "profile", "email"},
|
||||
ActionUrls: ActionUrls{
|
||||
Identities: "",
|
||||
AccessToken: "",
|
||||
TrustedIssuers: "",
|
||||
ServerConfig: "",
|
||||
JwksUri: "",
|
||||
Login: "",
|
||||
LoginFlowId: "",
|
||||
RegisterClient: "",
|
||||
AuthorizeClient: "",
|
||||
},
|
||||
OpenBrowser: false,
|
||||
DecodeIdToken: false,
|
||||
DecodeAccessToken: false,
|
||||
RunOnce: true,
|
||||
GrantType: "authorization_code",
|
||||
Authentication: Authentication{},
|
||||
Authorization: Authorization{},
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -94,3 +105,15 @@ func SaveDefaultConfig(path string) {
|
|||
return
|
||||
}
|
||||
}
|
||||
|
||||
func HasRequiredConfigParams(config *Config) bool {
|
||||
// must have athe requirements to perform login
|
||||
hasClients := len(config.Authentication.Clients) > 0
|
||||
hasServer := config.Server.Host != "" && config.Server.Port != 0 && config.Server.Callback != ""
|
||||
hasEndpoints := config.Authorization.RequestUrls.TrustedIssuers != "" &&
|
||||
config.Authorization.RequestUrls.Login != "" &&
|
||||
config.Authorization.RequestUrls.Clients != "" &&
|
||||
config.Authorization.RequestUrls.Authorize != "" &&
|
||||
config.Authorization.RequestUrls.Token != ""
|
||||
return hasClients && hasServer && hasEndpoints
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue