@@ -426,6 +426,7 @@ func (impl *Implm) Run(
|
|||||||
BaseURL: impl.cfg.BaseURL,
|
BaseURL: impl.cfg.BaseURL,
|
||||||
Agent: agent,
|
Agent: agent,
|
||||||
CustomDomainCname: impl.cfg.CustomDomains.CnameTarget,
|
CustomDomainCname: impl.cfg.CustomDomains.CnameTarget,
|
||||||
|
TokenSecret: impl.cfg.Auth.Cookie.Secret,
|
||||||
Logger: l.Named("http.server"),
|
Logger: l.Named("http.server"),
|
||||||
Cookie: securecookie.Config{
|
Cookie: securecookie.Config{
|
||||||
Name: impl.cfg.Auth.Cookie.Name,
|
Name: impl.cfg.Auth.Cookie.Name,
|
||||||
|
|||||||
@@ -133,6 +133,7 @@ func NewServer(cfg Config) (*Server, error) {
|
|||||||
cfg.Logger.Named("mcp.v1"),
|
cfg.Logger.Named("mcp.v1"),
|
||||||
cfg.Probo,
|
cfg.Probo,
|
||||||
cfg.IAM,
|
cfg.IAM,
|
||||||
|
cfg.TokenSecret,
|
||||||
),
|
),
|
||||||
slackHandler: slack_v1.NewMux(
|
slackHandler: slack_v1.NewMux(
|
||||||
cfg.Logger.Named("slack.v1"),
|
cfg.Logger.Named("slack.v1"),
|
||||||
@@ -143,6 +144,7 @@ func NewServer(cfg Config) (*Server, error) {
|
|||||||
cfg.Logger.Named("connect.v1"),
|
cfg.Logger.Named("connect.v1"),
|
||||||
cfg.IAM,
|
cfg.IAM,
|
||||||
cfg.Cookie,
|
cfg.Cookie,
|
||||||
|
cfg.TokenSecret,
|
||||||
cfg.BaseURL,
|
cfg.BaseURL,
|
||||||
),
|
),
|
||||||
}, nil
|
}, nil
|
||||||
|
|||||||
@@ -36,13 +36,13 @@ func APIKeyFromContext(ctx context.Context) *coredata.PersonalAPIKey {
|
|||||||
return apiKey
|
return apiKey
|
||||||
}
|
}
|
||||||
|
|
||||||
func NewAPIKeyMiddleware(svc *iam.Service) func(next http.Handler) http.Handler {
|
func NewAPIKeyMiddleware(svc *iam.Service, tokenSecret string) func(next http.Handler) http.Handler {
|
||||||
return func(next http.Handler) http.Handler {
|
return func(next http.Handler) http.Handler {
|
||||||
return http.HandlerFunc(
|
return http.HandlerFunc(
|
||||||
func(w http.ResponseWriter, r *http.Request) {
|
func(w http.ResponseWriter, r *http.Request) {
|
||||||
ctx := r.Context()
|
ctx := r.Context()
|
||||||
|
|
||||||
tokenValue, err := securetoken.Get(r, "")
|
tokenValue, err := securetoken.Get(r, tokenSecret)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
next.ServeHTTP(w, r)
|
next.ServeHTTP(w, r)
|
||||||
return
|
return
|
||||||
|
|||||||
@@ -82,7 +82,7 @@ func NewMux(
|
|||||||
safeRedirect := &saferedirect.SafeRedirect{AllowedHost: baseURL.Host()}
|
safeRedirect := &saferedirect.SafeRedirect{AllowedHost: baseURL.Host()}
|
||||||
|
|
||||||
r.Use(connect_v1.NewSessionMiddleware(iamSvc, cookieConfig))
|
r.Use(connect_v1.NewSessionMiddleware(iamSvc, cookieConfig))
|
||||||
r.Use(connect_v1.NewAPIKeyMiddleware(iamSvc))
|
r.Use(connect_v1.NewAPIKeyMiddleware(iamSvc, tokenSecret))
|
||||||
|
|
||||||
config := schema.Config{
|
config := schema.Config{
|
||||||
Resolvers: &Resolver{
|
Resolvers: &Resolver{
|
||||||
@@ -317,13 +317,6 @@ func (r *Resolver) ProboService(ctx context.Context, tenantID gid.TenantID) *pro
|
|||||||
|
|
||||||
func (r *Resolver) MustAuthorize(ctx context.Context, entityID gid.GID, action iam.Action) {
|
func (r *Resolver) MustAuthorize(ctx context.Context, entityID gid.GID, action iam.Action) {
|
||||||
identity := connect_v1.IdentityFromContext(ctx)
|
identity := connect_v1.IdentityFromContext(ctx)
|
||||||
// TODO: Add API key authorization
|
|
||||||
// apiKey := connect_v1.APIKeyFromContext(ctx)
|
|
||||||
|
|
||||||
// var credentialID *gid.GID
|
|
||||||
// if apiKey != nil {
|
|
||||||
// credentialID = &apiKey.ID
|
|
||||||
// }
|
|
||||||
|
|
||||||
err := r.iam.Authorizer.Authorize(
|
err := r.iam.Authorizer.Authorize(
|
||||||
ctx,
|
ctx,
|
||||||
|
|||||||
@@ -20,7 +20,7 @@ func (r *Resolver) ProboService(ctx context.Context, objectID gid.GID) *probo.Te
|
|||||||
return r.proboSvc.WithTenant(objectID.TenantID())
|
return r.proboSvc.WithTenant(objectID.TenantID())
|
||||||
}
|
}
|
||||||
|
|
||||||
func NewMux(logger *log.Logger, proboSvc *probo.Service, iamSvc *iam.Service) *chi.Mux {
|
func NewMux(logger *log.Logger, proboSvc *probo.Service, iamSvc *iam.Service, tokenSecret string) *chi.Mux {
|
||||||
logger = logger.Named("mcp.v1")
|
logger = logger.Named("mcp.v1")
|
||||||
|
|
||||||
logger.Info("initializing MCP server")
|
logger.Info("initializing MCP server")
|
||||||
@@ -52,7 +52,7 @@ func NewMux(logger *log.Logger, proboSvc *probo.Service, iamSvc *iam.Service) *c
|
|||||||
)
|
)
|
||||||
|
|
||||||
r := chi.NewMux()
|
r := chi.NewMux()
|
||||||
r.Use(connect_v1.NewAPIKeyMiddleware(iamSvc))
|
r.Use(connect_v1.NewAPIKeyMiddleware(iamSvc, tokenSecret))
|
||||||
r.Handle("/", RequireAPIKeyHandler(logger, handler))
|
r.Handle("/", RequireAPIKeyHandler(logger, handler))
|
||||||
|
|
||||||
logger.Info("MCP server initialized successfully")
|
logger.Info("MCP server initialized successfully")
|
||||||
|
|||||||
@@ -47,6 +47,7 @@ type Config struct {
|
|||||||
Trust *trust.Service
|
Trust *trust.Service
|
||||||
Slack *slack.Service
|
Slack *slack.Service
|
||||||
Cookie securecookie.Config
|
Cookie securecookie.Config
|
||||||
|
TokenSecret string
|
||||||
ConnectorRegistry *connector.ConnectorRegistry
|
ConnectorRegistry *connector.ConnectorRegistry
|
||||||
Agent *agents.Agent
|
Agent *agents.Agent
|
||||||
CustomDomainCname string
|
CustomDomainCname string
|
||||||
@@ -72,6 +73,7 @@ func NewServer(cfg Config) (*Server, error) {
|
|||||||
Trust: cfg.Trust,
|
Trust: cfg.Trust,
|
||||||
Slack: cfg.Slack,
|
Slack: cfg.Slack,
|
||||||
Cookie: cfg.Cookie,
|
Cookie: cfg.Cookie,
|
||||||
|
TokenSecret: cfg.TokenSecret,
|
||||||
ConnectorRegistry: cfg.ConnectorRegistry,
|
ConnectorRegistry: cfg.ConnectorRegistry,
|
||||||
CustomDomainCname: cfg.CustomDomainCname,
|
CustomDomainCname: cfg.CustomDomainCname,
|
||||||
Logger: cfg.Logger.Named("api"),
|
Logger: cfg.Logger.Named("api"),
|
||||||
|
|||||||
Reference in New Issue
Block a user