示例#1
0
//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
}
示例#2
0
//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)
}
示例#3
0
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)
}
示例#4
0
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
}
示例#5
0
//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
}
示例#6
0
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
}
示例#7
0
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
}
示例#8
0
//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)
}
示例#9
0
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
}
示例#10
0
//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)
}
示例#11
0
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
}