diff options
author | =Corey Hulen <corey@hulen.com> | 2015-09-04 11:59:10 -0700 |
---|---|---|
committer | =Corey Hulen <corey@hulen.com> | 2015-09-04 11:59:10 -0700 |
commit | 58d0d9afd286afd715e9f04825e1305045d404e2 (patch) | |
tree | 10615aa68c68106684503fb18ae4e4ef8998bc22 | |
parent | 05d95d80a896d14474c7f7384d67b9edd524b922 (diff) | |
download | chat-58d0d9afd286afd715e9f04825e1305045d404e2.tar.gz chat-58d0d9afd286afd715e9f04825e1305045d404e2.tar.bz2 chat-58d0d9afd286afd715e9f04825e1305045d404e2.zip |
Adding cmd line options
-rw-r--r-- | api/context.go | 4 | ||||
-rw-r--r-- | api/post.go | 2 | ||||
-rw-r--r-- | api/team.go | 36 | ||||
-rw-r--r-- | api/user.go | 87 | ||||
-rw-r--r-- | api/user_test.go | 1 | ||||
-rw-r--r-- | mattermost.go | 338 | ||||
-rw-r--r-- | model/user.go | 47 | ||||
-rw-r--r-- | model/user_test.go | 10 | ||||
-rw-r--r-- | store/sql_team_store.go | 15 | ||||
-rw-r--r-- | store/store.go | 1 | ||||
-rw-r--r-- | utils/config.go | 27 |
11 files changed, 472 insertions, 96 deletions
diff --git a/api/context.go b/api/context.go index aaf304e2c..2beea2408 100644 --- a/api/context.go +++ b/api/context.go @@ -285,7 +285,7 @@ func (c *Context) HasPermissionsToChannel(sc store.StoreChannel, where string) b } func (c *Context) IsSystemAdmin() bool { - if strings.Contains(c.Session.Roles, model.ROLE_SYSTEM_ADMIN) && IsPrivateIpAddress(c.IpAddress) { + if model.IsInRole(c.Session.Roles, model.ROLE_SYSTEM_ADMIN) && IsPrivateIpAddress(c.IpAddress) { return true } return false @@ -297,7 +297,7 @@ func (c *Context) IsTeamAdmin(userId string) bool { return false } else { user := uresult.Data.(*model.User) - return strings.Contains(c.Session.Roles, model.ROLE_ADMIN) && user.TeamId == c.Session.TeamId + return model.IsInRole(c.Session.Roles, model.ROLE_ADMIN) && user.TeamId == c.Session.TeamId } } diff --git a/api/post.go b/api/post.go index 5363fdf79..f969dd031 100644 --- a/api/post.go +++ b/api/post.go @@ -716,7 +716,7 @@ func deletePost(c *Context, w http.ResponseWriter, r *http.Request) { return } - if post.UserId != c.Session.UserId && !strings.Contains(c.Session.Roles, model.ROLE_ADMIN) { + if post.UserId != c.Session.UserId && !model.IsInRole(c.Session.Roles, model.ROLE_ADMIN) { c.Err = model.NewAppError("deletePost", "You do not have the appropriate permissions", "") c.Err.StatusCode = http.StatusForbidden return diff --git a/api/team.go b/api/team.go index 8cce384c3..8c0be9486 100644 --- a/api/team.go +++ b/api/team.go @@ -239,47 +239,55 @@ func createTeamFromSignup(c *Context, w http.ResponseWriter, r *http.Request) { } func createTeam(c *Context, w http.ResponseWriter, r *http.Request) { + team := model.TeamFromJson(r.Body) + rteam := CreateTeam(c, team) + if c.Err != nil { + return + } + + w.Write([]byte(rteam.ToJson())) +} + +func CreateTeam(c *Context, team *model.Team) *model.Team { if utils.Cfg.ServiceSettings.DisableEmailSignUp { c.Err = model.NewAppError("createTeam", "Team sign-up with email is disabled.", "") c.Err.StatusCode = http.StatusNotImplemented - return + return nil } - team := model.TeamFromJson(r.Body) - if team == nil { c.SetInvalidParam("createTeam", "team") - return + return nil } if !isTreamCreationAllowed(c, team.Email) { - return + return nil } if utils.Cfg.ServiceSettings.Mode != utils.MODE_DEV { - c.Err = model.NewAppError("createTeam", "The mode does not allow network creation without a valid invite", "") - return + c.Err = model.NewAppError("CreateTeam", "The mode does not allow network creation without a valid invite", "") + return nil } if result := <-Srv.Store.Team().Save(team); result.Err != nil { c.Err = result.Err - return + return nil } else { rteam := result.Data.(*model.Team) if _, err := CreateDefaultChannels(c, rteam.Id); err != nil { c.Err = err - return + return nil } if rteam.AllowValet { CreateValet(c, rteam) if c.Err != nil { - return + return nil } } - w.Write([]byte(rteam.ToJson())) + return rteam } } @@ -467,7 +475,7 @@ func InviteMembers(c *Context, team *model.Team, user *model.User, invites []str sender := user.GetDisplayName() senderRole := "" - if strings.Contains(user.Roles, model.ROLE_ADMIN) || strings.Contains(user.Roles, model.ROLE_SYSTEM_ADMIN) { + if model.IsInRole(user.Roles, model.ROLE_ADMIN) || model.IsInRole(user.Roles, model.ROLE_SYSTEM_ADMIN) { senderRole = "administrator" } else { senderRole = "member" @@ -526,7 +534,7 @@ func updateTeamDisplayName(c *Context, w http.ResponseWriter, r *http.Request) { return } - if !strings.Contains(c.Session.Roles, model.ROLE_ADMIN) { + if !model.IsInRole(c.Session.Roles, model.ROLE_ADMIN) { c.Err = model.NewAppError("updateTeamDisplayName", "You do not have the appropriate permissions", "userId="+c.Session.UserId) c.Err.StatusCode = http.StatusForbidden return @@ -566,7 +574,7 @@ func updateValetFeature(c *Context, w http.ResponseWriter, r *http.Request) { return } - if !strings.Contains(c.Session.Roles, model.ROLE_ADMIN) { + if !model.IsInRole(c.Session.Roles, model.ROLE_ADMIN) { c.Err = model.NewAppError("updateValetFeature", "You do not have the appropriate permissions", "userId="+c.Session.UserId) c.Err.StatusCode = http.StatusForbidden return diff --git a/api/user.go b/api/user.go index d69244fad..f4ebcaaf8 100644 --- a/api/user.go +++ b/api/user.go @@ -925,7 +925,16 @@ func updateRoles(c *Context, w http.ResponseWriter, r *http.Request) { } new_roles := props["new_roles"] - // no check since we allow the clearing of Roles + if model.IsValidRoles(new_roles) { + c.SetInvalidParam("updateRoles", "new_roles") + return + } + + if model.IsInRole(new_roles, model.ROLE_SYSTEM_ADMIN) { + c.Err = model.NewAppError("updateRoles", "The system_admin role can only be set from the command line", "") + c.Err.StatusCode = http.StatusForbidden + return + } var user *model.User if result := <-Srv.Store.User().Get(user_id); result.Err != nil { @@ -939,43 +948,15 @@ func updateRoles(c *Context, w http.ResponseWriter, r *http.Request) { return } - if !strings.Contains(c.Session.Roles, model.ROLE_ADMIN) && !c.IsSystemAdmin() { + if !model.IsInRole(c.Session.Roles, model.ROLE_ADMIN) && !c.IsSystemAdmin() { c.Err = model.NewAppError("updateRoles", "You do not have the appropriate permissions", "userId="+user_id) c.Err.StatusCode = http.StatusForbidden return } - // make sure there is at least 1 other active admin - if strings.Contains(user.Roles, model.ROLE_ADMIN) && !strings.Contains(new_roles, model.ROLE_ADMIN) { - if result := <-Srv.Store.User().GetProfiles(user.TeamId); result.Err != nil { - c.Err = result.Err - return - } else { - activeAdmins := -1 - profileUsers := result.Data.(map[string]*model.User) - for _, profileUser := range profileUsers { - if profileUser.DeleteAt == 0 && strings.Contains(profileUser.Roles, model.ROLE_ADMIN) { - activeAdmins = activeAdmins + 1 - } - } - - if activeAdmins <= 0 { - c.Err = model.NewAppError("updateRoles", "There must be at least one active admin", "userId="+user_id) - return - } - } - } - - user.Roles = new_roles - - var ruser *model.User - if result := <-Srv.Store.User().Update(user, true); result.Err != nil { - c.Err = result.Err + ruser := UpdateRoles(c, user, new_roles) + if c.Err != nil { return - } else { - c.LogAuditWithUserId(user.Id, "roles="+new_roles) - - ruser = result.Data.([2]*model.User)[0] } uchan := Srv.Store.Session().UpdateRoles(user.Id, new_roles) @@ -1002,6 +983,42 @@ func updateRoles(c *Context, w http.ResponseWriter, r *http.Request) { w.Write([]byte(ruser.ToJson())) } +func UpdateRoles(c *Context, user *model.User, roles string) *model.User { + // make sure there is at least 1 other active admin + if model.IsInRole(user.Roles, model.ROLE_ADMIN) && !model.IsInRole(roles, model.ROLE_ADMIN) { + if result := <-Srv.Store.User().GetProfiles(user.TeamId); result.Err != nil { + c.Err = result.Err + return nil + } else { + activeAdmins := -1 + profileUsers := result.Data.(map[string]*model.User) + for _, profileUser := range profileUsers { + if profileUser.DeleteAt == 0 && model.IsInRole(profileUser.Roles, model.ROLE_ADMIN) { + activeAdmins = activeAdmins + 1 + } + } + + if activeAdmins <= 0 { + c.Err = model.NewAppError("updateRoles", "There must be at least one active admin", "") + return nil + } + } + } + + user.Roles = roles + + var ruser *model.User + if result := <-Srv.Store.User().Update(user, true); result.Err != nil { + c.Err = result.Err + return nil + } else { + c.LogAuditWithUserId(user.Id, "roles="+roles) + ruser = result.Data.([2]*model.User)[0] + } + + return ruser +} + func updateActive(c *Context, w http.ResponseWriter, r *http.Request) { props := model.MapFromJson(r.Body) @@ -1025,14 +1042,14 @@ func updateActive(c *Context, w http.ResponseWriter, r *http.Request) { return } - if !strings.Contains(c.Session.Roles, model.ROLE_ADMIN) && !c.IsSystemAdmin() { + if !model.IsInRole(c.Session.Roles, model.ROLE_ADMIN) && !c.IsSystemAdmin() { c.Err = model.NewAppError("updateActive", "You do not have the appropriate permissions", "userId="+user_id) c.Err.StatusCode = http.StatusForbidden return } // make sure there is at least 1 other active admin - if !active && strings.Contains(user.Roles, model.ROLE_ADMIN) { + if !active && model.IsInRole(user.Roles, model.ROLE_ADMIN) { if result := <-Srv.Store.User().GetProfiles(user.TeamId); result.Err != nil { c.Err = result.Err return @@ -1040,7 +1057,7 @@ func updateActive(c *Context, w http.ResponseWriter, r *http.Request) { activeAdmins := -1 profileUsers := result.Data.(map[string]*model.User) for _, profileUser := range profileUsers { - if profileUser.DeleteAt == 0 && strings.Contains(profileUser.Roles, model.ROLE_ADMIN) { + if profileUser.DeleteAt == 0 && model.IsInRole(profileUser.Roles, model.ROLE_ADMIN) { activeAdmins = activeAdmins + 1 } } diff --git a/api/user_test.go b/api/user_test.go index b5435e3c0..8c037fdf3 100644 --- a/api/user_test.go +++ b/api/user_test.go @@ -684,6 +684,7 @@ func TestUserUpdateRoles(t *testing.T) { data["user_id"] = user2.Id if result, err := Client.UpdateUserRoles(data); err != nil { + t.Log(data["new_roles"]) t.Fatal(err) } else { if result.Data.(*model.User).Roles != "admin" { diff --git a/mattermost.go b/mattermost.go index 109692c67..54d08c243 100644 --- a/mattermost.go +++ b/mattermost.go @@ -6,46 +6,338 @@ package main import ( "flag" "fmt" + "os" + "os/signal" + "strings" + "syscall" + "time" + + l4g "code.google.com/p/log4go" "github.com/mattermost/platform/api" "github.com/mattermost/platform/manualtesting" + "github.com/mattermost/platform/model" "github.com/mattermost/platform/utils" "github.com/mattermost/platform/web" - "os" - "os/signal" - "syscall" ) -func main() { +var flagCmdCreateTeam bool +var flagCmdCreateUser bool +var flagCmdAssignRole bool +var flagCmdResetPassword bool +var flagConfigFile string +var flagEmail string +var flagPassword string +var flagTeamName string +var flagRole string +var flagRunCmds bool - pwd, _ := os.Getwd() - fmt.Println("Current working directory is set to " + pwd) +func main() { - var config = flag.String("config", "config.json", "path to config file") - var action = flag.String("action", "none", "path to config file") - flag.Parse() + parseCmds() - fmt.Println(action) + utils.LoadConfig(flagConfigFile) - if len(action) > 0 { - return + if flagRunCmds { + utils.ConfigureCmdLineLog() } - utils.LoadConfig(*config) + pwd, _ := os.Getwd() + l4g.Info("Current working directory is %v", pwd) + l4g.Info("Loaded config file from %v", utils.FindConfigFile(flagConfigFile)) + api.NewServer() api.InitApi() web.InitWeb() - api.StartServer() - // If we allow testing then listen for manual testing URL hits - if utils.Cfg.ServiceSettings.AllowTesting { - manualtesting.InitManualTesting() + if flagRunCmds { + runCmds() + } else { + api.StartServer() + + // If we allow testing then listen for manual testing URL hits + if utils.Cfg.ServiceSettings.AllowTesting { + manualtesting.InitManualTesting() + } + + // wait for kill signal before attempting to gracefully shutdown + // the running service + c := make(chan os.Signal) + signal.Notify(c, os.Interrupt, syscall.SIGINT, syscall.SIGTERM) + <-c + + api.StopServer() + } +} + +func parseCmds() { + flag.Usage = func() { + fmt.Fprintln(os.Stderr, usage) + } + + flag.StringVar(&flagConfigFile, "config", "config.json", "") + flag.StringVar(&flagEmail, "email", "", "") + flag.StringVar(&flagPassword, "password", "", "") + flag.StringVar(&flagTeamName, "team_name", "", "") + flag.StringVar(&flagRole, "role", "", "") + + flag.BoolVar(&flagCmdCreateTeam, "create_team", false, "") + flag.BoolVar(&flagCmdCreateUser, "create_user", false, "") + flag.BoolVar(&flagCmdAssignRole, "assign_role", false, "") + flag.BoolVar(&flagCmdResetPassword, "reset_password", false, "") + + flag.Parse() + + flagRunCmds = flagCmdCreateTeam || flagCmdCreateUser || flagCmdAssignRole || flagCmdResetPassword +} + +func runCmds() { + cmdCreateTeam() + cmdCreateUser() + cmdAssignRole() + cmdResetPassword() +} + +func cmdCreateTeam() { + if flagCmdCreateTeam { + if len(flagTeamName) == 0 { + fmt.Fprintln(os.Stderr, "flag needs an argument: -team_name") + flag.Usage() + os.Exit(1) + } + + if len(flagEmail) == 0 { + fmt.Fprintln(os.Stderr, "flag needs an argument: -email") + flag.Usage() + os.Exit(1) + } + + c := &api.Context{} + c.RequestId = model.NewId() + c.IpAddress = "cmd_line" + + team := &model.Team{} + team.DisplayName = flagTeamName + team.Name = flagTeamName + team.Email = flagEmail + team.Type = model.TEAM_INVITE + + api.CreateTeam(c, team) + if c.Err != nil { + if c.Err.Message != "A team with that domain already exists" { + l4g.Error("%v", c.Err) + flushLogAndExit(1) + } + } + + os.Exit(0) + } +} + +func cmdCreateUser() { + if flagCmdCreateUser { + if len(flagTeamName) == 0 { + fmt.Fprintln(os.Stderr, "flag needs an argument: -team_name") + flag.Usage() + os.Exit(1) + } + + if len(flagEmail) == 0 { + fmt.Fprintln(os.Stderr, "flag needs an argument: -email") + flag.Usage() + os.Exit(1) + } + + if len(flagPassword) == 0 { + fmt.Fprintln(os.Stderr, "flag needs an argument: -password") + flag.Usage() + os.Exit(1) + } + + c := &api.Context{} + c.RequestId = model.NewId() + c.IpAddress = "cmd_line" + + var team *model.Team + user := &model.User{} + user.Email = flagEmail + user.Password = flagPassword + splits := strings.Split(strings.Replace(flagEmail, "@", " ", -1), " ") + user.Username = splits[0] + + if result := <-api.Srv.Store.Team().GetByName(flagTeamName); result.Err != nil { + l4g.Error("%v", result.Err) + flushLogAndExit(1) + } else { + team = result.Data.(*model.Team) + user.TeamId = team.Id + } + + api.CreateUser(c, team, user) + if c.Err != nil { + if c.Err.Message != "An account with that email already exists." { + l4g.Error("%v", c.Err) + flushLogAndExit(1) + } + } + + os.Exit(0) } +} + +func cmdAssignRole() { + if flagCmdAssignRole { + if len(flagTeamName) == 0 { + fmt.Fprintln(os.Stderr, "flag needs an argument: -team_name") + flag.Usage() + os.Exit(1) + } + + if len(flagEmail) == 0 { + fmt.Fprintln(os.Stderr, "flag needs an argument: -email") + flag.Usage() + os.Exit(1) + } + + if !model.IsValidRoles(flagRole) { + fmt.Fprintln(os.Stderr, "flag invalid argument: -role") + flag.Usage() + os.Exit(1) + } + + c := &api.Context{} + c.RequestId = model.NewId() + c.IpAddress = "cmd_line" - // wait for kill signal before attempting to gracefully shutdown - // the running service - c := make(chan os.Signal) - signal.Notify(c, os.Interrupt, syscall.SIGINT, syscall.SIGTERM) - <-c + var team *model.Team + if result := <-api.Srv.Store.Team().GetByName(flagTeamName); result.Err != nil { + l4g.Error("%v", result.Err) + flushLogAndExit(1) + } else { + team = result.Data.(*model.Team) + } - api.StopServer() + var user *model.User + if result := <-api.Srv.Store.User().GetByEmail(team.Id, flagEmail); result.Err != nil { + l4g.Error("%v", result.Err) + flushLogAndExit(1) + } else { + user = result.Data.(*model.User) + } + + if !user.IsInRole(flagRole) { + if flagRole == model.ROLE_SYSTEM_ADMIN && team.Name != "admin" { + l4g.Error("system_admin can only be added to a user in the admin team") + flushLogAndExit(1) + } + + api.UpdateRoles(c, user, flagRole) + } + + os.Exit(0) + } } + +func cmdResetPassword() { + if flagCmdResetPassword { + if len(flagTeamName) == 0 { + fmt.Fprintln(os.Stderr, "flag needs an argument: -team_name") + flag.Usage() + os.Exit(1) + } + + if len(flagEmail) == 0 { + fmt.Fprintln(os.Stderr, "flag needs an argument: -email") + flag.Usage() + os.Exit(1) + } + + if len(flagPassword) == 0 { + fmt.Fprintln(os.Stderr, "flag needs an argument: -password") + flag.Usage() + os.Exit(1) + } + + c := &api.Context{} + c.RequestId = model.NewId() + c.IpAddress = "cmd_line" + + var team *model.Team + if result := <-api.Srv.Store.Team().GetByName(flagTeamName); result.Err != nil { + l4g.Error("%v", result.Err) + flushLogAndExit(1) + } else { + team = result.Data.(*model.Team) + } + + var user *model.User + if result := <-api.Srv.Store.User().GetByEmail(team.Id, flagEmail); result.Err != nil { + l4g.Error("%v", result.Err) + flushLogAndExit(1) + } else { + user = result.Data.(*model.User) + } + + if result := <-api.Srv.Store.User().UpdatePassword(user.Id, model.HashPassword(flagPassword)); result.Err != nil { + l4g.Error("%v", result.Err) + flushLogAndExit(1) + } + + os.Exit(0) + } +} + +func flushLogAndExit(code int) { + l4g.Close() + time.Sleep(time.Second) + os.Exit(code) +} + +var usage = `Mattermost commands to help configure the system +Usage: + + platform [options] + + -config="config.json" Path to the config file + + -email="user@example.com" Email address used in other commands + + -password="mypassword" Password used in other commands + + -team_name="name" The team name used in other commands + + -role="admin" The role used in other commands + valid values are + "" - The empty role is basic user + permissions + "admin" - Represents a team admin and + is used to help adminsiter one team. + "system_admin" - Represents a system + admin who has access to all teams + and configuration settings. This + role can only be created on the + team named "admin" + + -create_team Creates a team. It requres the -team_name + and -email flag to create a team. + Example: + platform -create_team -team_name="name" -email="user@example.com" + + -create_user Creates a user. It requres the -team_name, + -email and -password flag to create a user. + Example: + platform -create_user -team_name="name" -email="user@example.com" -password="mypassword" + + -assign_role Assigns role to a user. It requres the -team_name, + -email and -role flag. If you're assigning the + "system_admin" role it must be for a user on the + team_name="admin" + Example: + platform -assign_role -team_name="name" -email="user@example.com" -role="admin" + + -reset_password Resets the password for a user. It requres the + -team_name, -email and -password flag. + Example: + platform -reset_password -team_name="name" -email="user@example.com" -paossword="newpassword" + + +` diff --git a/model/user.go b/model/user.go index d82f96db3..9cec37ac6 100644 --- a/model/user.go +++ b/model/user.go @@ -15,7 +15,6 @@ import ( const ( ROLE_ADMIN = "admin" ROLE_SYSTEM_ADMIN = "system_admin" - ROLE_SYSTEM_SUPPORT = "system_support" USER_AWAY_TIMEOUT = 5 * 60 * 1000 // 5 minutes USER_OFFLINE_TIMEOUT = 1 * 60 * 1000 // 1 minute USER_OFFLINE = "offline" @@ -272,6 +271,52 @@ func (u *User) GetDisplayName() string { } } +func IsValidRoles(userRoles string) bool { + + roles := strings.Split(userRoles, " ") + + for _, r := range roles { + if !isValidRole(r) { + return false + } + } + + return true +} + +func isValidRole(role string) bool { + if role == "" { + return true + } + + if role == ROLE_ADMIN { + return true + } + + if role == ROLE_SYSTEM_ADMIN { + return true + } + + return false +} + +func (u *User) IsInRole(inRole string) bool { + return IsInRole(u.Roles, inRole) +} + +func IsInRole(userRoles string, inRole string) bool { + roles := strings.Split(userRoles, " ") + + for _, r := range roles { + if r == inRole { + return true + } + + } + + return false +} + // UserFromJson will decode the input and return a User func UserFromJson(data io.Reader) *User { decoder := json.NewDecoder(data) diff --git a/model/user_test.go b/model/user_test.go index a3b4be091..32a6f9b78 100644 --- a/model/user_test.go +++ b/model/user_test.go @@ -192,3 +192,13 @@ func TestCleanUsername(t *testing.T) { t.Fatal("didn't clean name properly") } } + +func TestRoles(t *testing.T) { + + if !IsValidRoles("admin") { + t.Fatal() + } + + //IsInRole + +} diff --git a/store/sql_team_store.go b/store/sql_team_store.go index 2784f8630..e9c205039 100644 --- a/store/sql_team_store.go +++ b/store/sql_team_store.go @@ -35,6 +35,10 @@ func (s SqlTeamStore) CreateIndexesIfNotExists() { } func (s SqlTeamStore) Save(team *model.Team) StoreChannel { + return s.SaveWithValidate(team, true) +} + +func (s SqlTeamStore) SaveWithValidate(team *model.Team, validate bool) StoreChannel { storeChannel := make(StoreChannel) go func() { @@ -49,10 +53,13 @@ func (s SqlTeamStore) Save(team *model.Team) StoreChannel { } team.PreSave() - if result.Err = team.IsValid(); result.Err != nil { - storeChannel <- result - close(storeChannel) - return + + if validate { + if result.Err = team.IsValid(); result.Err != nil { + storeChannel <- result + close(storeChannel) + return + } } if err := s.GetMaster().Insert(team); err != nil { diff --git a/store/store.go b/store/store.go index 271caa366..2770dfd16 100644 --- a/store/store.go +++ b/store/store.go @@ -39,6 +39,7 @@ type Store interface { type TeamStore interface { Save(team *model.Team) StoreChannel + SaveWithValidate(team *model.Team, validate bool) StoreChannel Update(team *model.Team) StoreChannel UpdateDisplayName(name string, teamId string) StoreChannel Get(id string) StoreChannel diff --git a/utils/config.go b/utils/config.go index f49840453..c67e17e79 100644 --- a/utils/config.go +++ b/utils/config.go @@ -6,7 +6,6 @@ package utils import ( l4g "code.google.com/p/log4go" "encoding/json" - "net/mail" "os" "path/filepath" ) @@ -149,7 +148,7 @@ func (o *Config) ToJson() string { var Cfg *Config = &Config{} var SanitizeOptions map[string]bool = map[string]bool{} -func findConfigFile(fileName string) string { +func FindConfigFile(fileName string) string { if _, err := os.Stat("/tmp/" + fileName); err == nil { fileName, _ = filepath.Abs("/tmp/" + fileName) } else if _, err := os.Stat("./config/" + fileName); err == nil { @@ -176,6 +175,14 @@ func FindDir(dir string) string { return fileName + "/" } +func ConfigureCmdLineLog() { + ls := LogSettings{} + ls.ConsoleEnable = true + ls.ConsoleLevel = "ERROR" + ls.FileEnable = false + configureLog(ls) +} + func configureLog(s LogSettings) { l4g.Close() @@ -220,8 +227,7 @@ func configureLog(s LogSettings) { // then ../config/fileName and last it will look at fileName func LoadConfig(fileName string) { - fileName = findConfigFile(fileName) - l4g.Info("Loading config file at " + fileName) + fileName = FindConfigFile(fileName) file, err := os.Open(fileName) if err != nil { @@ -232,24 +238,13 @@ func LoadConfig(fileName string) { config := Config{} err = decoder.Decode(&config) if err != nil { - panic("Error decoding configuration " + err.Error()) - } - - // Check for a valid email for feedback, if not then do feedback@domain - if _, err := mail.ParseAddress(config.EmailSettings.FeedbackEmail); err != nil { - l4g.Error("Misconfigured feedback email setting: %s", config.EmailSettings.FeedbackEmail) - config.EmailSettings.FeedbackEmail = "feedback@localhost" + panic("Error decoding config file=" + fileName + ", err=" + err.Error()) } configureLog(config.LogSettings) Cfg = &config SanitizeOptions = getSanitizeOptions() - - // Validates our mail settings - if err := CheckMailSettings(); err != nil { - l4g.Error("Email settings are not valid err=%v", err) - } } func getSanitizeOptions() map[string]bool { |