/// <summary> /// Send email to a recipient and BCC members. /// </summary> /// <param name="FromName">Sender name.</param> /// <param name="FromEmail">Sender email.</param> /// <param name="ToName">Recipient name.</param> /// <param name="ToEmail">Recipient email.</param> /// <param name="Bcc">BCC recipient emails.</param> /// <param name="Subject">Mail subject.</param> /// <param name="Body">Mail body.</param> /// <returns>True if an email has been sent succesfully.</returns> public static bool SendMail(string FromName, string FromEmail, string ToName, string ToEmail, string Bcc, string Subject, string Body) { ApplicationParameters AppParams = Parameters; var fromAddress = new MailAddress(FromEmail, FromName); var toAddress = new MailAddress(ToEmail, ToName); string fromPassword = AppParams.MailServerSmtpPassword.Value; string subject = Subject; string body = Body; var smtp = new SmtpClient { Host = Parameters.MailServerSmtpHost.Value, Port = int.Parse(AppParams.MailServerSmtpPort.Value), EnableSsl = bool.Parse(AppParams.MailServerSmtpSSLEnabled.Value), DeliveryMethod = SmtpDeliveryMethod.Network, Credentials = new NetworkCredential(fromAddress.Address, fromPassword), Timeout = 20000 }; using (var message = new MailMessage(fromAddress, toAddress) { Subject = subject, Body = body, IsBodyHtml = true }) try { if (Bcc != null && Bcc.Length > 0) { message.Bcc.Add(Bcc); } else { Bcc = ""; } string Title = String.Format(AuditEvent.TheEmailhasBeenSent, FromName, FromEmail, ToName, ToEmail, Bcc, Subject); smtp.Send(message); AuditEvent.AppEventSuccess(FromEmail, Title, "##Details%%" + Title + "\r\n\r\nE-mail message:\r\n" + Body + "%%"); return(true); } catch (Exception ex) { AuditEvent.AddAppEvent( new AuditEventItem { EventType = AuditEventType.Error, IPAddress = HttpContext.Current.Request.UserHostAddress, MemberEmail = AppParams.GeneralAdminEmail.Value, Description = ex.Message, Details = AuditEvent.GetSessionDetails("E-mail message:\r\n" + body + "\r\nStackTrace:\r\n" + ex.StackTrace) } ); return(false); } }
protected void Application_Error() { var exception = Server.GetLastError(); var httpException = exception as HttpException; string Message = exception.Message; string Details = String.Format("Source: {0}\r\nStackTrace: {1}", exception.Source, exception.StackTrace); if (exception.InnerException != null) { Message += " " + exception.InnerException.Message; Details += String.Format("\r\nSource: {0}\r\nStackTrace: {1}", exception.InnerException.Source, exception.InnerException.StackTrace); } try { AuditEvent.AppEventError(AppSession.Parameters.GeneralAdminEmail.Value, "Unhandled exception: " + Message, AuditEvent.GetSessionDetails(Details)); } catch { } if (HttpContext.Current.IsDebuggingEnabled || (User.Identity.IsAuthenticated && AppSession.IsMemberInAdminRole)) { } else { Response.Clear(); Server.ClearError(); var routeData = new RouteData(); routeData.Values["controller"] = "Errors"; routeData.Values["action"] = "General"; routeData.Values["exception"] = exception; Response.StatusCode = 500; if (httpException != null) { Response.StatusCode = httpException.GetHttpCode(); switch (Response.StatusCode) { case 403: routeData.Values["action"] = "Http403"; break; case 404: routeData.Values["action"] = "Http404"; break; } } // Avoid IIS7 getting in the middle // http://blog.davebouwman.com/2011/04/21/custom-404-pages-for-asp-net-mvc-3/ Response.TrySkipIisCustomErrors = true; IController errorsController = new ErrorsController(); var rc = new RequestContext(new HttpContextWrapper(Context), routeData); errorsController.Execute(rc); } }
public ActionResult SaveProfile(List <ProfileFieldInfo> FieldInfo, string TimeZoneID) { System.Threading.Thread.Sleep(1000); RequestResultModel _model = new RequestResultModel(); _model.InfoType = RequestResultInfoType.ErrorOrDanger; _model.Message = ""; // Check mandatory fields foreach (ProfileFieldInfo Field in FieldInfo) { ProfileField profileField = ProfileFields.GetBy(int.Parse(Field.ID)); if (profileField.IsMandatory == 1 && (Field.Value == null || Field.Value.Trim().Length == 0)) { _model.Message += String.Format("<li>{0}</li>", String.Format(GetLabel("Account.CreateAccount.Mandatory"), profileField.FieldName)); } if (profileField.IsMandatory == 1 && profileField.FieldTypeID == ProfileFieldTypeEnum.CheckBox && Field.Value != null && Field.Value.ToLower() == "false") { _model.Message += String.Format("<li>{0}</li>", String.Format(GetLabel("Account.CreateAccount.Mandatory"), profileField.FieldName)); } } if (_model.Message.Length > 0) { _model.Message = String.Format("<ul class=\"error-message-list\">{0}</ul>", _model.Message); return(Json(new { Status = RequestResultInfoType.ErrorOrDanger, NotifyType = NotifyType.DialogInline, Message = HttpUtility.HtmlDecode(this.RenderPartialView(@"_RequestResultPageInLine", _model)) }, JsonRequestBehavior.AllowGet)); } if (Profile.Member.TimeZoneID != TimeZoneID) { AuditEvent.AppEventInfo(AppSession.Profile.Member.Email, String.Format("Member updated time zone to: \"{0}\" ", Profile.Member.TimeZoneID)); } Profile.Member.TimeZoneID = TimeZoneID; Profile.Member.UpdateTimeZone(); String FieldValues = ""; List <MemberProfileField> memberProfileFields = MemberProfileFields.GetByMember(Profile.Member.MemberID); foreach (ProfileFieldInfo Field in FieldInfo) { String Value = Field.Value != null?Field.Value.Trim() : Field.Value; ProfileField profileField = ProfileFields.GetBy(int.Parse(Field.ID)); MemberProfileField memberProfileField = MemberProfileFields.GetField(memberProfileFields, int.Parse(Field.ID)); if (profileField.Encrypted == 1 && memberProfileField.FieldValue != null && memberProfileField.FieldValue.Length > 0) { memberProfileField.FieldValue = Encryptor.DecryptStringAES(memberProfileField.FieldValue, AppSession.EncryptionKey); } if (Value != memberProfileField.FieldValue) { FieldValues += String.Format("<b>Name</b>: {0} <b>Before:</b> \"{1}\" <b>Now:</b> \"{2}\"<br/>", profileField.FieldName, memberProfileField.FieldValue, Value); } memberProfileField.MemberID = Profile.Member.MemberID; memberProfileField.FieldID = int.Parse(Field.ID); memberProfileField.FieldValue = Value; if (profileField.Encrypted == 1 && memberProfileField.FieldValue != null && memberProfileField.FieldValue.Length > 0) { memberProfileField.FieldValue = Encryptor.EncryptStringAES(memberProfileField.FieldValue, AppSession.EncryptionKey); } memberProfileField.Save(); } memberProfileFields = MemberProfileFields.GetByMember(Profile.Member.MemberID); List <MemberFieldNameValue> MemberFieldNameValues = new List <MemberFieldNameValue>(); foreach (MemberProfileField memberField in memberProfileFields) { MemberFieldNameValues.Add(new MemberFieldNameValue { Name = memberField.ProfileFieldID.ToString(), Value = memberField.FieldValue, Type = (int)ProfileFields.GetBy(memberField.FieldID).FieldTypeID }); } _model.Message = "Your profile has been updated successfully."; _model.InfoType = RequestResultInfoType.Success; AuditEvent.AppEventInfo(AppSession.Profile.Member.Email, String.Format("Profile of \"{0}\" {1} member has been updated successfully.", AppSession.Profile.Member.Name, AppSession.Profile.Member.Email), AuditEvent.GetSessionDetails(FieldValues)); return(Json(new { Status = RequestResultInfoType.Success, NotifyType = NotifyType.DialogInline, Message = HttpUtility.HtmlDecode(this.RenderPartialView(@"_RequestResultPageInLine", _model)), MemberFields = MemberFieldNameValues, TimeZoneID = Profile.Member.TimeZoneID != null && Profile.Member.TimeZoneID.Length > 0 ? Profile.Member.TimeZoneID : "" }, JsonRequestBehavior.AllowGet)); }
/// <summary> /// Returns LDAP member info which are stored in the directory. /// </summary> /// <returns></returns> public LDAPMemberInfo GetMemberInfo() { DirectoryEntry DirEntry = new DirectoryEntry(); { DirEntry.Path = DirectoryPath; DirEntry.Username = UserName; DirEntry.Password = Password; DirEntry.AuthenticationType = AuthenticationTypes.Secure; } LDAPMemberInfo memberInfo = new LDAPMemberInfo(); string[] nameParts = UserName.Split(new string[] { "@" }, StringSplitOptions.RemoveEmptyEntries); DirectorySearcher search = new DirectorySearcher(DirEntry); search.Filter = "(SAMAccountName=" + nameParts[0] + ")"; search.PropertiesToLoad.Add("cn"); search.PropertiesToLoad.Add("mail"); try{ SearchResult result = search.FindOne(); if (null != result) { memberInfo.DisplayName = (String)result.Properties["cn"][0]; memberInfo.Email = (String)result.Properties["mail"][0]; } } catch (Exception ex) { String Message = String.Format("Member:{0}, Message:{1}", UserName, ex.Message); AuditEvent.AppEventError(AppSession.Parameters.GeneralAdminEmail.Value, "LDAP obtaining member name failed. " + Message, AuditEvent.GetSessionDetails(Message), true); } return(memberInfo); }
/// <summary> /// Authenticates a member in LDAP directory. /// </summary> /// <returns>True if Aathentication was fine.</returns> public bool Authenticate() { bool authentic = false; try { DirectoryEntry entry = new DirectoryEntry(DirectoryPath, UserName, Password); object nativeObject = entry.NativeObject; string[] nameParts = UserName.Split(new string[] { "@" }, StringSplitOptions.RemoveEmptyEntries); DirectorySearcher search = new DirectorySearcher(entry); search.Filter = "(SAMAccountName=" + nameParts[0] + ")"; search.PropertiesToLoad.Add("cn"); search.PropertiesToLoad.Add("mail"); SearchResult result = search.FindOne(); if (null != result) { MemberInfo.DisplayName = (String)result.Properties["cn"][0]; MemberInfo.Email = (String)result.Properties["mail"][0]; } authentic = true; } catch (DirectoryServicesCOMException ex) { String Message = String.Format("Member: {0} Message:{1}", UserName, ex.Message); AuditEvent.AppEventError(AppSession.Parameters.GeneralAdminEmail.Value, "LDAP authentication failed. " + Message, AuditEvent.GetSessionDetails(Message), true); } return(authentic); }
public ActionResult ImportRoles() { System.Threading.Thread.Sleep(200); CultureInfo provider = CultureInfo.InvariantCulture; List <Role> RoleResult = new List <Role>(); try { for (int i = 0; i < Request.Files.Count; i++) { System.Threading.Thread.Sleep(1); String FileContent = ""; HttpPostedFileBase PostedFile = Request.Files[i]; using (System.IO.Stream input = PostedFile.InputStream) { byte[] buffer = new byte[PostedFile.InputStream.Length]; input.Read(buffer, 0, buffer.Length); FileContent = System.Text.ASCIIEncoding.UTF8.GetString(buffer); } if (FileContent.Length > 0) { string[] Lines = FileContent.Split(new string[] { "\r\n" }, StringSplitOptions.RemoveEmptyEntries); AuditEvent.AppEventSuccess(Profile.Member.Email, String.Format(AuditEvent.RoleUploadHasStarted, Lines.Length)); int LineNumber = 1; foreach (String Line in Lines) { if (LineNumber == 1 || Line == null || Line.Trim().Length == 0) { LineNumber++; continue; } List <string> Values = new List <string>(); CsvParser parser = new CsvParser(Line); foreach (string s in parser) { Values.Add(s.Trim()); } if (Values.Count >= 4) { Role Role = Web.Admin.Logic.Collections.Roles.GetBy(Values[0]); if (Role.RoleID > 0) { Role.UIMessage = "Role already exists."; Role.UILineNumber = LineNumber; Role.UIMessageType = Logic.UIMessageType.Warning; AuditEvent.AppEventWarning(Profile.Member.Email, String.Format(AuditEvent.RoleUploadMemberExists, Role.Name)); } else { Role.Name = Values[0]; Role.Settings = Values[1]; if (Values[3].Trim().Length == 0) { Role.BackColor = "aaaaaa"; } else { Role.BackColor = Values[2]; } if (Values[3].Trim().Length == 0) { Role.ForeColor = "000000"; } else { Role.ForeColor = Values[3]; } if (BuiltInRoleMember.ContainsRole(Role.Name)) { Role.IsBuiltIn = true; } else { Role.IsBuiltIn = false; } try { Role.Created = DateTime.ParseExact(Values[4], "dd.MM.yyyy HH:mm:ss", provider); } catch { } try { Role.Modified = DateTime.ParseExact(Values[5], "dd.MM.yyyy HH:mm:ss", provider); } catch { } Role.Save(); Role.UIMessage = "Role has been added."; Role.UIMessageType = Logic.UIMessageType.Success; Role.UILineNumber = LineNumber; AuditEvent.AppEventSuccess(Profile.Member.Email, String.Format(AuditEvent.RoleUploadedItemAdded, Role.Name)); } RoleResult.Add(Role); } else if (Values.Count > 0) { Role Role = new Role(); Role.UIMessage = "Wrong line format. Number of columns: " + Values.Count.ToString(); Role.UIMessageType = Logic.UIMessageType.ErrorOrDanger; Role.UILineNumber = LineNumber; AuditEvent.AppEventSuccess(Profile.Member.Email, String.Format(AuditEvent.RoleUploadWrongLineFormat, LineNumber, Values.Count)); RoleResult.Add(Role); } LineNumber++; } } } System.Threading.Thread.Sleep(1000); RoleListModel Model = new RoleListModel(); Model.Roles = RoleResult; return(Json(new { NotifyType = NotifyType.Dialog, Html = this.RenderPartialView(@"_ImportRolesResult", Model) }, "text/html", JsonRequestBehavior.AllowGet)); } catch (Exception ex) { RequestResultModel _model = new RequestResultModel(); _model.Title = "Warning"; _model.Message = String.Format("Something went wrong: {0}", HttpUtility.HtmlEncode(ex.Message)); _model.InfoType = RequestResultInfoType.ErrorOrDanger; _model.HideInSeconds = 0; _model.Height = 250; AuditEvent.AppEventError(Profile.Member.Email, _model.Message, AuditEvent.GetSessionDetails(ex.StackTrace)); return(Json(new { NotifyType = NotifyType.DialogInline, Html = this.RenderPartialView(@"_RequestResultDialog", _model) }, "text/html", JsonRequestBehavior.AllowGet)); } }