mirror of
https://github.com/davidallendj/opaal.git
synced 2025-12-20 11:37:01 -07:00
101 lines
2.5 KiB
Go
101 lines
2.5 KiB
Go
package opaal
|
|
|
|
import (
|
|
"davidallendj/opaal/internal/oauth"
|
|
"fmt"
|
|
"net/http"
|
|
"slices"
|
|
|
|
"davidallendj/opaal/internal/flows"
|
|
"davidallendj/opaal/internal/server"
|
|
|
|
"github.com/davidallendj/go-utils/mathx"
|
|
)
|
|
|
|
func NewClientWithConfig(config *Config) *oauth.Client {
|
|
// make sure config is valid
|
|
if config == nil {
|
|
return nil
|
|
}
|
|
|
|
// make sure we have at least one client
|
|
clients := config.Authentication.Clients
|
|
if len(clients) <= 0 {
|
|
return nil
|
|
}
|
|
|
|
// use the first client found by default
|
|
return &oauth.Client{
|
|
Id: clients[0].Id,
|
|
Secret: clients[0].Secret,
|
|
Name: clients[0].Name,
|
|
Provider: clients[0].Provider,
|
|
Scope: clients[0].Scope,
|
|
RedirectUris: clients[0].RedirectUris,
|
|
}
|
|
}
|
|
|
|
func NewClientWithConfigByIndex(config *Config, index int) *oauth.Client {
|
|
size := len(config.Authentication.Clients)
|
|
index = mathx.Clamp(index, 0, size)
|
|
return nil
|
|
}
|
|
|
|
func NewClientWithConfigByName(config *Config, name string) *oauth.Client {
|
|
index := slices.IndexFunc(config.Authentication.Clients, func(c oauth.Client) bool {
|
|
return c.Name == name
|
|
})
|
|
if index >= 0 {
|
|
return &config.Authentication.Clients[index]
|
|
}
|
|
return nil
|
|
}
|
|
|
|
func NewClientWithConfigByProvider(config *Config, issuer string) *oauth.Client {
|
|
index := slices.IndexFunc(config.Authentication.Clients, func(c oauth.Client) bool {
|
|
return c.Provider.Issuer == issuer
|
|
})
|
|
|
|
if index >= 0 {
|
|
return &config.Authentication.Clients[index]
|
|
}
|
|
return nil
|
|
}
|
|
|
|
func NewClientWithConfigById(config *Config, id string) *oauth.Client {
|
|
index := slices.IndexFunc(config.Authentication.Clients, func(c oauth.Client) bool {
|
|
return c.Id == id
|
|
})
|
|
if index >= 0 {
|
|
return &config.Authentication.Clients[index]
|
|
}
|
|
return nil
|
|
}
|
|
|
|
func NewClientCredentialsFlowWithConfig(config *Config, params flows.ClientCredentialsFlowParams) (string, error) {
|
|
eps := flows.ClientCredentialsFlowEndpoints{
|
|
Clients: config.Authorization.Endpoints.Clients,
|
|
Authorize: config.Authorization.Endpoints.Authorize,
|
|
Token: config.Authorization.Endpoints.Token,
|
|
}
|
|
return flows.NewClientCredentialsFlow(eps, params)
|
|
}
|
|
|
|
func NewServerWithConfig(conf *Config) *server.Server {
|
|
host := conf.Server.Host
|
|
port := conf.Server.Port
|
|
server := &server.Server{
|
|
Server: &http.Server{
|
|
Addr: fmt.Sprintf("%s:%d", host, port),
|
|
},
|
|
Host: host,
|
|
Port: port,
|
|
Issuer: server.IdentityProviderServer{
|
|
Host: conf.Server.Issuer.Host,
|
|
Port: conf.Server.Issuer.Port,
|
|
Endpoints: conf.Server.Issuer.Endpoints,
|
|
Clients: conf.Server.Issuer.Clients,
|
|
},
|
|
}
|
|
return server
|
|
}
|