217 lines
5.3 KiB
Go
217 lines
5.3 KiB
Go
package controller
|
|
|
|
import (
|
|
"arno/skeletor/config"
|
|
"arno/skeletor/entity"
|
|
"arno/skeletor/repository"
|
|
"arno/skeletor/service"
|
|
"arno/skeletor/tool"
|
|
"net/http"
|
|
"strconv"
|
|
|
|
"github.com/google/uuid"
|
|
"github.com/martini-contrib/render"
|
|
"github.com/martini-contrib/sessions"
|
|
)
|
|
|
|
func UserList(ctn *service.Container, session sessions.Session, req *http.Request, r render.Render) {
|
|
myconfig := config.Must(ctn)
|
|
mydb := repository.Must(ctn)
|
|
|
|
var users []entity.User
|
|
mydb.Find(&users)
|
|
|
|
rendermap := map[string]interface{}{
|
|
"conf": myconfig,
|
|
"session": tool.Rendersession(session),
|
|
"useheader": true,
|
|
"usesidebar": true,
|
|
"usecontainer": true,
|
|
"users": users,
|
|
}
|
|
|
|
r.HTML(200, "user/list", rendermap)
|
|
}
|
|
|
|
func UserSubmit(ctn *service.Container, session sessions.Session, req *http.Request, r render.Render) {
|
|
myconfig := config.Must(ctn)
|
|
mydb := repository.Must(ctn)
|
|
|
|
var user entity.User
|
|
var myerr string
|
|
var isvalid bool
|
|
|
|
user.Avatar = "noavatar.png"
|
|
user.Apikey = uuid.New().String()
|
|
user.Role = 50
|
|
|
|
if req.Method == http.MethodPost {
|
|
myerr, isvalid = UserValidate(req)
|
|
if isvalid {
|
|
req.ParseForm()
|
|
|
|
// Encrypter le password
|
|
salt := []byte("example key 1234")
|
|
password := tool.Encrypt(salt, req.Form.Get("password"))
|
|
|
|
user.Login = req.Form.Get("login")
|
|
user.Password = password
|
|
user.Salt = salt
|
|
user.Role, _ = strconv.Atoi(req.Form.Get("role"))
|
|
user.Avatar = req.Form.Get("avatar")
|
|
user.Firstname = req.Form.Get("firstname")
|
|
user.Lastname = req.Form.Get("lastname")
|
|
user.Email = req.Form.Get("email")
|
|
user.Apikey = req.Form.Get("apikey")
|
|
|
|
err := mydb.Create(&user).Error
|
|
|
|
if err == nil {
|
|
r.Redirect(myconfig.AppRoutes["userlist"])
|
|
} else {
|
|
myerr = "Cet utilisateur existe déjà avec soit ce login / cet email / cette apikey<br>" + err.Error()
|
|
}
|
|
}
|
|
|
|
// Si erreur on reinit le password à vide
|
|
user.Password = ""
|
|
}
|
|
|
|
rendermap := map[string]interface{}{
|
|
"conf": myconfig,
|
|
"session": tool.Rendersession(session),
|
|
"useheader": true,
|
|
"usesidebar": true,
|
|
"usecontainer": true,
|
|
"mode": "submit",
|
|
"user": user,
|
|
"error": myerr,
|
|
}
|
|
|
|
r.HTML(200, "user/edit", rendermap)
|
|
}
|
|
|
|
func UserUpdate(ctn *service.Container, session sessions.Session, req *http.Request, r render.Render, id string, from string) {
|
|
myconfig := config.Must(ctn)
|
|
mydb := repository.Must(ctn)
|
|
|
|
var user entity.User
|
|
var myerr string
|
|
var isvalid bool
|
|
|
|
result := mydb.First(&user, "id = ?", id)
|
|
if result.RowsAffected == 0 {
|
|
r.Redirect(myconfig.AppRoutes["userlist"])
|
|
}
|
|
|
|
if req.Method == http.MethodPost {
|
|
myerr, isvalid = UserValidate(req)
|
|
if isvalid {
|
|
req.ParseForm()
|
|
|
|
// Encrypter le password
|
|
if req.Form.Get("password") != "" {
|
|
salt := []byte("example key 1234")
|
|
password := tool.Encrypt(salt, req.Form.Get("password"))
|
|
user.Password = password
|
|
user.Salt = salt
|
|
}
|
|
|
|
user.Firstname = req.Form.Get("firstname")
|
|
user.Lastname = req.Form.Get("lastname")
|
|
user.Email = req.Form.Get("email")
|
|
user.Apikey = req.Form.Get("apikey")
|
|
user.Avatar = req.Form.Get("avatar")
|
|
|
|
if from == "update" {
|
|
user.Role, _ = strconv.Atoi(req.Form.Get("role"))
|
|
}
|
|
|
|
err := mydb.Save(&user).Error
|
|
|
|
if err == nil {
|
|
userid := session.Get("Userid").(string)
|
|
if strconv.FormatUint(uint64(user.Id), 10) == userid {
|
|
RefreshSession(session, user)
|
|
}
|
|
|
|
if from == "update" {
|
|
r.Redirect(myconfig.AppRoutes["userlist"])
|
|
} else {
|
|
r.Redirect(myconfig.AppRoutes["home"])
|
|
}
|
|
|
|
} else {
|
|
myerr = "Cet utilisateur existe déjà avec soit cet email / cette apikey" + err.Error()
|
|
}
|
|
}
|
|
}
|
|
|
|
usesidebar := true
|
|
if from == "profil" {
|
|
usesidebar = false
|
|
}
|
|
rendermap := map[string]interface{}{
|
|
"conf": myconfig,
|
|
"session": tool.Rendersession(session),
|
|
"useheader": true,
|
|
"usesidebar": usesidebar,
|
|
"usecontainer": true,
|
|
"mode": from,
|
|
"user": user,
|
|
"error": myerr,
|
|
}
|
|
|
|
r.HTML(200, "user/edit", rendermap)
|
|
}
|
|
|
|
func UserDelete(ctn *service.Container, session sessions.Session, req *http.Request, r render.Render, id string) {
|
|
myconfig := config.Must(ctn)
|
|
mydb := repository.Must(ctn)
|
|
|
|
var user entity.User
|
|
result := mydb.First(&user, "id = ?", id)
|
|
if result.RowsAffected == 0 {
|
|
r.Redirect(myconfig.AppRoutes["userlist"])
|
|
}
|
|
|
|
var myerr string
|
|
err := mydb.Delete(&user).Error
|
|
if err == nil {
|
|
r.Redirect(myconfig.AppRoutes["userlist"])
|
|
} else {
|
|
myerr = "Problème à la suppression de l'enregistrement<br>" + err.Error()
|
|
}
|
|
|
|
rendermap := map[string]interface{}{
|
|
"conf": myconfig,
|
|
"session": tool.Rendersession(session),
|
|
"useheader": true,
|
|
"usesidebar": true,
|
|
"usecontainer": true,
|
|
"mode": "update",
|
|
"user": user,
|
|
"error": myerr,
|
|
}
|
|
|
|
r.HTML(200, "user/edit", rendermap)
|
|
}
|
|
|
|
func UserValidate(req *http.Request) (string, bool) {
|
|
req.ParseForm()
|
|
|
|
if len(req.Form.Get("login")) < 5 {
|
|
myerr := "Votre Login doit comporter au minimum 5 caractères"
|
|
return myerr, false
|
|
}
|
|
|
|
if req.Form.Get("password") != "" {
|
|
if !tool.IsPasswordValid(req.Form.Get("password")) {
|
|
myerr := "Mot de passe invalide<br><li>Minium 7 caractères</li><li>Minimum une majuscule</li><li>Minimum une minuscule</li><li>Minimum un chiffre</li><li>Minimum un caractère spécial</li>"
|
|
return myerr, false
|
|
}
|
|
}
|
|
|
|
return "", true
|
|
}
|