//Creation d'un utilisateur func (user *User) CreateUser() []string { //initialisation d'un tableau de string pour les erreurs var errs []string //On verifie que l'email et le nom d'utilisateur ne soit pas déjà pris. if user.IsUserEmailExist() == true { helpers.AddStringInArray(&errs, "Un compte utilise déjà cette addresse email.") } if user.IsUserLoginExist() == true { helpers.AddStringInArray(&errs, "Ce nom d'identifiant est déjà utilisé.") } //Si il n'y a pas d'erreurs if len(errs) == 0 { //on creer le compte dans la DB _, err := gest.db.Exec("Insert into account (login, email, password) values ($1, $2, $3)", user.Login, user.Email, string(user.Password)) LogFatalError(err) //Si notre fichier de configuration est en prod OU la variable CheckEmail est initialisé a true if Conf.EmailCheck == true || strings.Compare(Conf.Status, "prod") == 0 { //On creer un token de verification user.CreateVerifiedToken() //On envoie un lien par mail à l'utilisateur pour qu'il fasse validé son compte. user.SendComfirmationMail() } else { //Sinon si la verification de mail pour une raison ou une autre est desactivé, le compte est verifié dès sa création. _, err := gest.db.Exec("update account set verified=$1 where login=$2", true, user.Login) LogFatalError(err) } } return errs }
//Creer un nouveau compte utilisateur func (user *User) CreateAccount(login, email, password, password2 string) models.ListError { //on ajoute les variables envoyé dans la structure User user.login = helpers.NormalizeString(login) user.email = helpers.NormalizeString(email) user.password = password user.password2 = password2 //On appel la fonction propre au controller qui verifie la validité du password dans son format. err := user.checkPasswords() // on verifie la syntax du login et de l'email. if user.IsAConformLogin() == false { helpers.AddStringInArray(&err, "Votre login n'est pas au bon format. Il doit contenir entre 4 et 16 caractères et ne pas avoir de caractères spéciaux.") } if user.IsAConformEmail() == false { helpers.AddStringInArray(&err, "Votre email n'est pas au bon format.") } //Si aucune erreur, on ajoute les variables a la structure du model pour ensuite les poster dans la base de donné if len(err) == 0 { user.model.Email = user.email user.model.Login = user.login user.model.Password = user.hashedPassword //fonction qui post les data dans la DB errModel := user.model.CreateUser() //on join les deux tableaux d'erreus possiblement obtenu dans le controlleur et dans le model pour n'en faire plus qu'un. err = helpers.ArrayJoin(err, errModel) } return models.RenderErrorList(err) }
func (post *Post) CreatePost() models.ListError { var errr []string errr = post.CheckPostRequest() if len(errr) != 0 { return models.RenderErrorList(errr) } if post.Important < 1 || post.Important > 3 { helpers.AddStringInArray(&errr, "Desolé les sujets n'ont que 3 degré d'importance classés entre 1 et 3.") } if len(post.Title) < 3 { helpers.AddStringInArray(&errr, "Le titre doit contenir au minimum 3 caractères.") } if len(post.Content) < 15 { helpers.AddStringInArray(&errr, "Le contenu du sujet doit contenir minimum 15 caractères") } if len(errr) == 0 { post.PostModel.Title = post.Title post.PostModel.Content = post.Content post.PostModel.Important = post.Important post.PostModel.UserId = post.UserId errr2 := post.PostModel.CreatePost() return models.RenderErrorList(errr2) } return models.RenderErrorList(errr) }
func (post *Post) GetPostById(UserIdRequest int) []string { var errr []string if post.GetInformationByPostId() == -1 { helpers.AddStringInArray(&errr, "Ce post n'existe pas.") } else { if UserIdRequest != post.UserId && post.Important != 1 { helpers.AddStringInArray(&errr, "Vous n'avez pas l'autorisation de voir ce post") } } return errr }
//Cette fonction verifie les deux passwords entrée lors de l'inscription par exemple. func (user *User) checkPasswords() []string { var errors []string if strings.Compare(user.password, user.password2) != 0 { helpers.AddStringInArray(&errors, "Les deux mots de passe ne sont pas identiques.") } else if len(user.password) < 6 { helpers.AddStringInArray(&errors, "Le mot de passe est choisit est trop court, minimum 6 caractères.") } else { user.newCryptPasswd([]byte(user.password)) } return errors }
func (postlist *PostList) GetUserPosts(login, LoginUserRequest string) []string { var errr []string user := User{} user.Login = login if user.IsUserLoginExist() == false { helpers.AddStringInArray(&errr, "Cette utilisateur n'existe pas.") } else { if strings.Compare(login, LoginUserRequest) == 0 { user.GetUserByLogin() rows, err := gest.db.Query("Select id from post where user_id=$1", user.Id) LogFatalError(err) for rows.Next() { post := Post{} rows.Scan(&post.Id) if post.GetInformationByPostId() != -1 { postlist.Liste = append(postlist.Liste, post) } } } else { user.GetUserByLogin() rows, err := gest.db.Query("Select id from post where user_id=$1 And important=1", user.Id) LogFatalError(err) for rows.Next() { post := Post{} rows.Scan(&post.Id) if post.GetInformationByPostId() != -1 { postlist.Liste = append(postlist.Liste, post) } } } } return errr }
func (post *Post) CreatePost() []string { var errr []string if post.HasEver3PostInLast24Hours() == true { helpers.AddStringInArray(&errr, "Vous avez déjà posté 3 messages depuis hier minuit.") } else { _, err := gest.db.Exec("Insert into post(content, title, important, user_id) values ($1, $2, $3, $4)", post.Content, post.Title, post.Important, post.UserId) LogFatalError(err) } return errr }
//cette fonction creer une nouvelle session. func (session *Session) CreateSession(emailOrLogin, password, ipAddr string) models.ListError { //initialisation du tableau d'erreur var errr []string //initialisation de notre structure user userModel := models.User{} //initialisation des variables dans la structure user avec celle qui ont été envoyé via la method post userModel.Login = helpers.NormalizeString(emailOrLogin) userModel.Email = userModel.Login userModel.Password = []byte(password) //if l'identifiant envoyé exist (cette identifiant peut etre un email ou login) if userModel.IsUserEmailExist() || userModel.IsUserLoginExist() { //si l'identifiant match avec le password associé if userModel.IsLoginOrEmailMatchWithPassword() { //on initialise une structure session du MODEL sessionModel := models.Session{} //on recuperer l'id de l'utilisateur et on le met dans session sessionModel.UserId = userModel.GetUserByLoginOrEmail() //si l'utilisateur est verifié if userModel.IsUserIsVerified() == true { //creation d'un nouveau token qui sera renvoyé en response json et egalement ajouté a la base de donnée session.Token = sessionModel.CreateSession(ipAddr) } else { helpers.AddStringInArray(&errr, "Votre compte n'est pas verifié, vous avez certainement reçu un email de comfirmation, verifiez dans vos spams ou demandez à en recevoir un nouveau.") } } else { helpers.AddStringInArray(&errr, "Le mot de passe ne correspond pas à celui du compte.") } } else { helpers.AddStringInArray(&errr, "Il n'existe aucun compte lié a cette identifiant") } //si la variable de la structure Session n'est pas vide (Si il est rentré dans la condition qui check que l'utilisateur est bien verifié) if session.Token != "" { session.Status = "OK" } return models.RenderErrorList(errr) }
func (post *Post) CheckPostRequest() []string { var errr []string post.user.model.SessionToken = post.Token if post.user.model.GetUserBySessionToken() == -1 { helpers.AddStringInArray(&errr, "Votre token est mauvais ou a expiré, veuillez vous reconnecter.") } post.UserId = post.user.model.Id return errr }
//Cette fonction est appelé lorsque une personne tente d'activer son compte. func (user *User) ComfirmAccount() models.ListError { var errr []string //on ajoute dans la structure user du mode le token de verification user.model.VerifiedToken = user.VerifiedToken // si le token n'existe pas if user.model.IsExistVerifiedToken() == false { helpers.AddStringInArray(&errr, "Le token n'existe pas, veuillez vous créer un compte.") } else { //on recupere les informations utilisateurs en fonction du token de verification // email, id, login //si le token a expiré. if user.model.GetUserByVerifiedToken() == -1 { helpers.AddStringInArray(&errr, "Le token de validation a expiré, veuillez en demander un nouveau") } else { //sinon on post pour authentifié l'utilisateur user.model.AccountVerified() } } return models.RenderErrorList(errr) }
func (post *Post) DeletePost() []string { var errr []string if post.IsPostIdBelongAtUserId() == false { helpers.AddStringInArray(&errr, "Vous ne pouvez supprimer que vos posts.") } if len(errr) == 0 { _, err := gest.db.Exec("Delete from post where id=$1", post.Id) LogFatalError(err) } return errr }