Skip to content
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

[Task] create default user when server startup #295

Merged
merged 2 commits into from
Aug 31, 2018
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 5 additions & 3 deletions src/server/handler_user_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -400,7 +400,6 @@ func (suite *UserTestSuite) TestListUser() {
FirstName: "John",
LastName: "Doe",
PhoneNumber: "0914141414",
CreatedAt: &time.Time{},
})
}

Expand All @@ -415,6 +414,7 @@ func (suite *UserTestSuite) TestListUser() {
pageSize string
expectSize int
}{
// the extra 1 should include administrator user in database. Auto-insert when server startup
{"", "", count},
{"1", "1", count},
{"1", "3", count},
Expand All @@ -439,9 +439,11 @@ func (suite *UserTestSuite) TestListUser() {
retUsers := []entity.User{}
err = json.Unmarshal(httpWriter.Body.Bytes(), &retUsers)
suite.NoError(err)
// Pop out the first test user. test user is generated in main_test.go

// the propose of test user is for others api to get a JWT token
_, retUsers = retUsers[0], retUsers[1:]
// Pop out the first test user. test user is generated in main_test.go
_, _, retUsers = retUsers[0], retUsers[1], retUsers[2:]

suite.Equal(tc.expectSize, len(retUsers))
for i, u := range retUsers {
suite.Equal(users[i].DisplayName, u.DisplayName)
Expand Down
2 changes: 1 addition & 1 deletion src/server/main_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@ func init() {
Username: "[email protected]",
Password: "test",
},
DisplayName: "John Doe",
DisplayName: "mainTestUser",
Role: "root",
FirstName: "John",
LastName: "Doe",
Expand Down
36 changes: 36 additions & 0 deletions src/serviceprovider/default_admin.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
package serviceprovider

import (
"github.com/linkernetworks/mongo"
"github.com/linkernetworks/utils/timeutils"
"github.com/linkernetworks/vortex/src/entity"
"gopkg.in/mgo.v2/bson"
)

func createDefaultUser(mongoService *mongo.Service) error {
session := mongoService.NewSession()
defer session.Close()
user := entity.User{
ID: bson.NewObjectId(),
LoginCredential: entity.LoginCredential{
Username: "[email protected]",
Password: "password",
},
DisplayName: "administrator",
Role: "root",
FirstName: "administrator",
LastName: "administrator",
PhoneNumber: "09521111111",
CreatedAt: timeutils.Now(),
}
q := bson.M{"loginCredential.username": user.LoginCredential.Username}

count, err := session.Count(entity.UserCollectionName, q)
if err != nil {
return err
} else if count > 0 {
// admin user has already exists. Do not insert
return nil
}
return session.Insert(entity.UserCollectionName, &user)
}
36 changes: 36 additions & 0 deletions src/serviceprovider/default_admin_test.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
package serviceprovider

import (
"testing"

"github.com/linkernetworks/mongo"
"github.com/linkernetworks/vortex/src/config"
"github.com/linkernetworks/vortex/src/entity"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/suite"
)

type CreateDefaultUserSuite struct {
suite.Suite
cf config.Config
session *mongo.Session
service *mongo.Service
}

func (suite *CreateDefaultUserSuite) SetupSuite() {
suite.cf = config.MustRead("../../config/testing.json")
sp := NewForTesting(suite.cf)
suite.service = sp.Mongo

suite.session = suite.service.NewSession()
}

func (suite *CreateDefaultUserSuite) TearDownSuite() {
suite.session.Remove(entity.UserCollectionName, "loginCredential.username", "[email protected]")
defer suite.session.Close()
}

func (suite *CreateDefaultUserSuite) TestDefaultUserCreate(t *testing.T) {
err := createDefaultUser(suite.service)
assert.NoError(t, err)
}
4 changes: 4 additions & 0 deletions src/serviceprovider/serviceprovider.go
Original file line number Diff line number Diff line change
Expand Up @@ -70,6 +70,10 @@ func New(cf config.Config) *Container {
Validator: validate,
}

if err := createDefaultUser(sp.Mongo); err != nil {
// ignore insert error
logger.Infof("Create Default admin user failed: %v", err)
}
return sp
}

Expand Down