replaced authentik with generic oidc provider

This commit is contained in:
Gani Georgiev
2023-02-23 21:07:00 +02:00
parent e529fe7e2a
commit aa4e405f92
55 changed files with 495 additions and 330 deletions
+6 -2
View File
@@ -112,10 +112,14 @@ func NewProviderByName(name string) (Provider, error) {
return NewGiteeProvider(), nil
case NameLivechat:
return NewLivechatProvider(), nil
case NameAuthentik:
return NewAuthentikProvider(), nil
case NameGitea:
return NewGiteaProvider(), nil
case NameOIDC:
return NewOIDCProvider(), nil
case NameOIDC + "2":
return NewOIDCProvider(), nil
case NameOIDC + "3":
return NewOIDCProvider(), nil
default:
return nil, errors.New("Missing provider " + name)
}
+27 -9
View File
@@ -136,15 +136,6 @@ func TestNewProviderByName(t *testing.T) {
t.Error("Expected to be instance of *auth.Livechat")
}
// authentik
p, err = auth.NewProviderByName(auth.NameAuthentik)
if err != nil {
t.Errorf("Expected nil, got error %v", err)
}
if _, ok := p.(*auth.Authentik); !ok {
t.Error("Expected to be instance of *auth.Authentik")
}
// gitea
p, err = auth.NewProviderByName(auth.NameGitea)
if err != nil {
@@ -153,4 +144,31 @@ func TestNewProviderByName(t *testing.T) {
if _, ok := p.(*auth.Gitea); !ok {
t.Error("Expected to be instance of *auth.Gitea")
}
// oidc
p, err = auth.NewProviderByName(auth.NameOIDC)
if err != nil {
t.Errorf("Expected nil, got error %v", err)
}
if _, ok := p.(*auth.OIDC); !ok {
t.Error("Expected to be instance of *auth.OIDC")
}
// oidc2
p, err = auth.NewProviderByName(auth.NameOIDC + "2")
if err != nil {
t.Errorf("Expected nil, got error %v", err)
}
if _, ok := p.(*auth.OIDC); !ok {
t.Error("Expected to be instance of *auth.OIDC")
}
// oidc3
p, err = auth.NewProviderByName(auth.NameOIDC + "3")
if err != nil {
t.Errorf("Expected nil, got error %v", err)
}
if _, ok := p.(*auth.OIDC); !ok {
t.Error("Expected to be instance of *auth.OIDC")
}
}
+11 -11
View File
@@ -6,19 +6,19 @@ import (
"golang.org/x/oauth2"
)
var _ Provider = (*Authentik)(nil)
var _ Provider = (*OIDC)(nil)
// NameAuthentik is the unique name of the Authentik provider.
const NameAuthentik string = "authentik"
// NameOIDC is the unique name of the OpenID Connect (OIDC) provider.
const NameOIDC string = "oidc"
// Authentik allows authentication via Authentik OAuth2.
type Authentik struct {
// OIDC allows authentication via OpenID Connect (OIDC) OAuth2 provider.
type OIDC struct {
*baseProvider
}
// NewAuthentikProvider creates new Authentik provider instance with some defaults.
func NewAuthentikProvider() *Authentik {
return &Authentik{&baseProvider{
// NewOIDCProvider creates new OpenID Connect (OIDC) provider instance with some defaults.
func NewOIDCProvider() *OIDC {
return &OIDC{&baseProvider{
scopes: []string{
"openid", // minimal requirement to return the id
"email",
@@ -27,10 +27,10 @@ func NewAuthentikProvider() *Authentik {
}}
}
// FetchAuthUser returns an AuthUser instance based the Authentik's user api.
// FetchAuthUser returns an AuthUser instance based the provider's user api.
//
// API reference: https://goauthentik.io/docs/providers/oauth2/
func (p *Authentik) FetchAuthUser(token *oauth2.Token) (*AuthUser, error) {
// API reference: https://openid.net/specs/openid-connect-core-1_0.html#StandardClaims
func (p *OIDC) FetchAuthUser(token *oauth2.Token) (*AuthUser, error) {
data, err := p.FetchRawUserData(token)
if err != nil {
return nil, err
+1 -1
View File
@@ -198,7 +198,7 @@ func (s *Provider) Exec(items any) (*Result, error) {
baseTable = queryInfo.From[0]
}
clone := modelsQuery
countQuery := clone.Select("COUNT(DISTINCT {{" + baseTable + ".id}})").OrderBy()
countQuery := clone.Select("COUNT(DISTINCT [[" + baseTable + ".id]])").OrderBy()
if err := countQuery.Row(&totalCount); err != nil {
return nil, err
}
+5 -5
View File
@@ -228,7 +228,7 @@ func TestProviderExecNonEmptyQuery(t *testing.T) {
false,
`{"page":1,"perPage":10,"totalItems":2,"totalPages":1,"items":[{"test1":1,"test2":"test2.1","test3":""},{"test1":2,"test2":"test2.2","test3":""}]}`,
[]string{
"SELECT COUNT(DISTINCT {{test.id}}) FROM `test` WHERE NOT (`test1` IS NULL)",
"SELECT COUNT(DISTINCT [[test.id]]) FROM `test` WHERE NOT (`test1` IS NULL)",
"SELECT * FROM `test` WHERE NOT (`test1` IS NULL) ORDER BY `test1` ASC LIMIT 10",
},
},
@@ -241,7 +241,7 @@ func TestProviderExecNonEmptyQuery(t *testing.T) {
false,
`{"page":1,"perPage":30,"totalItems":2,"totalPages":1,"items":[{"test1":1,"test2":"test2.1","test3":""},{"test1":2,"test2":"test2.2","test3":""}]}`,
[]string{
"SELECT COUNT(DISTINCT {{test.id}}) FROM `test` WHERE NOT (`test1` IS NULL)",
"SELECT COUNT(DISTINCT [[test.id]]) FROM `test` WHERE NOT (`test1` IS NULL)",
"SELECT * FROM `test` WHERE NOT (`test1` IS NULL) ORDER BY `test1` ASC LIMIT 30",
},
},
@@ -274,7 +274,7 @@ func TestProviderExecNonEmptyQuery(t *testing.T) {
false,
`{"page":1,"perPage":` + fmt.Sprint(MaxPerPage) + `,"totalItems":1,"totalPages":1,"items":[{"test1":2,"test2":"test2.2","test3":""}]}`,
[]string{
"SELECT COUNT(DISTINCT {{test.id}}) FROM `test` WHERE ((NOT (`test1` IS NULL)) AND (COALESCE(test2, '') != COALESCE(null, ''))) AND (test1 >= 2)",
"SELECT COUNT(DISTINCT [[test.id]]) FROM `test` WHERE ((NOT (`test1` IS NULL)) AND (COALESCE(test2, '') != COALESCE(null, ''))) AND (test1 >= 2)",
"SELECT * FROM `test` WHERE ((NOT (`test1` IS NULL)) AND (COALESCE(test2, '') != COALESCE(null, ''))) AND (test1 >= 2) ORDER BY `test1` ASC, `test2` DESC LIMIT 500",
},
},
@@ -287,7 +287,7 @@ func TestProviderExecNonEmptyQuery(t *testing.T) {
false,
`{"page":1,"perPage":10,"totalItems":0,"totalPages":0,"items":[]}`,
[]string{
"SELECT COUNT(DISTINCT {{test.id}}) FROM `test` WHERE (NOT (`test1` IS NULL)) AND (COALESCE(test3, '') != COALESCE('', ''))",
"SELECT COUNT(DISTINCT [[test.id]]) FROM `test` WHERE (NOT (`test1` IS NULL)) AND (COALESCE(test3, '') != COALESCE('', ''))",
"SELECT * FROM `test` WHERE (NOT (`test1` IS NULL)) AND (COALESCE(test3, '') != COALESCE('', '')) ORDER BY `test1` ASC, `test3` ASC LIMIT 10",
},
},
@@ -300,7 +300,7 @@ func TestProviderExecNonEmptyQuery(t *testing.T) {
false,
`{"page":2,"perPage":1,"totalItems":2,"totalPages":2,"items":[{"test1":2,"test2":"test2.2","test3":""}]}`,
[]string{
"SELECT COUNT(DISTINCT {{test.id}}) FROM `test` WHERE NOT (`test1` IS NULL)",
"SELECT COUNT(DISTINCT [[test.id]]) FROM `test` WHERE NOT (`test1` IS NULL)",
"SELECT * FROM `test` WHERE NOT (`test1` IS NULL) ORDER BY `test1` ASC LIMIT 1 OFFSET 1",
},
},