From 32df6b86904434aff66240ab014f14051f528299 Mon Sep 17 00:00:00 2001 From: Chteufleur Date: Tue, 20 Oct 2015 23:39:35 +0200 Subject: [PATCH] Add a user page to change password --- conf/app.conf | 2 +- controllers/addTemp.go | 6 +- controllers/default.go | 22 ++-- controllers/login.go | 25 ++--- controllers/sensors.go | 6 +- controllers/user.go | 41 +++++++ controllers/viewTemp.go | 16 +-- main.go | 10 +- models/database/constantes.go | 12 +- models/sensor/sensor.go | 180 +++++++++++++++--------------- models/temperature/temp/temp.go | 81 +++++++------- models/temperature/temperature.go | 107 +++++++++--------- models/user/user.go | 126 +++++++++++---------- models/utils/utils.go | 43 ++++--- models/variables/variables.go | 15 +-- routers/router.go | 11 +- static/css/user.css | 40 +++++++ views/base/footer.html | 2 + views/sensors.tpl | 12 +- views/temp.tpl | 14 ++- views/user.tpl | 32 ++++++ 21 files changed, 463 insertions(+), 340 deletions(-) create mode 100644 controllers/user.go create mode 100644 static/css/user.css create mode 100644 views/user.tpl diff --git a/conf/app.conf b/conf/app.conf index 4150be5..2fd18b6 100644 --- a/conf/app.conf +++ b/conf/app.conf @@ -12,4 +12,4 @@ SessionProvider = memory SessionGCMaxLifetime = 3600 SessionHashFunc = sha1 SessionHashKey = chucknorriswillkickyourassandeatyoursoul -SessionCookieLifeTime = 60 +SessionCookieLifeTime = 3600 diff --git a/controllers/addTemp.go b/controllers/addTemp.go index 760e221..f738fcc 100644 --- a/controllers/addTemp.go +++ b/controllers/addTemp.go @@ -6,9 +6,9 @@ import ( "github.com/astaxie/beego" + "datahouse/models/sensor" "datahouse/models/temperature" temperatureTmp "datahouse/models/temperature/temp" - "datahouse/models/sensor" "datahouse/models/variables" ) @@ -42,9 +42,9 @@ func (c *AddTempController) Get() { func addToTempBdd(snsor *sensor.SensorTable, val int) { nowUTC := time.Now().UTC() tempTmp := temperatureTmp.GetTemp(snsor.Id) - if tempTmp == nil || tempTmp.Id == 0 { // Add new entry for sensor + if tempTmp == nil || tempTmp.Id == 0 { // Add new entry for sensor temperatureTmp.AddData(snsor.Id, int64(val)) - } else { // Update entry for sensor + } else { // Update entry for sensor temperatureTmp.UpdateTemp(snsor.Id, int64(val), nowUTC) } } diff --git a/controllers/default.go b/controllers/default.go index 6d0be66..0a3559b 100644 --- a/controllers/default.go +++ b/controllers/default.go @@ -15,13 +15,12 @@ var ( _, timezoneOffset = time.Now().Zone() ) - type SensorPrint struct { - Name string - Mac string - Value string - Unit string - Horodate string + Name string + Mac string + Value string + Unit string + Horodate string } type MainController struct { @@ -37,8 +36,7 @@ func (c *MainController) Get() { c.TplNames = "index.tpl" } - -func getLastTemps() ([]SensorPrint) { +func getLastTemps() []SensorPrint { sensors := sensor.GetAllSensor() var values []SensorPrint for _, s := range sensors { @@ -55,17 +53,17 @@ func getLastTemps() ([]SensorPrint) { sens.Unit = "°C" horodatTmp := t.HorodateGMT - horodatTmp = horodatTmp.Add(time.Duration(timezoneOffset)*time.Second) + horodatTmp = horodatTmp.Add(time.Duration(timezoneOffset) * time.Second) h, m, _ := horodatTmp.Clock() hStr := strconv.Itoa(h) if h < 10 { - hStr = "0"+hStr + hStr = "0" + hStr } mStr := strconv.Itoa(m) if m < 10 { - mStr = "0"+mStr + mStr = "0" + mStr } - sens.Horodate = hStr+"h"+mStr + sens.Horodate = hStr + "h" + mStr values = append(values, *sens) } diff --git a/controllers/login.go b/controllers/login.go index da0e4bf..249bc42 100644 --- a/controllers/login.go +++ b/controllers/login.go @@ -3,8 +3,8 @@ package controllers import ( "github.com/astaxie/beego" - "datahouse/models/user" - "datahouse/models/variables" + "datahouse/models/user" + "datahouse/models/variables" ) type LoginController struct { @@ -15,38 +15,35 @@ func (c *LoginController) Prepare() { } func (c *LoginController) Get() { - sess := c.GetSession(variables.SessionName) + sess := c.GetSession(variables.SessionName) if sess != nil { - c.Redirect(variables.RootRoute, 302) - return + c.Redirect(variables.UserRoute, 302) + return } c.TplNames = "login.tpl" } func (c *LoginController) Post() { - sess := c.GetSession(variables.SessionName) + sess := c.GetSession(variables.SessionName) if sess != nil { c.Redirect(variables.RootRoute, 302) return } - login := c.GetString("login") + login := c.GetString("login") passwd := c.GetString("password") - if !isLoginOK(login, passwd) { + if !isLoginOK(login, passwd) { c.Abort("403") } c.SetSession(variables.SessionName, login) - c.Redirect(variables.RootRoute, 302) + c.Redirect(variables.UserRoute, 302) } - - - -func isLoginOK(lgn, pwd string) (bool) { +func isLoginOK(lgn, pwd string) bool { ret := pwd != "" // Do not authorize empty password - usr := user.GetUserByLogin(lgn) + usr := user.GetUserByLogin(lgn) return ret && pwd == usr.Password } diff --git a/controllers/sensors.go b/controllers/sensors.go index 89172de..aa058f4 100644 --- a/controllers/sensors.go +++ b/controllers/sensors.go @@ -7,8 +7,8 @@ import ( "datahouse/models/temperature" "datahouse/models/variables" - "strconv" "fmt" + "strconv" ) type SensorsController struct { @@ -18,14 +18,13 @@ type SensorsController struct { func (c *SensorsController) Prepare() { sess := c.GetSession(variables.SessionName) if sess == nil { - c.Redirect(variables.LoginRoute, 302) + c.Redirect(variables.LoginRoute, 302) } c.Data["IsSensor"] = true c.Data["version"] = variables.Version } - func (c *SensorsController) Get() { sensors := sensor.GetAllSensor() @@ -33,7 +32,6 @@ func (c *SensorsController) Get() { c.TplNames = "sensors.tpl" } - func (c *SensorsController) Post() { description := c.Input().Get("description") mac := c.Input().Get("mac") diff --git a/controllers/user.go b/controllers/user.go new file mode 100644 index 0000000..c66fdc2 --- /dev/null +++ b/controllers/user.go @@ -0,0 +1,41 @@ +package controllers + +import ( + "github.com/astaxie/beego" + + "datahouse/models/user" + "datahouse/models/variables" +) + +type UserController struct { + beego.Controller +} + +func (c *UserController) Prepare() { + sess := c.GetSession(variables.SessionName) + if sess == nil { + c.Redirect(variables.LoginRoute, 302) + } + + // c.Data["IsSensor"] = true + c.Data["version"] = variables.Version +} + +func (c *UserController) Get() { + c.TplNames = "user.tpl" +} + +func (c *UserController) Post() { + pwd1 := c.Input().Get("password1") + pwd2 := c.Input().Get("password2") + + if pwd1 == pwd2 { + login := c.GetSession(variables.SessionName) + switch lo := login.(type) { + case string: + user.ChangePassword(lo, pwd1) + } + } + + c.Redirect(variables.UserRoute, 302) +} diff --git a/controllers/viewTemp.go b/controllers/viewTemp.go index 5137834..cab06f8 100644 --- a/controllers/viewTemp.go +++ b/controllers/viewTemp.go @@ -3,16 +3,14 @@ package controllers import ( "github.com/astaxie/beego" - "datahouse/models/temperature" "datahouse/models/sensor" + "datahouse/models/temperature" "datahouse/models/variables" "html/template" "strconv" ) - - type ViewTempController struct { beego.Controller } @@ -25,7 +23,7 @@ func (c *ViewTempController) Prepare() { func (c *ViewTempController) Get() { dataTemp := "" sensors := sensor.GetAllSensor() - for i := 0; i 0 { dataTemp += "," } @@ -41,21 +39,19 @@ func (c *ViewTempController) Get() { c.TplNames = "temp.tpl" } - /* -------------------------------------------------------------------------------- */ - func formatDataSensor(sensorName string, values []temperature.TempTable) string { - ret := "{name : \""+sensorName+"\", data : [" - for i := 0; i 0 { ret += "," } - horodate := strconv.FormatInt((values[i].HorodateGMT.Unix()+int64(timezoneOffset)) * 1000, 10) + horodate := strconv.FormatInt((values[i].HorodateGMT.Unix()+int64(timezoneOffset))*1000, 10) value := strconv.FormatInt(values[i].Value, 10) - ret += "["+horodate+","+value+"]" + ret += "[" + horodate + "," + value + "]" } ret += "]}" return ret diff --git a/main.go b/main.go index f003886..e8d67cf 100644 --- a/main.go +++ b/main.go @@ -1,10 +1,10 @@ package main import ( - _ "datahouse/routers" "datahouse/models/database" _ "datahouse/models/temperature" "datahouse/models/user" + _ "datahouse/routers" "github.com/astaxie/beego" "github.com/astaxie/beego/logs" @@ -20,17 +20,17 @@ func init() { log.SetLogger("console", "") orm.RegisterDriver("mysql", orm.DR_MySQL) - url := database.UserDB+":"+database.PwdDB+"@/"+database.DataBase+"?charset=utf8" + url := database.UserDB + ":" + database.PwdDB + "@/" + database.DataBase + "?charset=utf8" err := orm.RegisterDataBase(database.Alias, "mysql", url) if err != nil { - log.Error("Failed to register database", err) + log.Error("Failed to register database", err) } force := false verbose := true err = orm.RunSyncdb(database.Alias, force, verbose) if err != nil { - log.Error("Failed to initialize database", err) + log.Error("Failed to initialize database", err) } } @@ -38,7 +38,7 @@ func main() { if !user.IsUserExist("admin") { user.AddUser("admin", "8c6976e5b5410415bde908bd4dee15dfb167a9c873fc4bb8a81f6f2ab448a918") - } + } beego.Run() } diff --git a/models/database/constantes.go b/models/database/constantes.go index 9ec47ce..e385f36 100644 --- a/models/database/constantes.go +++ b/models/database/constantes.go @@ -1,13 +1,13 @@ package database import ( - "github.com/astaxie/beego" + "github.com/astaxie/beego" ) var ( - Alias = "default" - UserDB = beego.AppConfig.String("mysqluser") - PwdDB = beego.AppConfig.String("mysqlpass") - HostDB = beego.AppConfig.String("mysqlurls") - DataBase = beego.AppConfig.String("mysqldb") + Alias = "default" + UserDB = beego.AppConfig.String("mysqluser") + PwdDB = beego.AppConfig.String("mysqlpass") + HostDB = beego.AppConfig.String("mysqlurls") + DataBase = beego.AppConfig.String("mysqldb") ) diff --git a/models/sensor/sensor.go b/models/sensor/sensor.go index 6f57932..1f03ff5 100644 --- a/models/sensor/sensor.go +++ b/models/sensor/sensor.go @@ -1,131 +1,127 @@ package sensor import ( - "github.com/astaxie/beego/orm" + "github.com/astaxie/beego/orm" - "datahouse/models/database" - "datahouse/models/utils" + "datahouse/models/database" + "datahouse/models/utils" ) - type SensorTable struct { - Id int64 - SensorMAC string - Description string - Interval int64 + Id int64 + SensorMAC string + Description string + Interval int64 } func init() { - orm.RegisterModel(new(SensorTable)) + orm.RegisterModel(new(SensorTable)) } +func GetSensorByMac(sensorMac string) *SensorTable { + o := orm.NewOrm() + o.Using(database.Alias) -func GetSensorByMac(sensorMac string) (*SensorTable) { - o := orm.NewOrm() - o.Using(database.Alias) - - sensor := new(SensorTable) - ret := new(SensorTable) - var maps []orm.Params - _, err := o.QueryTable(sensor).Filter("SensorMAC", sensorMac).Values(&maps) - if err == nil { - for _, m := range maps { - ret.Id = utils.GetInt(m, "Id") - ret.SensorMAC = utils.GetString(m, "SensorMAC") - ret.Description = utils.GetString(m, "Description") - ret.Interval = utils.GetInt(m, "Interval") - break - } + sensor := new(SensorTable) + ret := new(SensorTable) + var maps []orm.Params + _, err := o.QueryTable(sensor).Filter("SensorMAC", sensorMac).Values(&maps) + if err == nil { + for _, m := range maps { + ret.Id = utils.GetInt(m, "Id") + ret.SensorMAC = utils.GetString(m, "SensorMAC") + ret.Description = utils.GetString(m, "Description") + ret.Interval = utils.GetInt(m, "Interval") + break + } } - return ret + return ret } -func GetAllSensorIds() ([]int64) { - o := orm.NewOrm() - o.Using(database.Alias) +func GetAllSensorIds() []int64 { + o := orm.NewOrm() + o.Using(database.Alias) - sensor := new(SensorTable) - var ret []int64 - var maps []orm.Params - _, err := o.QueryTable(sensor).Values(&maps) - if err == nil { - for _, m := range maps { - ret = append(ret, utils.GetInt(m, "Id")) - } - } - return ret + sensor := new(SensorTable) + var ret []int64 + var maps []orm.Params + _, err := o.QueryTable(sensor).Values(&maps) + if err == nil { + for _, m := range maps { + ret = append(ret, utils.GetInt(m, "Id")) + } + } + return ret } -func GetAllSensor() ([]SensorTable) { - o := orm.NewOrm() - o.Using(database.Alias) +func GetAllSensor() []SensorTable { + o := orm.NewOrm() + o.Using(database.Alias) - sensor := new(SensorTable) - var ret []SensorTable - var maps []orm.Params - _, err := o.QueryTable(sensor).Values(&maps) - if err == nil { - for _, m := range maps { - r := new(SensorTable) - r.Id = utils.GetInt(m, "Id") - r.SensorMAC = utils.GetString(m, "SensorMAC") - r.Description = utils.GetString(m, "Description") - r.Interval = utils.GetInt(m, "Interval") + sensor := new(SensorTable) + var ret []SensorTable + var maps []orm.Params + _, err := o.QueryTable(sensor).Values(&maps) + if err == nil { + for _, m := range maps { + r := new(SensorTable) + r.Id = utils.GetInt(m, "Id") + r.SensorMAC = utils.GetString(m, "SensorMAC") + r.Description = utils.GetString(m, "Description") + r.Interval = utils.GetInt(m, "Interval") - ret = append(ret, *r) - } - } - return ret + ret = append(ret, *r) + } + } + return ret } -func GetSensor(id int64) (*SensorTable) { - o := orm.NewOrm() - o.Using(database.Alias) +func GetSensor(id int64) *SensorTable { + o := orm.NewOrm() + o.Using(database.Alias) - sensor := new(SensorTable) - var ret = new(SensorTable) - var maps []orm.Params - _, err := o.QueryTable(sensor).Filter("Id", id).Values(&maps) - if err == nil { - for _, m := range maps { - ret.Id = utils.GetInt(m, "Id") - ret.SensorMAC = utils.GetString(m, "SensorMAC") - ret.Description = utils.GetString(m, "Description") - ret.Interval = utils.GetInt(m, "Interval") - } - } - return ret + sensor := new(SensorTable) + var ret = new(SensorTable) + var maps []orm.Params + _, err := o.QueryTable(sensor).Filter("Id", id).Values(&maps) + if err == nil { + for _, m := range maps { + ret.Id = utils.GetInt(m, "Id") + ret.SensorMAC = utils.GetString(m, "SensorMAC") + ret.Description = utils.GetString(m, "Description") + ret.Interval = utils.GetInt(m, "Interval") + } + } + return ret } - func UpdateSensor(mac, description string, interval int64) { - o := orm.NewOrm() - o.Using(database.Alias) + o := orm.NewOrm() + o.Using(database.Alias) - s := GetSensorByMac(mac) - if o.Read(s) == nil { - s.Description = description - s.Interval = interval - o.Update(s) - } + s := GetSensorByMac(mac) + if o.Read(s) == nil { + s.Description = description + s.Interval = interval + o.Update(s) + } } - func AddSensor(sensorMac string) { - o := orm.NewOrm() - o.Using(database.Alias) - _, _ = o.Insert(&SensorTable{SensorMAC: sensorMac}) + o := orm.NewOrm() + o.Using(database.Alias) + _, _ = o.Insert(&SensorTable{SensorMAC: sensorMac}) } func DeleteSensorByMac(sensorMac string) { - o := orm.NewOrm() - o.Using(database.Alias) - o.Delete(&SensorTable{SensorMAC: sensorMac}) + o := orm.NewOrm() + o.Using(database.Alias) + o.Delete(&SensorTable{SensorMAC: sensorMac}) } func DeleteSensor(sensorId int64) { - o := orm.NewOrm() - o.Using(database.Alias) - o.Delete(&SensorTable{Id: sensorId}) + o := orm.NewOrm() + o.Using(database.Alias) + o.Delete(&SensorTable{Id: sensorId}) } diff --git a/models/temperature/temp/temp.go b/models/temperature/temp/temp.go index e9ff92f..d804245 100644 --- a/models/temperature/temp/temp.go +++ b/models/temperature/temp/temp.go @@ -1,72 +1,67 @@ package temp import ( - "github.com/astaxie/beego/orm" + "github.com/astaxie/beego/orm" - "datahouse/models/database" - "datahouse/models/utils" + "datahouse/models/database" + "datahouse/models/utils" - "time" + "time" ) /** * Store last received data. */ type TempTableTmp struct { - Id int64 - HorodateGMT time.Time `orm:"auto_now;type(datetime)"` - SensorID int64 - Value int64 + Id int64 + HorodateGMT time.Time `orm:"auto_now;type(datetime)"` + SensorID int64 + Value int64 } - - func init() { - orm.RegisterModel(new(TempTableTmp)) + orm.RegisterModel(new(TempTableTmp)) } - /** * Add the value into the database. */ func AddData(sensor, value int64) { - o := orm.NewOrm() - o.Using(database.Alias) + o := orm.NewOrm() + o.Using(database.Alias) - tmpTable := new(TempTableTmp) - tmpTable.Value = value - tmpTable.SensorID = sensor - o.Insert(tmpTable) + tmpTable := new(TempTableTmp) + tmpTable.Value = value + tmpTable.SensorID = sensor + o.Insert(tmpTable) } +func GetTemp(sensorId int64) *TempTableTmp { + o := orm.NewOrm() + o.Using(database.Alias) -func GetTemp(sensorId int64) (*TempTableTmp) { - o := orm.NewOrm() - o.Using(database.Alias) - - data := new(TempTableTmp) - var maps []orm.Params - _, err := o.QueryTable(new(TempTableTmp)).Filter("SensorID", sensorId).Values(&maps) - if err == nil { - for _, m := range maps { - data.Id = utils.GetInt(m, "Id") - data.HorodateGMT = utils.GetTime(m, "HorodateGMT") - data.SensorID = utils.GetInt(m, "SensorID") - data.Value = utils.GetInt(m, "Value") - } - } - return data + data := new(TempTableTmp) + var maps []orm.Params + _, err := o.QueryTable(new(TempTableTmp)).Filter("SensorID", sensorId).Values(&maps) + if err == nil { + for _, m := range maps { + data.Id = utils.GetInt(m, "Id") + data.HorodateGMT = utils.GetTime(m, "HorodateGMT") + data.SensorID = utils.GetInt(m, "SensorID") + data.Value = utils.GetInt(m, "Value") + } + } + return data } - func UpdateTemp(sensorId, val int64, date time.Time) { - o := orm.NewOrm() - o.Using(database.Alias) + o := orm.NewOrm() + o.Using(database.Alias) - temp := GetTemp(sensorId) - if o.Read(temp) == nil { - temp.HorodateGMT = date - temp.Value = val - o.Update(temp) - } + temp := GetTemp(sensorId) + if o.Read(temp) == nil { + temp.HorodateGMT = date + temp.Value = val + o.Update(temp) + } } diff --git a/models/temperature/temperature.go b/models/temperature/temperature.go index d72cf31..95d36b7 100644 --- a/models/temperature/temperature.go +++ b/models/temperature/temperature.go @@ -1,84 +1,83 @@ package temperature import ( - "github.com/astaxie/beego/orm" + "github.com/astaxie/beego/orm" - "datahouse/models/database" - "datahouse/models/utils" + "datahouse/models/database" + "datahouse/models/utils" - "time" + "time" ) type TempTable struct { - Id int64 - HorodateGMT time.Time `orm:"auto_now;type(datetime)"` - SensorID int64 - Value int64 + Id int64 + HorodateGMT time.Time `orm:"auto_now;type(datetime)"` + SensorID int64 + Value int64 } func init() { - orm.RegisterModel(new(TempTable)) + orm.RegisterModel(new(TempTable)) } - /** * Add the value into the database. */ func AddData(sensor, value int64) { - o := orm.NewOrm() - o.Using(database.Alias) + o := orm.NewOrm() + o.Using(database.Alias) - tmpTable := new(TempTable) - tmpTable.Value = value - tmpTable.SensorID = sensor - o.Insert(tmpTable) + tmpTable := new(TempTable) + tmpTable.Value = value + tmpTable.SensorID = sensor + o.Insert(tmpTable) } -func GetAllTempForSensor(sensorId int64) ([]TempTable) { - o := orm.NewOrm() - o.Using(database.Alias) +func GetAllTempForSensor(sensorId int64) []TempTable { + o := orm.NewOrm() + o.Using(database.Alias) - var dataArray []TempTable - var maps []orm.Params - _, err := o.QueryTable(new(TempTable)).Filter("SensorID", sensorId).Values(&maps) - if err == nil { - for _, m := range maps { - d := new(TempTable) - d.Id = utils.GetInt(m, "Id") - d.HorodateGMT = utils.GetTime(m, "HorodateGMT") - d.SensorID = utils.GetInt(m, "SensorID") - d.Value = utils.GetInt(m, "Value") + var dataArray []TempTable + var maps []orm.Params + _, err := o.QueryTable(new(TempTable)).Filter("SensorID", sensorId).Values(&maps) + if err == nil { + for _, m := range maps { + d := new(TempTable) + d.Id = utils.GetInt(m, "Id") + d.HorodateGMT = utils.GetTime(m, "HorodateGMT") + d.SensorID = utils.GetInt(m, "SensorID") + d.Value = utils.GetInt(m, "Value") - dataArray = append(dataArray, *d) - } - } - return dataArray + dataArray = append(dataArray, *d) + } + } + return dataArray } -func GetLastTempForSensor(sensorId int64) (*TempTable) { - o := orm.NewOrm() - o.Using(database.Alias) +func GetLastTempForSensor(sensorId int64) *TempTable { + o := orm.NewOrm() + o.Using(database.Alias) - data := new(TempTable) - var maps []orm.Params - _, err := o.QueryTable(new(TempTable)).Filter("SensorID", sensorId).OrderBy("HorodateGMT").Values(&maps) - if err == nil { - for _, m := range maps { - data.Id = utils.GetInt(m, "Id") - data.HorodateGMT = utils.GetTime(m, "HorodateGMT") - data.SensorID = utils.GetInt(m, "SensorID") - data.Value = utils.GetInt(m, "Value") - } - } - return data + data := new(TempTable) + var maps []orm.Params + _, err := o.QueryTable(new(TempTable)).Filter("SensorID", sensorId).OrderBy("HorodateGMT").Values(&maps) + if err == nil { + for _, m := range maps { + data.Id = utils.GetInt(m, "Id") + data.HorodateGMT = utils.GetTime(m, "HorodateGMT") + data.SensorID = utils.GetInt(m, "SensorID") + data.Value = utils.GetInt(m, "Value") + } + } + return data } func DeleteTemperatureBySenor(sensorId int64) { - o := orm.NewOrm() - o.Using(database.Alias) + o := orm.NewOrm() + o.Using(database.Alias) - temps := GetAllTempForSensor(sensorId) - for _, temp := range temps { - o.Delete(&TempTable{Id: temp.Id}) - } + temps := GetAllTempForSensor(sensorId) + for _, temp := range temps { + o.Delete(&TempTable{Id: temp.Id}) + } } diff --git a/models/user/user.go b/models/user/user.go index 913265b..91f9a97 100644 --- a/models/user/user.go +++ b/models/user/user.go @@ -1,84 +1,90 @@ package user import ( - "github.com/astaxie/beego/orm" - _ "github.com/go-sql-driver/mysql" + "github.com/astaxie/beego/orm" + _ "github.com/go-sql-driver/mysql" - "datahouse/models/database" - "datahouse/models/utils" + "datahouse/models/database" + "datahouse/models/utils" ) - type User struct { - Id int64 - Login string - Password string + Id int64 + Login string + Password string } - func init() { - // register model - orm.RegisterModel(new(User)) + // register model + orm.RegisterModel(new(User)) } +func IsUserExist(login string) bool { + o := orm.NewOrm() + o.Using(database.Alias) -func IsUserExist(login string) (bool) { - o := orm.NewOrm() - o.Using(database.Alias) - - ret := false - var maps []orm.Params - _, err := o.QueryTable(new(User)).Filter("Login", login).Values(&maps) - if err == nil { - for _, _ = range maps { - ret = true - break - } - } - return ret + ret := false + var maps []orm.Params + _, err := o.QueryTable(new(User)).Filter("Login", login).Values(&maps) + if err == nil { + for _, _ = range maps { + ret = true + break + } + } + return ret } -func GetUserByLogin(login string) (*User) { - o := orm.NewOrm() - o.Using(database.Alias) +func GetUserByLogin(login string) *User { + o := orm.NewOrm() + o.Using(database.Alias) - ret := new(User) - var maps []orm.Params - _, err := o.QueryTable(new(User)).Filter("Login", login).Values(&maps) - if err == nil { - for _, m := range maps { - ret.Id = utils.GetInt(m, "Id") - ret.Login = utils.GetString(m, "Login") - ret.Password = utils.GetString(m, "Password") - break - } - } - return ret + ret := new(User) + var maps []orm.Params + _, err := o.QueryTable(new(User)).Filter("Login", login).Values(&maps) + if err == nil { + for _, m := range maps { + ret.Id = utils.GetInt(m, "Id") + ret.Login = utils.GetString(m, "Login") + ret.Password = utils.GetString(m, "Password") + break + } + } + return ret } +func GetUser(id int64) *User { + o := orm.NewOrm() + o.Using(database.Alias) -func GetUser(id int64) (*User) { - o := orm.NewOrm() - o.Using(database.Alias) - - ret := new(User) - var maps []orm.Params - _, err := o.QueryTable(new(User)).Filter("Id", id).Values(&maps) - if err == nil { - for _, m := range maps { - ret.Id = utils.GetInt(m, "Id") - ret.Login = utils.GetString(m, "Login") - ret.Password = utils.GetString(m, "Password") - break - } - } - return ret + ret := new(User) + var maps []orm.Params + _, err := o.QueryTable(new(User)).Filter("Id", id).Values(&maps) + if err == nil { + for _, m := range maps { + ret.Id = utils.GetInt(m, "Id") + ret.Login = utils.GetString(m, "Login") + ret.Password = utils.GetString(m, "Password") + break + } + } + return ret } - func AddUser(login, sha256Pass string) { - o := orm.NewOrm() - o.Using(database.Alias) + o := orm.NewOrm() + o.Using(database.Alias) - _, _ = o.Insert(&User{Login: login, Password: sha256Pass}) + _, _ = o.Insert(&User{Login: login, Password: sha256Pass}) +} + +func ChangePassword(login, newPwd string) { + o := orm.NewOrm() + o.Using(database.Alias) + + user := GetUserByLogin(login) + if o.Read(user) == nil { + user.Password = newPwd + o.Update(user) + } } diff --git a/models/utils/utils.go b/models/utils/utils.go index 2adfd7b..99db504 100644 --- a/models/utils/utils.go +++ b/models/utils/utils.go @@ -1,41 +1,40 @@ package utils import ( - "github.com/astaxie/beego/orm" + "github.com/astaxie/beego/orm" - "time" + "time" ) - func GetString(m orm.Params, param string) string { - ret := "" - switch i := m[param].(type) { - case string: - ret = i - } + ret := "" + switch i := m[param].(type) { + case string: + ret = i + } - return ret + return ret } func GetInt(m orm.Params, param string) int64 { - var ret int64 - ret = -1 + var ret int64 + ret = -1 - switch i := m[param].(type) { - case int, int32, int64: - ret = i.(int64) - } + switch i := m[param].(type) { + case int, int32, int64: + ret = i.(int64) + } - return ret + return ret } func GetTime(m orm.Params, param string) time.Time { - var ret time.Time + var ret time.Time - switch i := m[param].(type) { - case time.Time: - ret = i - } + switch i := m[param].(type) { + case time.Time: + ret = i + } - return ret + return ret } diff --git a/models/variables/variables.go b/models/variables/variables.go index 82db318..e406fe3 100644 --- a/models/variables/variables.go +++ b/models/variables/variables.go @@ -1,15 +1,16 @@ package variables const ( - Version = "0.0.3" + Version = "0.0.3" - SessionName = "Session_Data_House" + SessionName = "Session_Data_House" ) var ( - RootRoute = "/" - AddTempRoute = "/add/temp/:sensor([0-9A-Fa-f:]+)/:val([0-9]+)" - ViewTempRoute = "/view/temp" - SensorsRoute = "/sensors" - LoginRoute = "/login" + RootRoute = "/" + AddTempRoute = "/add/temp/:sensor([0-9A-Fa-f:]+)/:val([0-9]+)" + ViewTempRoute = "/view/temp" + SensorsRoute = "/sensors" + LoginRoute = "/login" + UserRoute = "/user" ) diff --git a/routers/router.go b/routers/router.go index 3135399..a85bf15 100644 --- a/routers/router.go +++ b/routers/router.go @@ -7,9 +7,10 @@ import ( ) func init() { - beego.Router(variables.RootRoute, &controllers.MainController{}) - beego.Router(variables.AddTempRoute, &controllers.AddTempController{}) - beego.Router(variables.ViewTempRoute, &controllers.ViewTempController{}) - beego.Router(variables.SensorsRoute, &controllers.SensorsController{}) - beego.Router(variables.LoginRoute, &controllers.LoginController{}) + beego.Router(variables.RootRoute, &controllers.MainController{}) + beego.Router(variables.AddTempRoute, &controllers.AddTempController{}) + beego.Router(variables.ViewTempRoute, &controllers.ViewTempController{}) + beego.Router(variables.SensorsRoute, &controllers.SensorsController{}) + beego.Router(variables.LoginRoute, &controllers.LoginController{}) + beego.Router(variables.UserRoute, &controllers.UserController{}) } diff --git a/static/css/user.css b/static/css/user.css new file mode 100644 index 0000000..3413a02 --- /dev/null +++ b/static/css/user.css @@ -0,0 +1,40 @@ +body { + padding-top: 40px; + padding-bottom: 40px; + /*background-color: #eee;*/ +} + +.form-signin { + max-width: 450px; + padding: 15px; + margin: 0 auto; +} +/*.form-signin .form-signin-heading, +.form-signin .checkbox { + margin-bottom: 10px; +} +.form-signin .checkbox { + font-weight: normal; +}*/ +.form-signin .form-control { + position: relative; + height: auto; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; + padding: 10px; + font-size: 16px; +} +.form-signin .form-control:focus { + z-index: 2; +} +/*.form-signin input[type="email"] { + margin-bottom: -1px; + border-bottom-right-radius: 0; + border-bottom-left-radius: 0; +}*/ +.form-signin input[type="password"] { + margin-bottom: 10px; + border-top-left-radius: 0; + border-top-right-radius: 0; +} diff --git a/views/base/footer.html b/views/base/footer.html index 0a9664a..32ed3d6 100644 --- a/views/base/footer.html +++ b/views/base/footer.html @@ -14,3 +14,5 @@ + +{{template "extrajs" .}} diff --git a/views/sensors.tpl b/views/sensors.tpl index 5680823..894112c 100644 --- a/views/sensors.tpl +++ b/views/sensors.tpl @@ -14,7 +14,17 @@
- +


diff --git a/views/temp.tpl b/views/temp.tpl index 918daca..92c427c 100644 --- a/views/temp.tpl +++ b/views/temp.tpl @@ -25,7 +25,19 @@ }, { count: 1, type: 'day', - text: '24h' + text: '1j' + }, { + count: 2, + type: 'day', + text: '2j' + }, { + count: 3, + type: 'day', + text: '3j' + }, { + count: 5, + type: 'day', + text: '5j' }, { count: 7, type: 'day', diff --git a/views/user.tpl b/views/user.tpl new file mode 100644 index 0000000..bfd8726 --- /dev/null +++ b/views/user.tpl @@ -0,0 +1,32 @@ +{{template "base/base.html" .}} + +{{define "meta"}} + +{{end}} + +{{define "body"}} +
+ +{{end}} + +{{define "extrajs"}} + + +{{end}}