-
Notifications
You must be signed in to change notification settings - Fork 1.7k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
server,cmd: Add flag for disabling registation #144
Changes from 1 commit
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -44,6 +44,8 @@ func main() { | |
emailFrom := fs.String("email-from", "[email protected]", "emails sent from dex will come from this address") | ||
emailConfig := fs.String("email-cfg", "./static/fixtures/emailer.json", "configures emailer.") | ||
|
||
enableRegistration := fs.Bool("enable-registration", true, "Allows users to self-register") | ||
|
||
noDB := fs.Bool("no-db", false, "manage entities in-process w/o any encryption, used only for single-node testing") | ||
|
||
// UI-related: | ||
|
@@ -113,13 +115,14 @@ func main() { | |
} | ||
|
||
scfg := server.ServerConfig{ | ||
IssuerURL: *issuer, | ||
TemplateDir: *templates, | ||
EmailTemplateDirs: emailTemplateDirs, | ||
EmailFromAddress: *emailFrom, | ||
EmailerConfigFile: *emailConfig, | ||
IssuerName: *issuerName, | ||
IssuerLogoURL: *issuerLogoURL, | ||
IssuerURL: *issuer, | ||
TemplateDir: *templates, | ||
EmailTemplateDirs: emailTemplateDirs, | ||
EmailFromAddress: *emailFrom, | ||
EmailerConfigFile: *emailConfig, | ||
IssuerName: *issuerName, | ||
IssuerLogoURL: *issuerLogoURL, | ||
EnableRegistration: *enableRegistration, | ||
} | ||
|
||
if *noDB { | ||
|
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -25,14 +25,15 @@ import ( | |
) | ||
|
||
type ServerConfig struct { | ||
IssuerURL string | ||
IssuerName string | ||
IssuerLogoURL string | ||
TemplateDir string | ||
EmailTemplateDirs []string | ||
EmailFromAddress string | ||
EmailerConfigFile string | ||
StateConfig StateConfigurer | ||
IssuerURL string | ||
IssuerName string | ||
IssuerLogoURL string | ||
TemplateDir string | ||
EmailTemplateDirs []string | ||
EmailFromAddress string | ||
EmailerConfigFile string | ||
StateConfig StateConfigurer | ||
EnableRegistration bool | ||
} | ||
|
||
type StateConfigurer interface { | ||
|
@@ -56,7 +57,7 @@ func (cfg *ServerConfig) Server() (*Server, error) { | |
return nil, err | ||
} | ||
|
||
tpl, err := getTemplates(cfg.IssuerName, cfg.IssuerLogoURL, cfg.TemplateDir) | ||
tpl, err := getTemplates(cfg.IssuerName, cfg.IssuerLogoURL, cfg.EnableRegistration, cfg.TemplateDir) | ||
if err != nil { | ||
return nil, err | ||
} | ||
|
@@ -69,6 +70,8 @@ func (cfg *ServerConfig) Server() (*Server, error) { | |
|
||
HealthChecks: []health.Checkable{km}, | ||
Connectors: []connector.Connector{}, | ||
|
||
EnableRegistration: cfg.EnableRegistration, | ||
} | ||
|
||
err = cfg.StateConfig.Configure(&srv) | ||
|
@@ -183,14 +186,18 @@ func (cfg *MultiServerConfig) Configure(srv *Server) error { | |
return nil | ||
} | ||
|
||
func getTemplates(issuerName, issuerLogoURL string, dir string) (*template.Template, error) { | ||
func getTemplates(issuerName, | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Would you consider moving the line break until after the type, like func getTemplates(issuerName, issuerLogoURL string,
enableRegister bool....) There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. yeah, nicer. |
||
issuerLogoURL string, enableRegister bool, dir string) (*template.Template, error) { | ||
tpl := template.New("").Funcs(map[string]interface{}{ | ||
"issuerName": func() string { | ||
return issuerName | ||
}, | ||
"issuerLogoURL": func() string { | ||
return issuerLogoURL | ||
}, | ||
"enableRegister": func() bool { | ||
return enableRegister | ||
}, | ||
}) | ||
|
||
return tpl.ParseGlob(dir + "/*.html") | ||
|
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -51,7 +51,7 @@ func (c *fakeConnector) TrustedEmailProvider() bool { | |
|
||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. It might be worth a test case demonstrating a rejection when an inbound request attempts to submit with There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. They don't really get rejected in this case, it just changes the UI. Given that the real protection is below, I don't think it's crucial |
||
func TestHandleAuthFuncMethodNotAllowed(t *testing.T) { | ||
for _, m := range []string{"POST", "PUT", "DELETE"} { | ||
hdlr := handleAuthFunc(nil, nil, nil) | ||
hdlr := handleAuthFunc(nil, nil, nil, true) | ||
req, err := http.NewRequest(m, "http://example.com", nil) | ||
if err != nil { | ||
t.Errorf("case %s: unable to create HTTP request: %v", m, err) | ||
|
@@ -170,7 +170,7 @@ func TestHandleAuthFuncResponsesSingleRedirectURL(t *testing.T) { | |
} | ||
|
||
for i, tt := range tests { | ||
hdlr := handleAuthFunc(srv, idpcs, nil) | ||
hdlr := handleAuthFunc(srv, idpcs, nil, true) | ||
w := httptest.NewRecorder() | ||
u := fmt.Sprintf("http://server.example.com?%s", tt.query.Encode()) | ||
req, err := http.NewRequest("GET", u, nil) | ||
|
@@ -271,7 +271,7 @@ func TestHandleAuthFuncResponsesMultipleRedirectURLs(t *testing.T) { | |
} | ||
|
||
for i, tt := range tests { | ||
hdlr := handleAuthFunc(srv, idpcs, nil) | ||
hdlr := handleAuthFunc(srv, idpcs, nil, true) | ||
w := httptest.NewRecorder() | ||
u := fmt.Sprintf("http://server.example.com?%s", tt.query.Encode()) | ||
req, err := http.NewRequest("GET", u, nil) | ||
|
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -72,6 +72,7 @@ type Server struct { | |
PasswordInfoRepo user.PasswordInfoRepo | ||
RefreshTokenRepo refresh.RefreshTokenRepo | ||
UserEmailer *useremail.UserEmailer | ||
EnableRegistration bool | ||
|
||
localConnectorID string | ||
} | ||
|
@@ -198,11 +199,15 @@ func (s *Server) HTTPHandler() http.Handler { | |
clock := clockwork.NewRealClock() | ||
mux := http.NewServeMux() | ||
mux.HandleFunc(httpPathDiscovery, handleDiscoveryFunc(s.ProviderConfig())) | ||
mux.HandleFunc(httpPathAuth, handleAuthFunc(s, s.Connectors, s.LoginTemplate)) | ||
mux.HandleFunc(httpPathAuth, handleAuthFunc(s, s.Connectors, s.LoginTemplate, s.EnableRegistration)) | ||
mux.HandleFunc(httpPathToken, handleTokenFunc(s)) | ||
mux.HandleFunc(httpPathKeys, handleKeysFunc(s.KeyManager, clock)) | ||
mux.Handle(httpPathHealth, makeHealthHandler(checks)) | ||
mux.HandleFunc(httpPathRegister, handleRegisterFunc(s)) | ||
|
||
if s.EnableRegistration { | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. SWEET! This is a nice way to ensure that registration can't happen - it isn't even ever wired up! |
||
mux.HandleFunc(httpPathRegister, handleRegisterFunc(s)) | ||
} | ||
|
||
mux.HandleFunc(httpPathEmailVerify, handleEmailVerifyFunc(s.VerifyEmailTemplate, | ||
s.IssuerURL, s.KeyManager.PublicKeys, s.UserManager)) | ||
|
||
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Should this default to true? While we might break existing installs if it defaults to false, it seems safer to have open registration be the explicit choice.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I had the same thought process. yeah, you're probably right.