private void Inquiry()
    {
        string s = "Success";

        #region Lấy thông tin
        string name    = Request.Params["name"];
        string email   = Request.Params["email"];
        string content = Request.Params["content"];

        string thongtinkhac = StringExtension.GhepChuoi("", email);
        string igid         = GetFirstCateId();
        #endregion

        GroupsItems.InsertItemsGroupsItems(lang, "QLDDKTV", "", "Đăng ký tư vấn dịch vụ", "",
                                           content, "",
                                           "", name, "", "", "", "", "", "", "", "",
                                           thongtinkhac,
                                           "0", "0", "", "", DateTime.Now.ToString(), DateTime.Now.ToString(),
                                           DateTime.Now.ToString(), "", igid,
                                           DateTime.Now.ToString(), DateTime.Now.ToString(),
                                           DateTime.Now.ToString(),
                                           "", "0");

        #region Gửi email thông báo đến
        string   emailhethong = SettingsExtension.GetSettingKey(SettingsExtension.KeyMailWebsite, lang);
        string   emailkhac    = SettingsExtension.GetSettingKey(SettingsExtension.KeyEmailPhu, lang);
        string[] listemail    = emailkhac.Split(new string[] { "," }, StringSplitOptions.RemoveEmptyEntries);
        string   date         = DateTime.Now.ToString();
        string   subject      = LanguageItemExtension.GetnLanguageItemTitleByName("Thông báo từ") + " " + UrlExtension.WebisteUrl + " " + date;
        string   body         =
            @"
    <div style='font:bold 14px Arial;padding-bottom:15px'>" + LanguageItemExtension.GetnLanguageItemTitleByName("Xin chào! Bạn có một đơn đăng ký tư vấn dịch vụ từ") + @" " + UrlExtension.WebisteUrl + @"</div>
    <div style='font:bold 12px Arial;padding-bottom:10px'>" + LanguageItemExtension.GetnLanguageItemTitleByName("Chi tiết") + @":</div>
    <ul>
    <li>" + LanguageItemExtension.GetnLanguageItemTitleByName("Họ tên") + @": " + name + @"</li>
    <li>" + LanguageItemExtension.GetnLanguageItemTitleByName("Email") + @": " + email + @"</li>
    <li>" + LanguageItemExtension.GetnLanguageItemTitleByName("Gửi lúc") + @": " + DateTime.Now.ToString("dd/MM/yyyy hh:mm:ss tt") + @"</li>
    <li>" + LanguageItemExtension.GetnLanguageItemTitleByName("Nội dung") + @": " + content + @"</li>
    </ul>";
        EmailExtension.SendEmail(emailhethong, subject, body, listemail);
        #endregion

        string[] strArrayReturn = { s };
        Response.Write(js.Serialize(strArrayReturn));
    }
Beispiel #2
0
        public async Task <IActionResult> GetUserCompletionRateForTeamsAsync(string emailAddress, DateTime startDate, DateTime endDate)
        {
            // Verify email address has valid structure
            string normalizedAddress;

            if (!EmailExtension.TryNormalizeEmail(emailAddress, out normalizedAddress))
            {
                return(BadRequest("Not a valid email address!"));
            }

            ISet <int> teams;

            // Get team Ids for user
            teams = await unitOfWork.TeamPermissionRepository.GetTeamIdsUserEmailSees(User.FindFirst("Email").Value);

            // Get completion rates for user
            return(Ok(await unitOfWork.CompletionLogEntryRepository.GetUserCompletionRateOnTeams(normalizedAddress, teams, startDate, endDate)));
        }
        public async Task <IActionResult> Login([FromBody] LoginResource loginResource)
        {
            var account = await unitOfWork.UserAccountRepository
                          .GetUserAccountAsync(loginResource.Email);

            if (account == null || account.IsDeleted)
            {
                return(NotFound("Account could not be found."));
            }

            // Verify email address has valid structure
            string writeTo;

            if (!EmailExtension.TryNormalizeEmail(loginResource.Email, out writeTo))
            {
                return(BadRequest("Not a valid email address!"));
            }

            var  password      = loginResource.Password + account.Salt;
            bool validPassword = BCrypt.Net.BCrypt.Verify(password, account.Password);

            if (validPassword)
            {
                var secretKey          = new SymmetricSecurityKey(Encoding.UTF8.GetBytes("developmentKey!@3"));
                var signingCredentials = new SigningCredentials(secretKey, SecurityAlgorithms.HmacSha256);

                var tokenOptions = new JwtSecurityToken(
                    issuer: "http://localhost:55542",
                    audience: "http://localhost:4200",
                    claims: new List <Claim>
                {
                    new Claim("Email", account.Email)
                },
                    signingCredentials: signingCredentials
                    );

                var tokenString = new JwtSecurityTokenHandler().WriteToken(tokenOptions);
                return(Ok(new { Token = tokenString }));
            }
            else
            {
                return(Unauthorized());
            }
        }
Beispiel #4
0
        public async Task <IActionResult> GetTasksForTeamAsync(string emailAddress, int teamId)
        {
            // Verify email address has valid structure
            string normalizedAddress;

            if (!EmailExtension.TryNormalizeEmail(emailAddress, out normalizedAddress))
            {
                return(BadRequest("Not a valid email address!"));
            }

            // Get users email address from token
            var tokenOwnerEmail = User.FindFirst("Email").Value;

            // Verify user has permission to team tasks
            var userCanSee = await unitOfWork.TeamPermissionRepository.UserIsPermittedToSeeTeam(tokenOwnerEmail, teamId);

            if (!userCanSee)
            {
                return(Forbid());
            }

            // Retrieve tasks from db
            var tasks = await unitOfWork.UserTaskRepository
                        .GetTasksAsync(normalizedAddress);

            // Filter tasks that belong to team
            var visibleTasks = tasks.Where(task => task.TeamId != null && task.TeamId == teamId);

            // List of corresponding tasks as resources
            var resourceTasks = new List <UserTaskResource>();

            // Map each task to a corresponding resource
            foreach (var task in visibleTasks)
            {
                // Add mapped resource to resources list
                if (!task.IsDeleted)
                {
                    resourceTasks.Add(mapToTaskResource(task));
                }
            }

            return(Ok(resourceTasks)); // List of UserTaskResources 200OK
        }
        public async Task <IActionResult> ChangePassword([FromBody] ChangePasswordResource changePasswordResource)
        {
            var email = User.FindFirst("Email").Value;

            var account = await unitOfWork.UserAccountRepository.GetUserAccountAsync(email);

            if (account == null || account.IsDeleted)
            {
                return(NotFound("Account could not be found."));
            }

            // Verify email address has valid structure
            string normalizedAddress;

            if (!EmailExtension.TryNormalizeEmail(email, out normalizedAddress))
            {
                return(BadRequest("Not a valid email address!"));
            }

            var  password      = changePasswordResource.OldPassword + account.Salt;
            bool validPassword = BCrypt.Net.BCrypt.Verify(password, account.Password);

            if (validPassword)
            {
                // Salt and hash password
                var newSalt           = BCrypt.Net.BCrypt.GenerateSalt();
                var newSaltedPassword = changePasswordResource.NewPassword + newSalt;
                var newHashedPassword = BCrypt.Net.BCrypt.HashPassword(newSaltedPassword);

                account.Password = newHashedPassword;
                account.Salt     = newSalt;
                Task.WaitAll(unitOfWork.CompleteAsync());
                return(Ok());
            }
            else
            {
                return(Unauthorized());
            }
        }
        public async Task <IActionResult> AddTeamAsync([FromBody] TeamResource teamResource)
        {
            // Validate against the team model
            if (!ModelState.IsValid)
            {
                return(BadRequest(ModelState));
            }

            // Verify email address has valid structure
            string normalizedAddress;

            if (!EmailExtension.TryNormalizeEmail(teamResource.OwnerEmail, out normalizedAddress))
            {
                return(BadRequest("Not a valid email address!"));
            }

            // Validate that the user creating the team is the assigned owner
            var tokenOwnerEmail = User.FindFirst("Email").Value;

            if (!tokenOwnerEmail.Equals(normalizedAddress))
            {
                return(Forbid());
            }

            // Map the team resource to a model
            teamResource.OwnerEmail = normalizedAddress;
            var teamModel = _mapper.Map <Team>(teamResource);

            // Add the team to context and save changes
            await unitOfWork.UserTeamRepository.AddAsync(teamModel);

            Task.WaitAll(unitOfWork.CompleteAsync());

            // Fetch the newly created team from the DB
            var team = await unitOfWork.UserTeamRepository
                       .GetUserTeamAsync(teamModel.Id);

            return(Ok(_mapper.Map <TeamResource>(team))); // Return newly created mapped team resource to client
        }
Beispiel #7
0
        public async Task <IActionResult> GetUserCompletionRate(string emailAddress, DateTime startDate, DateTime endDate)
        {
            // Verify email address has valid structure
            string normalizedAddress;

            if (!EmailExtension.TryNormalizeEmail(emailAddress, out normalizedAddress))
            {
                return(BadRequest("Not a valid email address!"));
            }
            // Check if user exists
            var userExists = await unitOfWork.UserAccountRepository
                             .UserAccountExists(normalizedAddress);

            // User doesn't exist
            if (!userExists)
            {
                return(NotFound("Couldn't find user."));
            }
            //User exists
            double completionRate = await unitOfWork.CompletionLogEntryRepository.GetUserCompletionRate(normalizedAddress, startDate, endDate);

            return(Ok(completionRate));
        }
        public async Task <IActionResult> GetTeamsForAccount(string emailAddress)
        {
            // Verify email address has valid structure
            string normalizedAddress;

            if (!EmailExtension.TryNormalizeEmail(emailAddress, out normalizedAddress))
            {
                return(BadRequest("Not a valid email address!"));
            }

            // Check if user exists
            var account = await unitOfWork.UserAccountRepository.GetUserAccountAsync(normalizedAddress);

            // No account matches ownerId
            if (account == null || account.IsDeleted)
            {
                return(NotFound("No account found matching that ownerId."));
            }

            var teams = await unitOfWork.TeamMemberRepository.GetAllTeamsForUser(normalizedAddress);

            return(Ok(teams.Where(team => !team.IsDeleted).Select(team => _mapper.Map <TeamResource>(team))));
        }
        public async Task <IActionResult> VetoTeamInvite(string inviteeEmail, int teamId)
        {
            // Verify email address has valid structure
            string normalizedAddress;

            if (!EmailExtension.TryNormalizeEmail(inviteeEmail, out normalizedAddress))
            {
                return(BadRequest("Not a valid email address!"));
            }

            var invite = await unitOfWork.AddUserRequestRepository.GetAddUserRequestAsync(normalizedAddress, teamId);

            if (invite == null)
            {
                return(NotFound("No such invite"));
            }
            // Note: ensure up cascade deletion for team invites, we should be able to assume the team exists here
            var team = await unitOfWork.UserTeamRepository.GetUserTeamAsync(invite.DestinationTeam.Id);

            if (team == null || team.IsDeleted)
            {
                return(NotFound("No such team"));
            }

            // Validate that the vetoing user is the team owner
            var tokenOwnerEmail = User.FindFirst("Email").Value;

            if (!tokenOwnerEmail.Equals(team.OwnerEmail))
            {
                return(Forbid());
            }

            await unitOfWork.AddUserRequestRepository.DeleteAddUserRequestAsync(normalizedAddress, teamId);

            Task.WaitAll(unitOfWork.CompleteAsync());
            return(Ok());
        }
    private void InserContactUs()
    {
        var email     = Request.Params["email"];
        var trangThai = "1";

        #region Thêm tài khoản

        //Thêm tài khoản
        Members.InsertMembers(
            CodeApplications.MemberNewsletter, email, "", "", "", "", email, DateTime.Now.ToString(), "", "", "",
            "", "", "", "", "", trangThai, "", "", "", "", "", "", "");

        #endregion

        #region Gửi email thông báo đến email hệ thống

        var emailhethong = SettingsExtension.GetSettingKey(SettingsExtension.KeyMailWebsite, lang);
        var emailkhac    = email + "," + SettingsExtension.GetSettingKey("MailBanTin", lang);
        var listemail    = emailkhac.Split(new[] { "," }, StringSplitOptions.RemoveEmptyEntries);
        var date         = DateTime.Now.ToString();
        var subject      = LanguageItemExtension.GetnLanguageItemTitleByName("Thông báo từ") + " " + UrlExtension.WebisteUrl + " " + date;
        var body         = @"
    <div style='font:bold 14px Arial;padding-bottom:15px'>" + LanguageItemExtension.GetnLanguageItemTitleByName("Xin chào! Bạn có đăng ký nhận thông tin từ") + " " + UrlExtension.WebisteUrl + @"</div>
    <div style='font:bold 12px Arial;padding-bottom:10px'>" + LanguageItemExtension.GetnLanguageItemTitleByName("Chi tiết") + @":</div>
    <ul>
      <li>" + LanguageItemExtension.GetnLanguageItemTitleByName("Email") + @": " + email + @"</li>
      <li>" + LanguageItemExtension.GetnLanguageItemTitleByName("Gửi lúc") + @": " + DateTime.Now.ToString("dd/MM/yyyy hh:mm:ss tt") + @"</li>
    </ul>";

        EmailExtension.SendEmail(emailhethong, subject, body, listemail);
        #endregion

        #region Thông báo hoàn thành và reset các texbox
        string[] reply = { "success" };
        Response.Output.Write(js.Serialize(reply));
        #endregion
    }
        public async Task <IActionResult> GetAccountAsync(string emailAddress)
        {
            // Verify email address has valid structure
            string normalizedAddress;

            if (!EmailExtension.TryNormalizeEmail(emailAddress, out normalizedAddress))
            {
                return(BadRequest("Not a valid email address!"));
            }

            // Fetch account of ownerId
            var account = await unitOfWork.UserAccountRepository
                          .GetUserAccountAsync(normalizedAddress);

            // Return error if account doesn't exist
            // I imagine we'll need to move IsDeleted later if user wants to reactivate account
            if (account == null || account.IsDeleted)
            {
                return(NotFound("Account could not be found."));
            }

            // Return mapped account resource
            return(Ok(_mapper.Map <UserAccountResource>(account)));
        }
Beispiel #12
0
    private void Booking()
    {
        string s = "Success";

        string iid            = StringExtension.RemoveSqlInjectionChars(Request.Form["iid"]);
        string name           = StringExtension.RemoveSqlInjectionChars(Request.Form["name"]);
        string phone          = StringExtension.RemoveSqlInjectionChars(Request.Form["phone"]);
        string email          = StringExtension.RemoveSqlInjectionChars(Request.Form["email"]);
        string nationality    = StringExtension.RemoveSqlInjectionChars(Request.Form["nationality"]);
        string departureTime  = StringExtension.RemoveSqlInjectionChars(Request.Form["departureTime"]);
        string totalPrice     = StringExtension.RemoveSqlInjectionChars(Request.Form["totalPrice"]);
        string trip           = StringExtension.RemoveSqlInjectionChars(Request.Form["trip"]);
        string content        = StringExtension.RemoveSqlInjectionChars(Request.Form["content"]);
        string nguoilon       = StringExtension.RemoveSqlInjectionChars(Request.Form["nguoilon"]);
        string trevithanhnien = StringExtension.RemoveSqlInjectionChars(Request.Form["trevithanhnien"]);
        string treem          = StringExtension.RemoveSqlInjectionChars(Request.Form["treem"]);
        string embe           = StringExtension.RemoveSqlInjectionChars(Request.Form["embe"]);

        if (totalPrice != LanguageItemExtension.GetnLanguageItemTitleByName("Liên hệ"))
        {
            totalPrice = totalPrice + " " + LanguageItemExtension.GetnLanguageItemTitleByName("VND");
        }

        string detail = @"
    <div>" + LanguageItemExtension.GetnLanguageItemTitleByName("Thông tin tour:") + @"</div>
    <ul>
    <li>" + LanguageItemExtension.GetnLanguageItemTitleByName("Tên Tour") + ": <b>" + trip + @"</b></li>
    <li>" + LanguageItemExtension.GetnLanguageItemTitleByName("Ngày khởi hành") + ": <b>" + departureTime + @"</b></li>
    <li>" + LanguageItemExtension.GetnLanguageItemTitleByName("Số lượng người lớn") + ": <b>" + nguoilon + @"</b></li>
    <li>" + LanguageItemExtension.GetnLanguageItemTitleByName("Số lượng trẻ em từ 8 - 11 tuổi") + ": <b>" + trevithanhnien + @"</b></li>
    <li>" + LanguageItemExtension.GetnLanguageItemTitleByName("Số lượng trẻ em từ 3 - 7 tuổi") + ": <b>" + treem + @"</b></li>
    <li>" + LanguageItemExtension.GetnLanguageItemTitleByName("Số lượng trẻ em nhỏ hơn 3 tuổi") + ": <b>" + embe + @"</b></li>
    <li>" + LanguageItemExtension.GetnLanguageItemTitleByName("Tổng giá tiền") + ": <b style='color:#e90d0d'>" + totalPrice + @"</b></li>
    </ul>
    <div>" + LanguageItemExtension.GetnLanguageItemTitleByName("Thông tin người đặt:") + @"</div>
    <ul>
    <li>" + LanguageItemExtension.GetnLanguageItemTitleByName("Họ tên") + ": " + name + @"</li>
    <li>" + LanguageItemExtension.GetnLanguageItemTitleByName("Điện thoại") + ": " + phone + @"</li>
    <li>" + LanguageItemExtension.GetnLanguageItemTitleByName("Email") + ": " + email + @"</li>
    <li>" + LanguageItemExtension.GetnLanguageItemTitleByName("Quốc tịch") + ": " + nationality + @"</li>
    <li>" + LanguageItemExtension.GetnLanguageItemTitleByName("Ghi chú") + ": " + content + @"</li>
    </ul>";

        Subitems.InsertSubitems(iid, lang, CodeApplications.TourBooking, "Đơn đặt tour", detail, "", "", "", "", DateTime.Now.ToString(),
                                DateTime.Now.ToString(), DateTime.Now.ToString(), "0", "");

        #region Gửi email thông báo đến email hệ thống
        string   emailhethong = SettingsExtension.GetSettingKey(SettingsExtension.KeyMailWebsite, lang);
        string   emailkhac    = SettingsExtension.GetSettingKey(SettingsExtension.KeyEmailPhu, lang);
        string[] listemail    = emailkhac.Split(new string[] { "," }, StringSplitOptions.RemoveEmptyEntries);
        string   date         = DateTime.Now.ToString();
        string   subject      = LanguageItemExtension.GetnLanguageItemTitleByName("Thông báo đặt tour từ") + " " + UrlExtension.WebisteUrl + " " + date;
        string   body         = @"
    <div style='font:bold 14px Arial;padding-bottom:15px'>" + LanguageItemExtension.GetnLanguageItemTitleByName("Xin chào! Bạn có một đơn đăng ký đặt tour tại") + " " + TatThanhJsc.Extension.UrlExtension.WebisteUrl + @"</div>
    <div style='font:bold 12px Arial;padding-bottom:10px'>" + LanguageItemExtension.GetnLanguageItemTitleByName("Thông tin chi tiết") + @":</div>
    " + detail + @"";

        EmailExtension.SendEmail(emailhethong, subject, body, listemail);
        #endregion

        string[] strArrayReturn = { s };
        Response.Write(js.Serialize(strArrayReturn));
    }
Beispiel #13
0
        public async Task <IActionResult> EditUserTaskAsync(int taskId, [FromBody] UserTaskResource userTaskResource)
        {
            // How does this validate against the UserTask model?
            if (!ModelState.IsValid)
            {
                return(BadRequest());
            }

            // Verify email address has valid structure
            string normalizedAddress;

            if (!EmailExtension.TryNormalizeEmail(userTaskResource.OwnerEmail, out normalizedAddress))
            {
                return(BadRequest("Not a valid email address!"));
            }

            // Get users email address from token
            var tokenOwnerEmail = User.FindFirst("Email").Value;

            if (!tokenOwnerEmail.Equals(normalizedAddress))
            {
                return(Forbid());
            }

            // Fetch an account from the DB asynchronously
            var account = await unitOfWork.UserAccountRepository
                          .GetUserAccountAsync(tokenOwnerEmail);

            // Return not found exception if account doesn't exist
            if (account == null)
            {
                return(NotFound("Couldn't find account matching that ownerId."));
            }

            // Retrieves task from UserTasks table
            var task = await unitOfWork.UserTaskRepository
                       .GetTaskAsync(taskId);

            // Nothing was retrieved, no id match
            if (task == null || task.IsDeleted)
            {
                return(NotFound("Task couldn't be found."));
            }

            // Validates task belongs to correct user
            if (task.OwnerEmail != account.Email)
            {
                return(BadRequest("Task does not belong to this account."));
            }

            //Make sure that the task resource specifies a valid team
            if (userTaskResource.TeamId != null)
            {
                var team = await unitOfWork.UserTeamRepository.GetUserTeamAsync((int)userTaskResource.TeamId);

                if (team == null || (team.IsDeleted && (task.TeamId == null || userTaskResource.TeamId != task.TeamId)))
                {
                    return(NotFound("No such team"));
                }
            }

            //Check if a todo for that task exists
            var todo       = task.Todo;
            var todoExists = todo != null;

            //Complete the task if needed
            if (todoExists)
            {
                if (userTaskResource.IsCompleted && !todo.IsCompleted)
                {
                    await unitOfWork.TodoRepository.CompleteTodoAsync(todo.TaskId);
                }
                else if (!userTaskResource.IsCompleted && todo.IsCompleted)
                {
                    await unitOfWork.TodoRepository.UndoCompleteTodoAsync(todo.TaskId);
                }
            }
            //Delete the task if needed
            //Remove the todo if needed
            if (userTaskResource.IsDeleted)
            {
                await unitOfWork.TodoRepository.RemoveTodosAsync(taskId);
            }

            // Map resource to model
            task.Name        = userTaskResource.Name;
            task.Description = userTaskResource.Description;
            task.Weekdays    = userTaskResource.Weekdays;
            task.Frequency   = userTaskResource.Frequency;
            //Don't change the email associated with the task
            task.TeamId = userTaskResource.TeamId;
            if (userTaskResource.IsDeleted)
            {
                task.Delete();
            }

            //Refresh the todo list
            await unitOfWork.TodoRepository.RefreshTodo(taskId);

            // Save updated userTask to database
            await unitOfWork.CompleteAsync();

            // Return mapped resource
            return(Ok(mapToTaskResource(task)));
        }
        public ActionResult Index(Send Savemail)
        {
            List <SelectListItem> ulkekodu = (from i in db.TelKodu.ToList()
                                              select new SelectListItem
            {
                Text = i.UlkeKodu,
                Value = i.Id.ToString()
            }).ToList();

            ViewBag.bag = ulkekodu;

            try
            {
                try
                {
                    string[] email = Savemail.Kime.Split(';');

                    for (int i = 0; i < email.Count(); i++)
                    {
                        results = EmailExtension.EmailRegex(email[i]);
                    }
                    if (results.ResultErrorList.Count > 0)
                    {
                        ModelState.AddModelError("Kime", "Email girişlerinde hatalı bir email mevcut");
                        return(View(Savemail));
                    }
                    else
                    {
                        foreach (var item in email)
                        {
                            var senderEmail = new MailAddress("*****@*****.**", "Edanur");

                            var receiverEmail = new MailAddress(item, "Receiver");

                            var password = "******";
                            var sub      = Savemail.Konu;
                            var body     = Savemail.Mesaj + "  " + Savemail.Kim + " " + Savemail.Telefon;
                            var smtp     = new SmtpClient()
                            {
                                Host                  = "smtp.gmail.com",
                                Port                  = 587,
                                EnableSsl             = true,
                                DeliveryMethod        = SmtpDeliveryMethod.Network,
                                UseDefaultCredentials = false,
                                Credentials           = new NetworkCredential(senderEmail.Address, password)
                            };
                            using (var mess = new MailMessage(senderEmail, receiverEmail)
                            {
                                Subject = Savemail.Konu,
                                Body = body
                            })
                                smtp.Send(mess);
                            db.Send.Add(Savemail);
                            db.SaveChanges();
                        }
                    }
                    return(View());
                }
                catch (NullReferenceException exception)
                {
                    ModelState.AddModelError("Kime", "Email alanı boş olamaz");
                    return(View());
                }
            }
            catch (Exception ex)
            {
                throw new Exception(ex.Message);
            }
        }
        public async Task <IActionResult> InviteUserToTeamAsync(string emailAddress, int teamId)
        {
            // Verify email address has valid structure
            string normalizedAddress;

            if (!EmailExtension.TryNormalizeEmail(emailAddress, out normalizedAddress))
            {
                return(BadRequest("Not a valid email address!"));
            }

            var team = await unitOfWork.UserTeamRepository.GetUserTeamAsync(teamId);

            if (team == null || team.IsDeleted)
            {
                return(NotFound("No such team"));
            }

            var tokenOwnerEmail = User.FindFirst("Email").Value;
            // Check that inviter is on team and invitee isn't on team
            var inviterIsTeamMember = await unitOfWork.TeamMemberRepository.UserIsInTeam(teamId, tokenOwnerEmail);

            var inviteeIsTeamMember = await unitOfWork.TeamMemberRepository.UserIsInTeam(teamId, normalizedAddress);

            if (!inviterIsTeamMember || inviteeIsTeamMember)
            {
                return(BadRequest());
            }

            // Check if inviter is team owner
            var creatorIsTeamOwner = team.OwnerEmail == tokenOwnerEmail;
            var inviter            = await unitOfWork.UserAccountRepository.GetUserAccountAsync(tokenOwnerEmail);

            if (inviter == null || inviter.IsDeleted)
            {
                return(NotFound("User doesn't exist"));
            }
            var invitee = await unitOfWork.UserAccountRepository.GetUserAccountAsync(normalizedAddress);

            if (invitee == null || invitee.IsDeleted)
            {
                return(NotFound("User doesn't exist"));
            }
            //Check if invite already exists
            var invite = await unitOfWork.AddUserRequestRepository.GetAddUserRequestAsync(normalizedAddress, teamId);

            if (invite == null)
            {
                await unitOfWork.AddUserRequestRepository.AddAsync(
                    new AddUserRequest
                {
                    Invitee         = invitee,
                    Inviter         = inviter,
                    IsAuthorized    = creatorIsTeamOwner,
                    DestinationTeam = team
                });
            }
            else
            {
                // Authorize existing invite
                if (creatorIsTeamOwner)
                {
                    invite.InviterEmail = tokenOwnerEmail;
                    invite.IsAuthorized = true;
                }
            }
            Task.WaitAll(unitOfWork.CompleteAsync());
            return(Ok());
        }
        public async Task <IActionResult> UpdateUserTeamAsync(int teamId, [FromBody] TeamResource teamResource)
        {
            if (!ModelState.IsValid)
            {
                return(BadRequest(ModelState));
            }

            // Verify email address has valid structure
            string normalizedAddress;

            if (!EmailExtension.TryNormalizeEmail(teamResource.OwnerEmail, out normalizedAddress))
            {
                return(BadRequest("Not a valid email address!"));
            }

            var dbTeam = await unitOfWork.UserTeamRepository.GetUserTeamAsync(teamId);

            // Validate that the user editing the team is the owner
            var tokenOwnerEmail = User.FindFirst("Email").Value;

            if (!tokenOwnerEmail.Equals(dbTeam.OwnerEmail))
            {
                return(Forbid());
            }

            // Fetch an account from the DB asynchronously
            var account = await unitOfWork.UserAccountRepository
                          .GetUserAccountAsync(tokenOwnerEmail);

            // Return not found exception if account doesn't exist
            if (account == null)
            {
                return(NotFound("Couldn't find an account matching that ownerId."));
            }

            // Get the team
            var team = await unitOfWork.UserTeamRepository
                       .GetUserTeamAsync(teamId);

            // Nothing was retrieved, no id match
            if (team == null || team.IsDeleted)
            {
                return(NotFound("Couldn't find a team matching that teamId."));
            }

            // Map resource to model
            team.TeamName        = teamResource.TeamName;
            team.TeamDescription = teamResource.TeamDescription;

            // check if owner is changing
            if (tokenOwnerEmail != normalizedAddress)
            {
                await unitOfWork.TeamMemberRepository.ChangeTeamOwnership(teamId, normalizedAddress);
            }

            // Save updated team to database
            Task.WaitAll(unitOfWork.CompleteAsync());

            // Return mapped team resource
            return(Ok(_mapper.Map <TeamResource>(team)));
        }
    void HuyBai()
    {
        #region Lấy tiêu đề bài viết
        string    postTitle  = "";
        string    condition2 = ItemsTSql.GetById(iid);
        string    fields     = DataExtension.GetListColumns(ItemsColumns.VititleColumn, ItemsColumns.VISEOMETAPARAMSColumn);
        string    orderby    = GroupsColumns.IgorderColumn;
        DataTable dt         = new DataTable();
        dt = GroupsItems.GetAllData("1", fields, condition2, orderby);
        if (dt.Rows.Count > 0)
        {
            postTitle = dt.Rows[0][ItemsColumns.VititleColumn].ToString();
        }
        #endregion

        #region Lấy info người đăng bài
        string    tenNguoiDangBai   = "";
        string    emailNguoiDangBai = "";
        DataTable dtUserDangBai     = Users.GetUsersByUserId(userid);
        if (dtUserDangBai.Rows.Count > 0)
        {
            tenNguoiDangBai   = dtUserDangBai.Rows[0][UsersColumns.UserfirstnameColumn].ToString() + " " + dtUserDangBai.Rows[0][UsersColumns.UserlastnameColumn].ToString();
            emailNguoiDangBai = dtUserDangBai.Rows[0][UsersColumns.UseremailColumn].ToString();
        }
        #endregion

        #region Lấy info người hủy bài
        DataTable dtUserHuyBai = Users.GetUsersByUserId(CookieExtension.GetCookies("UserId"));

        string tenNguoiHuyBai = "";

        if (dtUserHuyBai.Rows.Count > 0)
        {
            tenNguoiHuyBai = dtUserHuyBai.Rows[0][UsersColumns.UserfirstnameColumn].ToString() + " " + dtUserHuyBai.Rows[0][UsersColumns.UserlastnameColumn].ToString();
        }
        #endregion

        #region Đổi trạng thái hiển thị của item
        string[] fieldsDelGroup = { "IIENABLE" };
        string[] valuesDelGroup = { "3" };
        string   condition      = " IID = '" + iid + "' ";
        TatThanhJsc.Database.Items.UpdateItems(DataExtension.UpdateTransfer(fieldsDelGroup, valuesDelGroup), condition);
        #endregion

        #region Thêm thông tin ("", người hủy, thời gian hủy, nội dung hủy)
        string   data            = StringExtension.GhepChuoi("", tenNguoiHuyBai, content);
        string[] fieldsDelGroup2 = { "VISEOMETACANONICAL" };
        string[] valuesDelGroup2 = { "N'" + data + "'" };
        string[] fieldsDelGroup3 = { "VISEOMETALANG" };
        string[] valuesDelGroup3 = { "'" + DateTime.Now.ToString() + "'" };
        condition = " IID = '" + iid + "' ";
        TatThanhJsc.Database.Items.UpdateItems(DataExtension.UpdateTransfer(fieldsDelGroup2, valuesDelGroup2), condition);
        TatThanhJsc.Database.Items.UpdateItems(DataExtension.UpdateTransfer(fieldsDelGroup3, valuesDelGroup3), condition);
        #endregion

        #region Gửi mail tới thành viên
        string link = "", contentEmail = "";
        link         = UrlExtension.WebisteUrl + "admin.aspx?uc=" + uc + "&suc=QuanLyBaiVietBiHuy";
        contentEmail = @"
		<div style='color:#333'>
			<div>"             + LanguageItemExtension.GetnLanguageItemTitleByName("Xin chào") + @" " + tenNguoiDangBai + @"!</div>
			<br/>
			<div>"             + LanguageItemExtension.GetnLanguageItemTitleByName("Bài viết") + " <b>" + postTitle + @"</b> " + LanguageItemExtension.GetnLanguageItemTitleByName("của bạn đã bị hủy bỏ bởi") + @" <span style='color: blue'>" + tenNguoiHuyBai + @"</span> " + LanguageItemExtension.GetnLanguageItemTitleByName("với lời nhắn") + @":</div>
			<br />
			<div>"""             + content + @"""</div>
			<br />
			<div>"             + LanguageItemExtension.GetnLanguageItemTitleByName("Để xem danh sách các bài viết bị hủy, vui lòng click vào") + @" <a href='" + link + @"'>" + LanguageItemExtension.GetnLanguageItemTitleByName("đây") + @"</a>.</div>			
		</div>"        ;

        EmailExtension.SendEmail(emailNguoiDangBai, "Thông báo hủy bài viết từ " + UrlExtension.WebisteUrl, contentEmail);
        #endregion
    }