From 6feba85807047e5d80164b615d2baacd63d72997 Mon Sep 17 00:00:00 2001 From: Michael Desa Date: Thu, 30 Nov 2017 15:01:52 -0500 Subject: [PATCH] Change NewUsersNotSuperAdmin to SuperAdminFirstUserOnly --- server/me.go | 2 +- server/me_test.go | 56 +++++++++++++++++++++++------------------------ server/server.go | 16 ++++++-------- server/service.go | 13 +++++------ 4 files changed, 42 insertions(+), 45 deletions(-) diff --git a/server/me.go b/server/me.go index b228a4b4d..c2884b6ad 100644 --- a/server/me.go +++ b/server/me.go @@ -313,7 +313,7 @@ func (s *Service) newUsersAreSuperAdmin() bool { if s.firstUser() { return true } - return !s.NewUsersNotSuperAdmin + return !s.SuperAdminFirstUserOnly } func (s *Service) usersOrganizations(ctx context.Context, u *chronograf.User) ([]chronograf.Organization, error) { diff --git a/server/me_test.go b/server/me_test.go index a6435101d..fcbc01011 100644 --- a/server/me_test.go +++ b/server/me_test.go @@ -21,11 +21,11 @@ type MockUsers struct{} func TestService_Me(t *testing.T) { type fields struct { - UsersStore chronograf.UsersStore - OrganizationsStore chronograf.OrganizationsStore - Logger chronograf.Logger - UseAuth bool - NewUsersNotSuperAdmin bool + UsersStore chronograf.UsersStore + OrganizationsStore chronograf.OrganizationsStore + Logger chronograf.Logger + UseAuth bool + SuperAdminFirstUserOnly bool } type args struct { w *httptest.ResponseRecorder @@ -47,9 +47,9 @@ func TestService_Me(t *testing.T) { r: httptest.NewRequest("GET", "http://example.com/foo", nil), }, fields: fields{ - UseAuth: true, - NewUsersNotSuperAdmin: true, - Logger: log.New(log.DebugLevel), + UseAuth: true, + SuperAdminFirstUserOnly: true, + Logger: log.New(log.DebugLevel), OrganizationsStore: &mocks.OrganizationsStore{ DefaultOrganizationF: func(ctx context.Context) (*chronograf.Organization, error) { return &chronograf.Organization{ @@ -179,9 +179,9 @@ func TestService_Me(t *testing.T) { r: httptest.NewRequest("GET", "http://example.com/foo", nil), }, fields: fields{ - UseAuth: true, - NewUsersNotSuperAdmin: false, - Logger: log.New(log.DebugLevel), + UseAuth: true, + SuperAdminFirstUserOnly: false, + Logger: log.New(log.DebugLevel), OrganizationsStore: &mocks.OrganizationsStore{ DefaultOrganizationF: func(ctx context.Context) (*chronograf.Organization, error) { return &chronograf.Organization{ @@ -235,9 +235,9 @@ func TestService_Me(t *testing.T) { r: httptest.NewRequest("GET", "http://example.com/foo", nil), }, fields: fields{ - UseAuth: true, - NewUsersNotSuperAdmin: true, - Logger: log.New(log.DebugLevel), + UseAuth: true, + SuperAdminFirstUserOnly: true, + Logger: log.New(log.DebugLevel), OrganizationsStore: &mocks.OrganizationsStore{ DefaultOrganizationF: func(ctx context.Context) (*chronograf.Organization, error) { return &chronograf.Organization{ @@ -291,9 +291,9 @@ func TestService_Me(t *testing.T) { r: httptest.NewRequest("GET", "http://example.com/foo", nil), }, fields: fields{ - UseAuth: true, - NewUsersNotSuperAdmin: true, - Logger: log.New(log.DebugLevel), + UseAuth: true, + SuperAdminFirstUserOnly: true, + Logger: log.New(log.DebugLevel), OrganizationsStore: &mocks.OrganizationsStore{ DefaultOrganizationF: func(ctx context.Context) (*chronograf.Organization, error) { return &chronograf.Organization{ @@ -347,8 +347,8 @@ func TestService_Me(t *testing.T) { r: httptest.NewRequest("GET", "http://example.com/foo", nil), }, fields: fields{ - UseAuth: true, - NewUsersNotSuperAdmin: true, + UseAuth: true, + SuperAdminFirstUserOnly: true, OrganizationsStore: &mocks.OrganizationsStore{ DefaultOrganizationF: func(ctx context.Context) (*chronograf.Organization, error) { return &chronograf.Organization{ @@ -396,9 +396,9 @@ func TestService_Me(t *testing.T) { r: httptest.NewRequest("GET", "http://example.com/foo", nil), }, fields: fields{ - UseAuth: false, - NewUsersNotSuperAdmin: true, - Logger: log.New(log.DebugLevel), + UseAuth: false, + SuperAdminFirstUserOnly: true, + Logger: log.New(log.DebugLevel), }, wantStatus: http.StatusOK, wantContentType: "application/json", @@ -412,9 +412,9 @@ func TestService_Me(t *testing.T) { r: httptest.NewRequest("GET", "http://example.com/foo", nil), }, fields: fields{ - UseAuth: true, - NewUsersNotSuperAdmin: true, - Logger: log.New(log.DebugLevel), + UseAuth: true, + SuperAdminFirstUserOnly: true, + Logger: log.New(log.DebugLevel), }, wantStatus: http.StatusUnprocessableEntity, principal: oauth2.Principal{ @@ -476,9 +476,9 @@ func TestService_Me(t *testing.T) { UsersStore: tt.fields.UsersStore, OrganizationsStore: tt.fields.OrganizationsStore, }, - Logger: tt.fields.Logger, - UseAuth: tt.fields.UseAuth, - NewUsersNotSuperAdmin: tt.fields.NewUsersNotSuperAdmin, + Logger: tt.fields.Logger, + UseAuth: tt.fields.UseAuth, + SuperAdminFirstUserOnly: tt.fields.SuperAdminFirstUserOnly, } s.Me(tt.args.w, tt.args.r) diff --git a/server/server.go b/server/server.go index 17f701568..dd3f675c0 100644 --- a/server/server.go +++ b/server/server.go @@ -52,13 +52,12 @@ type Server struct { NewSources string `long:"new-sources" description:"Config for adding a new InfluxDB source and Kapacitor server, in JSON as an array of objects, and surrounded by single quotes. E.g. --new-sources='[{\"influxdb\":{\"name\":\"Influx 1\",\"username\":\"user1\",\"password\":\"pass1\",\"url\":\"http://localhost:8086\",\"metaUrl\":\"http://metaurl.com\",\"type\":\"influx-enterprise\",\"insecureSkipVerify\":false,\"default\":true,\"telegraf\":\"telegraf\",\"sharedSecret\":\"cubeapples\"},\"kapacitor\":{\"name\":\"Kapa 1\",\"url\":\"http://localhost:9092\",\"active\":true}}]'" env:"NEW_SOURCES" hidden:"true"` - Develop bool `short:"d" long:"develop" description:"Run server in develop mode."` - BoltPath string `short:"b" long:"bolt-path" description:"Full path to boltDB file (e.g. './chronograf-v1.db')" env:"BOLT_PATH" default:"chronograf-v1.db"` - CannedPath string `short:"c" long:"canned-path" description:"Path to directory of pre-canned application layouts (/usr/share/chronograf/canned)" env:"CANNED_PATH" default:"canned"` - TokenSecret string `short:"t" long:"token-secret" description:"Secret to sign tokens" env:"TOKEN_SECRET"` - AuthDuration time.Duration `long:"auth-duration" default:"720h" description:"Total duration of cookie life for authentication (in hours). 0 means authentication expires on browser close." env:"AUTH_DURATION"` - // TODO(desa): think of a better name - NewUsersNotSuperAdmin bool `long:"new-users-not-superadmin" description:"All new users will not be given the SuperAdmin status" env:"NEW_USERS_NOT_SUPERADMIN"` + Develop bool `short:"d" long:"develop" description:"Run server in develop mode."` + BoltPath string `short:"b" long:"bolt-path" description:"Full path to boltDB file (e.g. './chronograf-v1.db')" env:"BOLT_PATH" default:"chronograf-v1.db"` + CannedPath string `short:"c" long:"canned-path" description:"Path to directory of pre-canned application layouts (/usr/share/chronograf/canned)" env:"CANNED_PATH" default:"canned"` + TokenSecret string `short:"t" long:"token-secret" description:"Secret to sign tokens" env:"TOKEN_SECRET"` + AuthDuration time.Duration `long:"auth-duration" default:"720h" description:"Total duration of cookie life for authentication (in hours). 0 means authentication expires on browser close." env:"AUTH_DURATION"` + SuperAdminFirstUserOnly bool `long:"superadmin-first-user-only" description:"All new users will not be given the SuperAdmin status" env:"SUPERADMIN_FIRST_USER_ONLY"` GithubClientID string `short:"i" long:"github-client-id" description:"Github Client ID for OAuth 2 support" env:"GH_CLIENT_ID"` GithubClientSecret string `short:"s" long:"github-client-secret" description:"Github Client Secret for OAuth 2 support" env:"GH_CLIENT_SECRET"` @@ -302,8 +301,7 @@ func (s *Server) Serve(ctx context.Context) error { return err } service := openService(ctx, s.BoltPath, layoutBuilder, sourcesBuilder, kapacitorBuilder, logger, s.useAuth()) - // TODO(desa): better name - service.NewUsersNotSuperAdmin = s.NewUsersNotSuperAdmin + service.SuperAdminFirstUserOnly = s.SuperAdminFirstUserOnly if err := service.HandleNewSources(ctx, s.NewSources); err != nil { logger. WithField("component", "server"). diff --git a/server/service.go b/server/service.go index ca74c64e7..06a2d525f 100644 --- a/server/service.go +++ b/server/service.go @@ -11,13 +11,12 @@ import ( // Service handles REST calls to the persistence type Service struct { - Store DataStore - TimeSeriesClient TimeSeriesClient - Logger chronograf.Logger - UseAuth bool - // TODO(desa): better name - NewUsersNotSuperAdmin bool - Databases chronograf.Databases + Store DataStore + TimeSeriesClient TimeSeriesClient + Logger chronograf.Logger + UseAuth bool + SuperAdminFirstUserOnly bool + Databases chronograf.Databases } // TimeSeriesClient returns the correct client for a time series database.