using System; using System.Collections.Generic; using System.Configuration; using System.Globalization; using System.IO; using System.Linq; using System.Net; using System.Net.Mail; using System.Security.Cryptography; using System.ServiceModel; using System.ServiceModel.Channels; using System.Text; using System.Text.RegularExpressions; using System.Xml; using BeWo.Data.Entities; using BeWo.Service.ServiceContracts; using BeWo.Data; using BS.Shared; using BS.Shared.Extensions; namespace BeWo.Service.Core { public class Utils { private static readonly Regex indexRegex = new Regex("(?:Index=\"){1}([0-9]+)\"{1}"); private static readonly Regex idRegex = new Regex("(?:Id=\")(([a-z0-9]{8})-{1}([a-z0-9]{4})-{1}([a-z0-9]{4})-{1}([a-z0-9]{4})-{1}([a-z0-9]{12}))(?=\"{1})"); public static FaultException CreateBeWoFaultException(Exception ex) { try { SendErrorMail("MYSQL EXCEPTION - AUTOMATED MAIL NOTIFICATION", ex.ToString()); } catch { } return new FaultException(new BeWoFault(ex), ex.ToString()); } public static string GetClientIP() { if (OperationContext.Current != null) { MessageProperties properties = OperationContext.Current.IncomingMessageProperties; var endpoint = properties[RemoteEndpointMessageProperty.Name] as RemoteEndpointMessageProperty; return endpoint.Address; } return null; } public static string GetMD5(string val) { var lMD5 = new MD5CryptoServiceProvider(); string lHash = BitConverter.ToString(lMD5.ComputeHash(Encoding.UTF8.GetBytes(val))); return lHash; } public static bool IsValidEmail(string email) { //return Regex.IsMatch(email, @"^([\w-\.]+)@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.)|(([\w-]+\.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(\]?)$"); return Regex.IsMatch(email, @"^(?("")("".+?(? pSearchParameter, int pSearchFieldCount) { //List lDifferentParameter; return null; } public static string GetRecurringAppointmentsId(SchedulerAppointment appointment) { var erg = string.Empty; if (appointment.RecurrenceInfo == null) return erg; using (var reader = XmlReader.Create(new StringReader(appointment.RecurrenceInfo))) { reader.ReadToFollowing("RecurrenceInfo"); reader.MoveToAttribute("Id"); erg = reader.Value; } return erg; } public static DateTime[] GetRecurrenceInterval(SchedulerAppointment appointment) { var erg = new DateTime[2]; using (var reader = XmlReader.Create(new StringReader(appointment.RecurrenceInfo))) { reader.ReadToFollowing("RecurrenceInfo"); reader.MoveToAttribute("Start"); DateTime outValue; var parsingSuccessful = DateTime.TryParseExact(reader.Value, @"MM\/dd\/yyyy HH:mm:ss", null, DateTimeStyles.None, out outValue); erg[0] = outValue; reader.MoveToAttribute("End"); parsingSuccessful = DateTime.TryParseExact(reader.Value, @"MM\/dd\/yyyy HH:mm:ss", null, DateTimeStyles.None, out outValue); erg[1] = outValue; } return erg; } public static bool UserHasRight(ApplicationUser user, UserRightType right) { foreach (var ug in user.UserGroups) { foreach (var rr in ug.Rights) { if (rr.RightType == right) { return true; } } } return false; } public static string GetRecurrenceIdFromRecurrenceInfo(string pRecurrenceInfo) { var regex = new Regex("(Id=\\\"[a-z0-9-]+\\\")"); var match = regex.Match(pRecurrenceInfo); if(match.Success) { var value = match.Value; var actualId = value.Split("\""); if(actualId.Count > 1) { return actualId[1]; } } return null; } public static string GetRecurrenceIndexFromRecurrenceInfo(string pRecurrenceInfo) { if(!pRecurrenceInfo.Contains("Index")) { return null; } var regex = new Regex("(Index=\\\"\\d+\\\")"); var match = regex.Match(pRecurrenceInfo); if(match.Success) { var value = match.Value; var actualIndex = value.Split("\""); if(actualIndex.Count > 1) { return actualIndex[1]; } } return null; } public static List ExtractRecurrenceIdFromRecurrenceString(List appointments) { var result = new List(); foreach(var recurrenceInfo in appointments.Where(w => w.RecurrenceInfo != null).Select(s => s.RecurrenceInfo)) { var id = GetRecurrenceIdFromRecurrenceInfo(recurrenceInfo); if(id != null) { result.AddIfNotIn(id); } } return result; } public static string ExtractIdFromRecurrenceInfo(string pRecurrenceInfo) { return pRecurrenceInfo != null ? idRegex.Match(pRecurrenceInfo).Groups[1].Value : null; } public static int ExtractIndexFromRecurrenceInfo(string pRecurrenceInfo) { if (pRecurrenceInfo != null) { var indexString = indexRegex.Match(pRecurrenceInfo).Groups[1].Value; var index = !string.IsNullOrEmpty(indexString) ? int.Parse(indexString) : 0; return index; } return -1; } } }