Пример #1
0
        public IActionResult Index(string id)
        {
            if (string.IsNullOrEmpty(id))
            {
                return(RedirectToAction("Index", "Home"));
            }
            string AccountID = "";

            try
            {
                AccountID = _context.Accounts.Where(s => s.DirectoryName == id).FirstOrDefault().AccountID;
                var accountDetailsModel = _context.AccountDetails
                                          .FirstOrDefault(m => m.AccountID == AccountID);
                if (accountDetailsModel == null)
                {
                    return(NotFound());
                }

                ViewBag.AuthorPosts      = _context.vwPostsApproved.Where(s => s.PostAuthor == AccountID).OrderByDescending(s => s.DateApproved).Take(20);
                ViewBag.ConnectionString = _systemConfiguration.connectionString;


                ViewData["Title"] = "Account Details - " + functions.GetAccountData(AccountID, "FullName");
                ViewBag.FullName  = functions.GetAccountData(AccountID, "FullName");

                return(View(accountDetailsModel));
            }
            catch (Exception ex)
            {   //Log Error
                _logger.LogInformation("View Author Error: " + ex.ToString());
                TempData["ErrorMessage"] = "There was an error processing your request. Please try again. If this error persists, please send an email.";
            }

            return(RedirectToAction("Index", "Home"));
        }
Пример #2
0
        public IActionResult ResetPossword()
        {
            string ForgotEmail = HttpContext.Request.Form["ForgotPasswordEmail"];

            string[] ValidationInputs = { ForgotEmail };
            if (!functions.ValidateInputs(ValidationInputs))
            {
                TempData["ErrorMessage"] = "Validation error. Email required.";

                return(RedirectToAction("Index", "SignIn"));
            }

            if (!_context.Accounts.Any(s => s.Email == ForgotEmail))
            {
                TempData["ErrorMessage"] = "The email provided does not exist in our records.";

                return(RedirectToAction("Index", "SignIn"));
            }

            string AccountID = _context.Accounts.Where(s => s.Email == ForgotEmail).FirstOrDefault().AccountID;

            try
            {
                //remove other user reset data if exists
                functions.DeleteTableData("PasswordForgot", "AccountID", AccountID, _systemConfiguration.connectionString);

                //add reset data
                string ResetID = functions.RandomString(120);
                functions.AddForgotPassword(ResetID, AccountID);

                //send user email
                //set email data
                string   ToName            = functions.GetAccountData(AccountID, "FullName");
                string[] MessageParagraphs = { "Hello, ", "We've received a request to reset the password for your account. No changes have been made to your account yet. You can reset your password by clicking the link below: ", "If you did not request a new password, please let us know immediately by replying to this email." };
                string   PreHeader         = "Account password reset link notification.";
                bool     Button            = true;
                int      ButtonPosition    = 2;
                string   ButtonLink        = functions.GetSiteLookupData("AppDomain") + "/PasswordReset/?id=" + ResetID;
                string   ButtonLinkText    = "Reset Password";
                string   Closure           = _systemConfiguration.emailClosure;
                string   Company           = _systemConfiguration.emailCompany;
                string   UnsubscribeLink   = _systemConfiguration.emailUnsubscribeLink;
                string   MessageBody       = EmailFormating.FormatEmail(MessageParagraphs, PreHeader, Button, ButtonPosition, ButtonLink, ButtonLinkText, Closure, Company, UnsubscribeLink);

                string FromEmail = _systemConfiguration.smtpEmail;
                string ToEmail   = ForgotEmail;
                string Subject   = "Password Reset Email";

                //Get smtp details
                string smtpEmail   = _systemConfiguration.smtpEmail;
                string smtpPass    = _systemConfiguration.smtpPass;
                string displayName = _systemConfiguration.emailDisplayName;
                string smtpHost    = _systemConfiguration.smtpHost;
                int    smtpPort    = _systemConfiguration.smtpPort;

                EmailService.SendEmail(FromEmail, ToEmail, Subject, MessageBody, smtpEmail, smtpPass, displayName, smtpHost, smtpPort);


                TempData["SuccessMessage"] = @"The email with further instructions was sent to the submitted email address. If you don’t receive a message in 5 minutes, " +
                                             "check the junk folder. If you are still experiencing any problems, contact support at " + functions.GetSiteLookupData("SupportEmail");

                //log activity
                if (_systemConfiguration.logActivity)
                {
                    string LogAction = $@"User '{ToName}' did password reset.";
                    functions.LogActivity(ToEmail, ToEmail, "PasswordReset", LogAction);
                }

                return(RedirectToAction("Index", "SignIn"));
            }
            catch (Exception ex)
            {
                //Log Error
                _logger.LogInformation("Password Reset Error: " + ex.ToString());
                TempData["ErrorMessage"] = "There was an error processing your request. Please try again. If this error persists, please send an email to the administrator.";
                return(RedirectToAction("Index", "SignIn"));
            }
        }
Пример #3
0
        public IActionResult Index(string id)
        {
            if (string.IsNullOrEmpty(id) || id == "Index")
            {
                return(RedirectToAction("Index", "Home"));
            }

            try
            {
                var postModel = _context.vwPostsApproved
                                .FirstOrDefault(m => m.PostPermalink == id);
                if (postModel == null)
                {
                    //check if PostPermalink contained in another PostPermalink
                    if (_context.vwPostsApproved.Any(s => s.PostPermalink.Contains(id)))
                    {
                        string PostPermalink = _context.vwPostsApproved.Where(s => s.PostPermalink.Contains(id)).OrderByDescending(s => s.ApprovalsDateAdded).FirstOrDefault().PostPermalink;
                        return(RedirectToAction("Index", "Posts", new { id = PostPermalink }));
                    }

                    //check if PostPermalink trimmed contained in another PostPermalink
                    id = id.Substring(0, id.Length - 10); //remove last 10 characters
                    if (_context.vwPostsApproved.Any(s => s.PostPermalink.Contains(id)))
                    {
                        string PostPermalink = _context.vwPostsApproved.Where(s => s.PostPermalink.Contains(id)).OrderByDescending(s => s.ApprovalsDateAdded).FirstOrDefault().PostPermalink;
                        return(RedirectToAction("Index", "Posts", new { id = PostPermalink }));
                    }
                    return(NotFound());
                }

                if (Convert.ToBoolean(functions.GetSiteLookupData("EnableFaceBookComments")))
                {
                    ViewData["FacebookCommentId"] = functions.GetSiteLookupData("FacebookCommentAppId");
                }

                ViewBag.FaceBookComments = Convert.ToBoolean(functions.GetSiteLookupData("EnableFaceBookComments"));

                string PostID = _context.vwPostsApproved.Where(s => s.PostPermalink == id).FirstOrDefault().PostID;
                ViewBag.PostID = PostID;
                string PostTitle  = _context.vwPostsApproved.Where(s => s.PostPermalink == id).FirstOrDefault().PostTitle;
                string PostAuthor = _context.vwPostsApproved.Where(s => s.PostPermalink == id).FirstOrDefault().PostAuthor;
                string PostType   = _context.vwPostsApproved.Where(s => s.PostPermalink == id).FirstOrDefault().PostType;
                string VisitorIP  = functions.FormatVisitorIP(_sessionManager.SessionIP, _accessor.HttpContext?.Connection?.RemoteIpAddress?.ToString());
                string OtherInfo  = null; //add any other info here

                //log post view
                functions.LogPostView(PostID, PostAuthor, PostType, VisitorIP, _detectionService.Browser.Name.ToString(), _detectionService.Device.Type.ToString(), OtherInfo);

                //log visit
                functions.VisitLog(_systemConfiguration.visitLogTypes.Split(",")[1], PostTitle, VisitorIP, _detectionService.Browser.Name.ToString(), _detectionService.Device.Type.ToString(), null, OtherInfo);

                //get ShareThis url
                ViewBag.ShareThisUrl = functions.GetSiteLookupData("ShareThisUrl");

                ViewBag.ConnectionString = _systemConfiguration.connectionString;

                ViewData["Title"]              = PostTitle;
                ViewData["ContentKeywords"]    = postModel.MetaKeywords;
                ViewData["ContentDescription"] = PostTitle;
                ViewData["PostAuthor"]         = PostAuthor;

                //Set properties
                ViewData["PropertyDescription"] = "By " + functions.GetAccountData(PostAuthor, "FullName") + ", " + functions.FormatLongText(PostTitle, 120);
                ViewData["PropertySection"]     = _context.Categories.Where(s => s.CategoryID == postModel.PostCategory).FirstOrDefault().CategoryName;
                ViewData["PropertyUpdatedTime"] = postModel.UpdateDate;

                return(View(postModel));
            }
            catch (Exception ex)
            {
                //Log Error
                _logger.LogInformation("Get Post Details Error: " + ex.ToString());
                TempData["ErrorMessage"] = "There was an error processing your request. Please try again. If this error persists, please send an email.";
            }

            return(RedirectToAction("Index", "Home"));
        }
Пример #4
0
        public async Task <IActionResult> Index(AccountsModel accountsModel)
        {
            // Set Meta Data
            ViewData["Title"]              = "Sign Up";
            ViewData["ContentKeywords"]    = functions.GetSiteLookupData("MetaKeywords");
            ViewData["ContentDescription"] = functions.GetSiteLookupData("MetaDescription");
            ViewData["PostAuthor"]         = "";

            if (ModelState.IsValid)
            {
                //verify password match
                string ConfirmPassword = Request.Form["ConfirmPassword"];
                if (!functions.PasswordsMatch(accountsModel.Password, ConfirmPassword))
                {
                    TempData["ErrorMessage"] = "Passwords do not match";
                    return(View(accountsModel));
                }

                //verify email does not exist
                if (_context.Accounts.Any(s => s.Email == accountsModel.Email))
                {
                    TempData["ErrorMessage"] = "Email already exists, please choose a different email";
                    return(View(accountsModel));
                }

                try
                {
                    //set registration default values
                    accountsModel.AccountID         = functions.GetGuid();
                    accountsModel.DirectoryName     = functions.GenerateDirectoryName(accountsModel.Email);
                    accountsModel.Active            = 0;
                    accountsModel.Oauth             = 0;
                    accountsModel.EmailVerification = 0;
                    accountsModel.UpdatedBy         = accountsModel.AccountID;
                    accountsModel.UpdateDate        = DateTime.Now;
                    accountsModel.DateAdded         = DateTime.Now;

                    //hashing password with BCrypt
                    accountsModel.Password = BCrypt.Net.BCrypt.HashPassword(accountsModel.Password);

                    _context.Add(accountsModel);
                    await _context.SaveChangesAsync();

                    //add account id to account details
                    if (!_context.AccountDetails.Any(s => s.AccountID == accountsModel.AccountID))
                    {
                        functions.AddTableData("AccountDetails", "AccountID", accountsModel.AccountID, _systemConfiguration.connectionString);
                    }

                    //send user email
                    //set email data
                    string   ToName            = functions.GetAccountData(accountsModel.AccountID, "FullName");
                    string[] MessageParagraphs = { "Hello " + ToName + ", ", "Thank you for registering to " + functions.GetSiteLookupData("SiteName") + ".", "Your registration would be reviewed by our team and you would be notified once approved.", "This may take up to 24 hours." };
                    string   PreHeader         = "New account registration notification.";
                    bool     Button            = false;
                    int      ButtonPosition    = 2;
                    string   ButtonLink        = null;
                    string   ButtonLinkText    = null;
                    string   Closure           = _systemConfiguration.emailClosure;
                    string   Company           = _systemConfiguration.emailCompany;
                    string   UnsubscribeLink   = _systemConfiguration.emailUnsubscribeLink;
                    string   MessageBody       = EmailFormating.FormatEmail(MessageParagraphs, PreHeader, Button, ButtonPosition, ButtonLink, ButtonLinkText, Closure, Company, UnsubscribeLink);

                    string FromEmail = _systemConfiguration.smtpEmail;
                    string ToEmail   = accountsModel.Email;
                    string Subject   = "Account Registration Email";

                    //Get smtp details
                    string smtpEmail   = _systemConfiguration.smtpEmail;
                    string smtpPass    = _systemConfiguration.smtpPass;
                    string displayName = _systemConfiguration.emailDisplayName;
                    string smtpHost    = _systemConfiguration.smtpHost;
                    int    smtpPort    = _systemConfiguration.smtpPort;

                    EmailService.SendEmail(FromEmail, ToEmail, Subject, MessageBody, smtpEmail, smtpPass, displayName, smtpHost, smtpPort);

                    //log activity
                    if (_systemConfiguration.logActivity)
                    {
                        string LogAction = $@"User '{ToName}' registered.";
                        functions.LogActivity(accountsModel.AccountID, accountsModel.AccountID, "NewRegistration", LogAction);
                    }


                    TempData["SuccessMessage"] = "Thank you for registering. Your registration would be reviewed by our team and you would be notified once approved. This may take up to 24 hours.";
                    return(RedirectToAction("Index", "SignIn"));
                }
                catch (Exception ex)
                {
                    //Log Error
                    _logger.LogInformation("Sign Up Error: " + ex.ToString());
                    TempData["ErrorMessage"] = "There was an error processing your request. Please try again. If this error persists, please send an email.";
                }
            }
            return(View(accountsModel));
        }
Пример #5
0
        public async Task <IActionResult> NewPost(ProductsModel productsModel)
        {
            string AccountID = _sessionManager.LoginAccountId;

            //Set ViewBags data for form return data
            ViewBag.CurrencyList = functions.GetCurrencyList();
            ViewBag.CategoryList = functions.GetCategoryList();
            ViewBag.StoresList   = functions.GetStoresList(_sessionManager.LoginAccountId);

            if (ModelState.IsValid)
            {
                try
                {
                    //Set other product data
                    productsModel.ProductID         = functions.GetUinqueId();
                    productsModel.AccountID         = _sessionManager.LoginAccountId;
                    productsModel.UniqueProductName = functions.GenerateUniqueProductName(productsModel.ProductName);
                    productsModel.FeaturedPost      = (string.IsNullOrEmpty(HttpContext.Request.Form["FeaturedPost"])) ? 0 : functions.Int32Parse(HttpContext.Request.Form["FeaturedPost"]);
                    productsModel.ApproveStatus     = _systemConfiguration.defaultProductApproveStatus;
                    productsModel.UpdatedBy         = _sessionManager.LoginUsername;
                    productsModel.UpdateDate        = DateTime.Now;
                    productsModel.DateAdded         = DateTime.Now;


                    if (!string.IsNullOrEmpty(HttpContext.Request.Form["EditPost"]) && HttpContext.Request.Form["EditPost"] == "True")
                    {
                        //update post
                        productsModel.ID        = functions.Int32Parse(HttpContext.Request.Form["ID"]);
                        productsModel.ProductID = HttpContext.Request.Form["ProductID"];

                        _context.Update(productsModel);
                        await _context.SaveChangesAsync();

                        //remove current post images
                        functions.DeleteProductImages(AccountID, productsModel.ProductID);
                        functions.DeleteTableData("ProductImages", "ProductID", productsModel.ProductID, _systemConfiguration.connectionString);
                    }
                    else
                    {
                        //add post
                        _context.Add(productsModel);
                        await _context.SaveChangesAsync();

                        //add product stock
                        functions.AddTableData("ProductStock", "ProductID", _systemConfiguration.defaultProductStock.ToString(), _systemConfiguration.connectionString);
                    }


                    //Image watermark from config file
                    string TextWaterMark  = _systemConfiguration.textWaterMark;
                    string ImageWaterMark = _systemConfiguration.imageWatermark;
                    int    ImageHeight    = _systemConfiguration.uploadImageDefaultHeight;
                    int    ImageWidth     = _systemConfiguration.uploadImageDefaultWidth;

                    //Get account directory name
                    var DirectoryName = functions.GetAccountData(_sessionManager.LoginAccountId, "DirectoryName");
                    var SavePath      = @"wwwroot\\files\\" + DirectoryName + "\\products";

                    int TotalUploads = 0;
                    //Loop through files and upload
                    foreach (var file in Request.Form.Files)
                    {
                        if (file.Length > 0)
                        {
                            using (var stream = file.OpenReadStream())
                            {
                                using (var img = Image.FromStream(stream))
                                {
                                    string NewFileName = functions.RandomString(4) + "-" + file.FileName;
                                    if (!string.IsNullOrEmpty(ImageWaterMark))
                                    {
                                        img.ScaleAndCrop(ImageWidth, ImageHeight)
                                        .AddImageWatermark(@"wwwroot\files\images\" + ImageWaterMark)
                                        .AddTextWatermark(TextWaterMark)
                                        .SaveAs(SavePath + "\\" + NewFileName);
                                    }
                                    else
                                    {
                                        try
                                        {
                                            img.ScaleAndCrop(ImageWidth, ImageHeight)
                                            .AddTextWatermark(TextWaterMark)
                                            .SaveAs(SavePath + "\\" + NewFileName);
                                        }
                                        catch (Exception)
                                        {
                                            //exclude watermark
                                            img.ScaleAndCrop(ImageWidth, ImageHeight)
                                            .SaveAs(SavePath + "\\" + NewFileName);
                                        }
                                    }

                                    //Add image to ProductImages table
                                    functions.AddProductImages(productsModel.ProductID, NewFileName, null);
                                    TotalUploads++;
                                }
                            }
                        }
                    }

                    //Add product video (if added)
                    var ProductVideo = Request.Form["ProductVideo"];
                    if (!string.IsNullOrEmpty(ProductVideo.ToString()))
                    {
                        string NewFileName = functions.RandomString(4) + "-" + ProductVideo;

                        //Add to ProductVideo table
                        functions.AddProductVideo(productsModel.ProductID, NewFileName, null);
                    }

                    TempData["SuccessMessage"] = @$ "Product added successfully.  {TotalUploads} images uploaded. 
                        <br/> Add product details here: <a href='/Account/AddProductColors/{productsModel.ProductID}' class='mr-2'>Product Colors</a>
                        <a href='/Account/AddProductSizes/{productsModel.ProductID}'>Product Sizes</a>";

                    return(RedirectToAction("ManagePosts", "Account"));
                }