public ActionResult Register(RegisterViewModel model)
        {
            if (ModelState.IsValid)
            {
                USER_Service userService      = new USER_Service();
                bool         userAlreadyExist = userService.FindUserByUserName(model.Username) != null ||
                                                userService.FindByEmail(model.Email) != null;
                if (userAlreadyExist)
                {
                    ModelState.AddModelError("", UiStrings.register_error_user_already_exists);
                    return(View(model));
                }

                model.Password = EncryptionUtil.Encrypt(model.Password);
                var  user         = new USER().CreateFromModel(model);
                bool isRegistered = new USER_Service().AddOrUpdateUser(user);

                if (isRegistered)
                {
                    SetCurrentUser(user.USERNAME, user.PK_ID_USER);
                    return(RedirectToAction("Index", "Home"));
                }
            }

            // Si nous sommes arrivés là, un échec s’est produit. Réafficher le formulaire
            return(View(model));
        }
        public ActionResult Edit()
        {
            int UserID = int.Parse(Request.Cookies["UserID"].Value);
            var model  = new USER_Service().GetEditUserViewModelByID(UserID);

            return(View(model));
        }
        public ActionResult LoginOrRegisterExternal(LoginExternalViewModel model)
        {
            if (ModelState.IsValid)
            {
                USER_Service userService = new USER_Service();
                USER         user        = userService.FindByEmail(model.Email);

                if (user == null)
                {
                    user = new USER().CreateFromExternalLoginModel(model);

                    //Génération du username
                    var generatedUsername = user.FIRSTNAME.ToLower() + user.LASTNAME.ToLower();
                    var usernameAlreadyExistsWithSameBaseCount =
                        userService.FindAllByUsernameStartWith(generatedUsername).Count();
                    if (usernameAlreadyExistsWithSameBaseCount > 0)
                    {
                        generatedUsername += usernameAlreadyExistsWithSameBaseCount;
                    }
                    user.USERNAME = generatedUsername;

                    //Ajout en BDD
                    bool isRegistered = userService.AddOrUpdateUser(user);

                    if (isRegistered)
                    {
                        SetCurrentUser(user.USERNAME, user.PK_ID_USER);
                        return(RedirectToAction("Index", "Home"));
                    }
                }
                else
                {
                    switch (model.ProviderType)
                    {
                    case LoginExternalViewModel.Provider.Google:
                        user.GOOGLEID = model.ProviderUserId;
                        break;

                    case LoginExternalViewModel.Provider.Facebook:
                        user.FACEBOOKID = model.ProviderUserId;
                        break;
                    }
                    userService.AddOrUpdateUser(user);

                    SetCurrentUser(user.USERNAME, user.PK_ID_USER);
                    return(RedirectToAction("Index", "Home"));
                }
            }

            ModelState.AddModelError("", UiStrings.login_error_auth);
            return(View("Login", new LoginViewModel()));
        }
        public ActionResult LoginAuto(ShortEditUserViewModel model)
        {
            model.Password = string.IsNullOrWhiteSpace(model.Password) ? "" : EncryptionUtil.Encrypt(model.Password);
            var user = new USER_Service().LoginUser(model.Username, model.Password);

            if (user != null)
            {
                SetCurrentUser(user.USERNAME, user.PK_ID_USER);

                return(RedirectToAction("Index", "Home"));
            }
            else
            {
                return(View(model));
            }
        }
        public ActionResult Login(LoginViewModel model)
        {
            if (!ModelState.IsValid)
            {
                return(View(model));
            }
            model.Password = string.IsNullOrWhiteSpace(model.Password) ? "" : EncryptionUtil.Encrypt(model.Password);
            var user = new USER_Service().LoginUser(model.Username, model.Password);

            if (user != null)
            {
                SetCurrentUser(user.USERNAME, user.PK_ID_USER);
                FlashMessage.Confirmation(UiStrings.login_message_disconnected);
                return(RedirectToAction("Index", "Home"));
            }
            else
            {
                ModelState.AddModelError("", UiStrings.login_error_invalid_connexion);
                return(View(model));
            }
        }
        public ActionResult Edit(EditUserViewModel model)
        {
            if (ModelState.IsValid)
            {
                int UserID = int.Parse(Request.Cookies["UserID"].Value);

                var user = new USER_Service().FindUserByID(UserID);

                user.EditFromModel(model);
                //user.PK_ID_USER = UserID;

                bool isEdited = new USER_Service().AddOrUpdateUser(user);

                if (isEdited)
                {
                    FlashMessage.Confirmation("Votre profil a été modifié.");
                    return(RedirectToAction("Edit"));
                }
            }
            FlashMessage.Danger("Une erreur est survenue lors de la modification de votre profil.");
            return(RedirectToAction("Edit"));
        }
        public static MailMessage GenerateMailMessage(string typeDemande, TASK task = null, PanierViewModel panier = null)
        {
            var message = new MailMessage();
            var user    = new USER();

            if (task != null)
            {
                message = new MailMessage("*****@*****.**", task.USER.EMAIL);
            }
            else
            {
                user    = new USER_Service().FindUserByID(panier.UserId);
                message = new MailMessage("*****@*****.**", user.EMAIL);
            }

            message.IsBodyHtml   = true;
            message.BodyEncoding = Encoding.UTF8;

            switch (typeDemande)
            {
            case Enums.StringManager.CONVERSION_TERMINEE:
            {
                message.Subject = "Votre conversion n°" + task.PK_ID_TASK;
                message.Body    = "Bonjour " + task.USER.FIRSTNAME + " " + task.USER.LASTNAME + ", <br/>  <br/>";
                message.Body   += "Votre conversion n° " + task.PK_ID_TASK + " a été effectuée. <br/>";
                message.Body   += "Vous pouvez télécharger votre média en vous rendant sur Transcoder dans la section 'Mes Conversions'<br/>";
                message.Body   += "Nous vous souhaitons une agréable journée. <br/>";
                message.Body   += "Cordialement, <br/>";
                message.Body   += "<p> L'équipe TRANSCODER France </p> <br/>";
                break;
            }

            case Enums.StringManager.PAIEMENT_ACCEPTE:
            {
                message.Subject = "Votre commande n° " + panier.TransactionId;
                message.Body    = "<style>table tr td { border: solid 1px gray;} thead tr { background: #CCC; }</style>";
                message.Body    = "<p>Bonjour " + user.FIRSTNAME + " " + user.LASTNAME + ",</p> <br/>";
                message.Body   += "Votre paiement pour la commande n° " + panier.TransactionId + " a été accepté et est en cours de traitement par nos services. <br/><br/>";
                message.Body   += "Vous recevrez un mail lorsque votre commande sera terminée et prête a être téléchargée. <br/><br/>";
                message.Body   += "<h3> Récapitulatif de votre commande </h3><hr/>";
                message.Body   += "<table>";
                message.Body   += "<thead>";
                message.Body   += "<tr><td><strong>Nom du fichier</strong></td><td><strong>Format de base</strong></td><td><strong>Format de conversion</strong></td><td><strong>Statut</strong></td><td><strong>Prix</strong></td><tr></thead>";
                foreach (var item in panier.ListOfConversions)
                {
                    message.Body += "<tr>";
                    message.Body += "<td>" + item.FILE_URL_ACCESS + "</td>";
                    message.Body += "<td>" + item.FORMAT_BASE + "</td>";
                    message.Body += "<td>" + item.FORMAT_CONVERT + "</td>";
                    message.Body += "<td>" + item.STATUS + "</td>";
                    message.Body += "<td>" + item.PRICE + "</td>";
                    message.Body += "</tr>";
                }
                message.Body += "</table><hr/><h3 style='color: green'>Montant total de votre commande :<span  style='float:right;' >" + panier.GlobalPrice + "€</span></h3>";
                message.Body += "Nous vous souhaitons une agréable journée. <br/>";
                message.Body += "Cordialement, <br/>";
                message.Body += "<p> L'équipe TRANSCODER France </p> <br/>";
                break;
            }

            default:
            {
                break;
            }
            }
            return(message);
        }