feat: initial commit
This commit is contained in:
@ -10,6 +10,7 @@ import (
|
||||
"github.com/gorilla/sessions"
|
||||
"github.com/markbates/goth"
|
||||
"github.com/markbates/goth/gothic"
|
||||
"github.com/markbates/goth/providers/gitea"
|
||||
"github.com/markbates/goth/providers/github"
|
||||
"github.com/markbates/goth/providers/google"
|
||||
"github.com/markbates/goth/providers/openidConnect"
|
||||
@ -79,6 +80,26 @@ func NewAuthHandlerFromConfig(ctx context.Context, conf *config.Config) (*auth.H
|
||||
})
|
||||
}
|
||||
|
||||
if conf.Auth.Providers.Gitea.Key != "" && conf.Auth.Providers.Gitea.Secret != "" {
|
||||
giteaProvider := gitea.NewCustomisedURL(
|
||||
conf.Auth.Providers.Gitea.Key,
|
||||
conf.Auth.Providers.Gitea.Secret,
|
||||
fmt.Sprintf("%s/auth/providers/gitea/callback", conf.HTTP.BaseURL),
|
||||
conf.Auth.Providers.Gitea.AuthURL,
|
||||
conf.Auth.Providers.Gitea.TokenURL,
|
||||
conf.Auth.Providers.Gitea.ProfileURL,
|
||||
conf.Auth.Providers.Gitea.Scopes...,
|
||||
)
|
||||
|
||||
gothProviders = append(gothProviders, giteaProvider)
|
||||
|
||||
providers = append(providers, auth.Provider{
|
||||
ID: giteaProvider.Name(),
|
||||
Label: conf.Auth.Providers.Gitea.Label,
|
||||
Icon: "fa-git-alt",
|
||||
})
|
||||
}
|
||||
|
||||
if conf.Auth.Providers.OIDC.Key != "" && conf.Auth.Providers.OIDC.Secret != "" {
|
||||
oidcProvider, err := openidConnect.New(
|
||||
conf.Auth.Providers.OIDC.Key,
|
||||
@ -107,13 +128,6 @@ func NewAuthHandlerFromConfig(ctx context.Context, conf *config.Config) (*auth.H
|
||||
auth.WithProviders(providers...),
|
||||
}
|
||||
|
||||
if conf.Auth.DefaultAdmin.Email != "" && conf.Auth.DefaultAdmin.Provider != "" {
|
||||
opts = append(opts, auth.WithDefaultAdmin(auth.DefaultAdmin{
|
||||
Provider: conf.Auth.DefaultAdmin.Provider,
|
||||
Email: conf.Auth.DefaultAdmin.Email,
|
||||
}))
|
||||
}
|
||||
|
||||
auth := auth.NewHandler(
|
||||
sessionStore,
|
||||
opts...,
|
||||
|
@ -4,9 +4,40 @@ import (
|
||||
"context"
|
||||
|
||||
"forge.cadoles.com/wpetit/clearcase/internal/config"
|
||||
"forge.cadoles.com/wpetit/clearcase/internal/core/model"
|
||||
"forge.cadoles.com/wpetit/clearcase/internal/core/port"
|
||||
"forge.cadoles.com/wpetit/clearcase/internal/core/service"
|
||||
"forge.cadoles.com/wpetit/clearcase/internal/http/handler/webui/issue"
|
||||
"github.com/pkg/errors"
|
||||
)
|
||||
|
||||
func NewIssueHandlerFromConfig(ctx context.Context, conf *config.Config) (*issue.Handler, error) {
|
||||
return issue.NewHandler(), nil
|
||||
issueManager, err := NewIssueManagerFromConfig(ctx, conf)
|
||||
if err != nil {
|
||||
return nil, errors.WithStack(err)
|
||||
}
|
||||
|
||||
return issue.NewHandler(issueManager), nil
|
||||
}
|
||||
|
||||
type authProviderBasedForgeFactory struct {
|
||||
provider string
|
||||
create func(ctx context.Context, user *model.User) (port.Forge, error)
|
||||
}
|
||||
|
||||
// Create implements service.ForgeFactory.
|
||||
func (a *authProviderBasedForgeFactory) Create(ctx context.Context, user *model.User) (port.Forge, error) {
|
||||
forge, err := a.create(ctx, user)
|
||||
if err != nil {
|
||||
return nil, errors.WithStack(err)
|
||||
}
|
||||
|
||||
return forge, nil
|
||||
}
|
||||
|
||||
// Match implements service.ForgeFactory.
|
||||
func (a *authProviderBasedForgeFactory) Match(user *model.User) bool {
|
||||
return user.Provider == a.provider
|
||||
}
|
||||
|
||||
var _ service.ForgeFactory = &authProviderBasedForgeFactory{}
|
||||
|
60
internal/setup/issue_manager.go
Normal file
60
internal/setup/issue_manager.go
Normal file
@ -0,0 +1,60 @@
|
||||
package setup
|
||||
|
||||
import (
|
||||
"context"
|
||||
"net/url"
|
||||
|
||||
"code.gitea.io/sdk/gitea"
|
||||
giteaAdapter "forge.cadoles.com/wpetit/clearcase/internal/adapter/gitea"
|
||||
"forge.cadoles.com/wpetit/clearcase/internal/config"
|
||||
"forge.cadoles.com/wpetit/clearcase/internal/core/model"
|
||||
"forge.cadoles.com/wpetit/clearcase/internal/core/port"
|
||||
"forge.cadoles.com/wpetit/clearcase/internal/core/service"
|
||||
"github.com/bornholm/genai/llm/provider"
|
||||
"github.com/pkg/errors"
|
||||
|
||||
_ "github.com/bornholm/genai/llm/provider/openai"
|
||||
_ "github.com/bornholm/genai/llm/provider/openrouter"
|
||||
)
|
||||
|
||||
func NewIssueManagerFromConfig(ctx context.Context, conf *config.Config) (*service.IssueManager, error) {
|
||||
llmCtx := provider.FromMap(ctx, "", map[string]string{
|
||||
string(provider.ContextKeyAPIBaseURL): conf.LLM.Provider.BaseURL,
|
||||
string(provider.ContextKeyAPIKey): conf.LLM.Provider.Key,
|
||||
string(provider.ContextKeyModel): conf.LLM.Provider.Model,
|
||||
})
|
||||
|
||||
client, err := provider.Create(llmCtx, provider.Name(conf.LLM.Provider.Name))
|
||||
if err != nil {
|
||||
return nil, errors.Wrapf(err, "could not create llm client '%s'", conf.LLM.Provider.Name)
|
||||
}
|
||||
|
||||
forgeFactories := make([]service.ForgeFactory, 0)
|
||||
|
||||
if conf.Auth.Providers.Gitea.Key != "" && conf.Auth.Providers.Gitea.Secret != "" {
|
||||
baseURL, err := url.Parse(conf.Auth.Providers.Gitea.AuthURL)
|
||||
if err != nil {
|
||||
return nil, errors.Wrapf(err, "could not parse gitea auth url '%s'", conf.Auth.Providers.Gitea.AuthURL)
|
||||
}
|
||||
|
||||
baseURL.Path = ""
|
||||
|
||||
forgeFactories = append(forgeFactories, &authProviderBasedForgeFactory{
|
||||
provider: "gitea",
|
||||
create: func(ctx context.Context, user *model.User) (port.Forge, error) {
|
||||
client, err := gitea.NewClient(baseURL.String(), gitea.SetToken(user.AccessToken))
|
||||
if err != nil {
|
||||
return nil, errors.WithStack(err)
|
||||
}
|
||||
|
||||
forge := giteaAdapter.NewForge(client)
|
||||
|
||||
return forge, nil
|
||||
},
|
||||
})
|
||||
}
|
||||
|
||||
issueManager := service.NewIssueManager(client, forgeFactories...)
|
||||
|
||||
return issueManager, nil
|
||||
}
|
@ -25,7 +25,7 @@ func NewWebUIHandlerFromConfig(ctx context.Context, conf *config.Config) (*webui
|
||||
// Configure issue handler
|
||||
issueHandler, err := NewIssueHandlerFromConfig(ctx, conf)
|
||||
if err != nil {
|
||||
return nil, errors.Wrap(err, "could not configure explorer handler from config")
|
||||
return nil, errors.Wrap(err, "could not configure issue handler from config")
|
||||
}
|
||||
|
||||
opts = append(opts, webui.WithMount("/", authMiddleware(issueHandler)))
|
||||
|
Reference in New Issue
Block a user