/// <summary> /// Gets the list of the avatar timestamp on the file system for the user's provided contacts. /// </summary> /// <param name="contacts">A string containing the ',' separated contacts.</param> /// <returns>A list containing user's contacts avatar timestamp.</returns> public List <ContactAvatarTimestamp> GetContactsAvatarTimestamp(string contacts) { char[] delimeter = new[] { ',' }; ulong avatarTimestamp = 0; NeeoFileInfo fileInfo = null; List <ContactAvatarTimestamp> contactlList = new List <ContactAvatarTimestamp>(); var contactsArray = contacts.Split(delimeter); if (contactsArray.Length > 0) { for (int i = 0; i < contactsArray.Length; i++) { contactsArray[i] = contactsArray[i].Trim(); NeeoUser contact = new NeeoUser(contactsArray[i]); AvatarState avatarState = contact.GetAvatarState(0, out avatarTimestamp, out fileInfo); ContactAvatarTimestamp contactAvatarTimestamp = new ContactAvatarTimestamp() { Ph = contactsArray[i], Ts = avatarTimestamp }; contactlList.Add(contactAvatarTimestamp); avatarTimestamp = 0; fileInfo = null; } } return(contactlList); }
public async Task <HttpResponseMessage> UploadResumableAsync() { var uploadingFileInfo = new NeeoFileInfo(); if (!Request.Headers.Contains("uid")) { return(Request.CreateResponse(HttpStatusCode.BadRequest)); } if (Request.Headers.Contains("id")) { uploadingFileInfo.Name = Request.Headers.GetValues("id").First(); } else { uploadingFileInfo.Name = Guid.NewGuid().ToString("N"); } if (!Request.Headers.Contains("upload-content-type")) { return(Request.CreateResponse(HttpStatusCode.BadRequest)); } if (!Request.Headers.Contains("upload-content-length")) { return(Request.CreateResponse(HttpStatusCode.BadRequest)); } if (!Request.Headers.Contains("filename")) { return(Request.CreateResponse(HttpStatusCode.BadRequest)); } var contentType = Request.Headers.GetValues("upload-content-type").First(); if (!MimeTypeMapping.ValidateMimeType(contentType)) { return(Request.CreateResponse(HttpStatusCode.BadRequest)); } var mimeTypeDetail = MimeTypeMapping.GetMimeTypeDetail(contentType); uploadingFileInfo.Creator = Request.Headers.GetValues("uid").First(); uploadingFileInfo.Length = Convert.ToInt64(Request.Headers.GetValues("upload-content-length").First()); uploadingFileInfo.MimeType = mimeTypeDetail.MimeType; uploadingFileInfo.MediaType = mimeTypeDetail.MediaType; uploadingFileInfo.Extension = mimeTypeDetail.Extension; var session = await UploadSessionManager.CreateSessionAsync(uploadingFileInfo); if (session == null) { return(Request.CreateResponse(HttpStatusCode.InternalServerError)); } var response = new HttpResponseMessage(HttpStatusCode.OK); response.Headers.Add("id", uploadingFileInfo.Name); response.Headers.Location = new Uri(NeeoUrlBuilder.BuildResumableUploadUrl(session.SessionID)); return(response); }
public static async Task <UploadSession> CreateSessionAsync(NeeoFileInfo uploadingFileInfo) { var uploadSession = new UploadSession(uploadingFileInfo); uploadSession.SessionID = Guid.NewGuid().ToString("N"); var dbManager = new DbManager(); if (await dbManager.InsertUploadSessionAsync(uploadSession.SessionID, uploadSession.FileInfo.Name, uploadSession.FileInfo.Creator, (ushort)uploadSession.FileInfo.MediaType, (ushort)uploadSession.FileInfo.MimeType, uploadSession.FileInfo.FullPath, uploadSession.CreationDate, uploadSession.FileInfo.Length, uploadSession.FileInfo.Hash)) { return(uploadSession); } return(null); }
public async Task <HttpResponseMessage> Get([FromUri] AvatarRequest avatarRequest) { if (!ModelState.IsValid) { return(Request.CreateResponse(HttpStatusCode.BadRequest, "Bad Request")); } try { return(await Task <HttpResponseMessage> .Factory.StartNew(() => { NeeoFileInfo fileInfo = null; ulong avatarUpdatedTimeStamp = 0; int dimension = Convert.ToInt32(avatarRequest.Dimension); NeeoUser user = new NeeoUser(avatarRequest.Uid); switch (user.GetAvatarState(avatarRequest.Timestamp, false, out avatarUpdatedTimeStamp, out fileInfo)) { case AvatarState.Modified: var response = Request.CreateResponse(HttpStatusCode.OK); response.Headers.Add("ts", avatarUpdatedTimeStamp.ToString()); response.Content = new ByteArrayContent(MediaUtility.ResizeImage(fileInfo.FullPath, dimension, dimension)); //response.Content = new StreamContent(new FileStream(fileInfo.FullPath,FileMode.Open)); response.Content.Headers.ContentType = new MediaTypeHeaderValue( MimeTypeMapping.GetMimeType(fileInfo.Extension).GetDescription()); return response; case AvatarState.NotModified: return Request.CreateResponse(HttpStatusCode.NotModified); default: return Request.CreateResponse(HttpStatusCode.BadRequest); } })); } catch (AggregateException aggregateException) { Logger.LogManager.CurrentInstance.ErrorLogger.LogError(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType, aggregateException.Message, aggregateException, System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name); } catch (Exception exception) { Logger.LogManager.CurrentInstance.ErrorLogger.LogError(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType, exception.Message, exception, System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name); } return(Request.CreateResponse(HttpStatusCode.InternalServerError)); }
/// <summary> /// Processes the http request to send the required response. /// </summary> /// <remarks>It is used to send image data to the requester if the request </remarks> /// <param name="context">An object holding http context object for setting up response header on sending response.</param> public void ProcessRequest(HttpContext context) { _httpContext = context; NeeoFileInfo fileInfo = null; ulong avatarTimeStamp = 0; ulong avatarUpdatedTimeStamp = 0; uint requiredDimension = 0; if (!NeeoUtility.IsNullOrEmpty(context.Request.QueryString["uid"])) { string uID = HttpUtility.UrlEncode(context.Request.QueryString["uid"].ToString()); NeeoUser user = new NeeoUser(uID); if (!NeeoUtility.IsNullOrEmpty(context.Request.QueryString["ts"])) { if (!ulong.TryParse(context.Request.QueryString["ts"], out avatarTimeStamp)) { SetResponseHeaders((int)HttpStatusCode.BadRequest); } } switch (user.GetAvatarState(avatarTimeStamp, out avatarUpdatedTimeStamp, out fileInfo)) { case AvatarState.NotExist: SetResponseHeaders((int)HttpStatusCode.BadRequest); break; case AvatarState.Modified: if (!NeeoUtility.IsNullOrEmpty(context.Request.QueryString["dim"])) { UInt32.TryParse(context.Request.QueryString["dim"], out requiredDimension); } SetResponseWithFileData(fileInfo.FullPath, avatarUpdatedTimeStamp, requiredDimension); break; case AvatarState.NotModified: SetResponseHeaders((int)HttpStatusCode.NotModified); break; } } else { SetResponseHeaders((int)HttpStatusCode.BadRequest); } }
public HttpResponseMessage GetUserAvatar([FromUri] GetUserAvatarRequest request) { if (request == null || !ModelState.IsValid) { return(Request.CreateResponse(HttpStatusCode.BadRequest)); } LogRequest(request); ulong temp = 0; //uID = HttpUtility.UrlEncode(uID); request.Uid = request.Uid.Trim(); NeeoUser user = new NeeoUser(request.Uid); NeeoFileInfo filePath = null; ulong avatarTimeStamp; switch (user.GetAvatarState(request.Ts, out avatarTimeStamp, out filePath)) { case AvatarState.NotExist: return(Request.CreateResponse(HttpStatusCode.NotFound)); case AvatarState.Modified: string url = NeeoUrlBuilder.BuildAvatarUrl(request.Uid, request.Ts, request.Dim); return(RedirectServiceToUrl(url, avatarTimeStamp)); case AvatarState.NotModified: return(Request.CreateResponse(HttpStatusCode.NotModified)); default: return(Request.CreateResponse(HttpStatusCode.InternalServerError)); } //} //else //{ // NeeoUtility.SetServiceResponseHeaders((CustomHttpStatusCode)HttpStatusCode.Unauthorized); //} }
/// <summary> /// Gets the list of the avatar timestamp on the file system for the user's provided contacts. /// </summary> /// <param name="contacts">A string containing the ',' separated contacts.</param> /// <returns>A list containing user's contacts avatar timestamp.</returns> public List <ContactStatus> GetContactsAvatarTimestamp(SyncData syncData) { List <ContactStatus> contactList = new List <ContactStatus>(); if (syncData.ContactsList.Count > 0) { foreach (var contact in syncData.ContactsList) { ulong avatarTimestamp = 0; NeeoFileInfo avatarInfo = null; var user = new NeeoUser(contact.PhoneNumber); user.GetAvatarState(0, out avatarTimestamp, out avatarInfo); var contactStatus = new ContactStatus() { Contact = contact, AvatarTimestamp = avatarTimestamp }; contactList.Add(contactStatus); } } return(contactList); }
/// <summary> /// Gets the contacts state in the user roster for the provided contacts. /// </summary> /// <param name="contacts">An array of contacts whose state has to be checked in the user roster.</param> /// <param name="isUpdatedAppCall">A bool if true tells to use the updated code; otherwise false.</param> /// <returns>A list containing the current state of the provided contacts.</returns> public List <ContactStatus> GetContactsState(SyncData syncData) { const string invalidUser = "******"; const string notExists = "0"; const string exists = "1"; const string delimeter = ","; string contactsString = null; contactsString = string.Join(delimeter, syncData.ContactsList.Where(x => x.PhoneNumber != null).Select(x => x.PhoneNumber.Trim())); var ContactList = new List <ContactStatus>(); var dtContactStatus = new DataTable(); var dbManager = new DbManager(); dtContactStatus = dbManager.GetContactsExistanceAndRosterStatus(_userID, contactsString, delimeter); if (dtContactStatus.Rows.Count > 0) { foreach (DataRow dr in dtContactStatus.Rows) { if (!syncData.Filtered) { switch (dr["ContactRosterInfo"].ToString()) { case invalidUser: case notExists: case exists: var contactStatus = new ContactStatus(); contactStatus.Contact = new Common.Models.Contact() { PhoneNumber = dr["contact"].ToString() }; contactStatus.IsNeeoUser = Convert.ToBoolean(dr["isNeeoUser"]); contactStatus.IsAlreadySubscribed = Convert.ToInt16(dr["contactRosterInfo"]); ContactList.Add(contactStatus); break; default: UserService.UnSubContact(_userID, dr["contactRosterInfo"].ToString(), (RosterSubscription)dr["contactSubState"]); break; } } else { switch (dr["ContactRosterInfo"].ToString()) { case invalidUser: case notExists: case exists: if (Convert.ToBoolean(dr["isNeeoUser"])) { ulong avatarTimestamp = 0; NeeoFileInfo avatarInfo = null; var contactStatus = new ContactStatus(); contactStatus.Contact = new Common.Models.Contact() { PhoneNumber = dr["contact"].ToString() }; var user = new NeeoUser(contactStatus.Contact.PhoneNumber); user.GetAvatarState(0, out avatarTimestamp, out avatarInfo); contactStatus.AvatarTimestamp = avatarTimestamp; contactStatus.IsAlreadySubscribed = Convert.ToInt16(dr["contactRosterInfo"]); ContactList.Add(contactStatus); } break; default: UserService.UnSubContact(_userID, dr["contactRosterInfo"].ToString(), (RosterSubscription)dr["contactSubState"]); break; } } } } LogManager.CurrentInstance.InfoLogger.LogInfo(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType, "User ID : " + _userID + "- Contact List :" + JsonConvert.SerializeObject(ContactList)); return(ContactList); }
/// <summary> /// Gets the contacts state in the user roster for the provided contacts. /// </summary> /// <param name="contacts">An array of contacts whose state has to be checked in the user roster.</param> /// <param name="isUpdatedAppCall">A bool if true tells to use the updated code; otherwise false.</param> /// <returns>A list containing the current state of the provided contacts.</returns> public List <ContactDetails> GetContactsRosterState(Contact[] contacts, bool isUpdatedAppCall, bool getAll) { const string invalidUser = "******"; const string notExists = "0"; const string exists = "1"; const string delimeter = ","; string contactsString = null; if (isUpdatedAppCall) { contactsString = string.Join(delimeter, contacts.Where(x => x.Ph != null).Select(x => x.Ph.Trim())); } else { contactsString = string.Join(delimeter, contacts.Where(x => x.ContactPhoneNumber != null).Select(x => x.ContactPhoneNumber.Trim())); } List <ContactDetails> lstContact = new List <ContactDetails>(); DataTable dtContactStatus = new DataTable(); DbManager db = new DbManager(); dtContactStatus = db.GetContactsExistanceAndRosterStatus(_userID, contactsString, delimeter); if (dtContactStatus.Rows.Count > 0) { foreach (DataRow dr in dtContactStatus.Rows) { if (getAll) { switch (dr["ContactRosterInfo"].ToString()) { case invalidUser: ContactDetails contact = new ContactDetails(); contact.ContactPhoneNumber = dr["contact"].ToString(); contact.IsNeeoUser = Convert.ToBoolean(dr["isNeeoUser"]); contact.AvatarState = (ushort)AvatarState.NotExist; contact.IsAlreadySubscribed = Convert.ToInt16(dr["contactRosterInfo"]); lstContact.Add(contact); break; case notExists: case exists: ulong avatarTimestamp = 0; NeeoFileInfo avatarInfo = null; contact = new ContactDetails(); contact.ContactPhoneNumber = dr["contact"].ToString(); contact.IsNeeoUser = Convert.ToBoolean(dr["isNeeoUser"]); NeeoUser contactUser = new NeeoUser(contact.ContactPhoneNumber); contact.AvatarState = (ushort)contactUser.GetAvatarState(0, out avatarTimestamp, out avatarInfo); contact.AvatarTimestamp = avatarTimestamp; contact.IsAlreadySubscribed = Convert.ToInt16(dr["contactRosterInfo"]); lstContact.Add(contact); break; default: UserService.UnSubContact(_userID, dr["contactRosterInfo"].ToString(), (RosterSubscription)dr["contactSubState"]); break; } } else { switch (dr["ContactRosterInfo"].ToString()) { case invalidUser: case notExists: //Do nothing break; case exists: ulong avatarTimestamp = 0; NeeoFileInfo avatarInfo = null; ContactDetails contact = new ContactDetails(); contact.ContactPhoneNumber = dr["contact"].ToString(); NeeoUser contactUser = new NeeoUser(contact.ContactPhoneNumber); contact.AvatarState = (ushort)contactUser.GetAvatarState(0, out avatarTimestamp, out avatarInfo); contact.AvatarTimestamp = avatarTimestamp; contact.IsAlreadySubscribed = Convert.ToInt16(dr["contactRosterInfo"]); lstContact.Add(contact); break; default: UserService.UnSubContact(_userID, dr["contactRosterInfo"].ToString(), (RosterSubscription)dr["contactSubState"]); break; } } } } LogManager.CurrentInstance.InfoLogger.LogInfo(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType, "User ID : " + _userID + "- Contact List :" + JsonConvert.SerializeObject(lstContact)); return(lstContact); }
/// <summary> /// Checks the avatar state of the user. It also gives back the avatar creation timestamp and avatar path. /// </summary> /// <param name="avatarTimeStamp">An unsigned long integer containing the provided avatar timestamp.</param> /// <param name="fileCreationTimeStamp">An unsigned long integer gives back the avatar creation timestamp.Use "out" keyword with it.</param> /// <param name="filePath">An string gives back the avatar path.Use "out" keyword with it.</param> /// <returns>It returns the avatar state.</returns> public AvatarState GetAvatarState(ulong avatarTimeStamp, out ulong fileCreationTimeStamp, out NeeoFileInfo filePath) { fileCreationTimeStamp = 0; filePath = null; var file = FileManager.GetFile(_userID, FileCategory.Profile, MediaType.Image); if (file != null) { fileCreationTimeStamp = NeeoUtility.GetTimeStamp(file.Info.CreationTimeUtc); filePath = file.Info; if (fileCreationTimeStamp == avatarTimeStamp) { return(AvatarState.NotModified); } return(AvatarState.Modified); } return(AvatarState.NotExist); }
/// <summary> /// Checks the avatar state of the user. It also gives back the avatar creation timestamp and avatar path. /// </summary> /// <param name="avatarTimeStamp">An unsigned long integer containing the provided avatar timestamp.</param> /// <param name="fileCreationTimeStamp">An unsigned long integer gives back the avatar creation timestamp.Use "out" keyword with it.</param> /// <param name="filePath">An string gives back the avatar path.Use "out" keyword with it.</param> /// <returns>It returns the avatar state.</returns> public AvatarState GetAvatarState(ulong avatarTimeStamp, bool thumbnail, out ulong fileCreationTimeStamp, out NeeoFileInfo filePath) { fileCreationTimeStamp = 0; filePath = null; // System.IO.File files; if (thumbnail == true) { var files = FileManager.GetFile(_userID, FileCategory.Thumbnail, MediaType.Image); if (files != null) { fileCreationTimeStamp = NeeoUtility.GetTimeStamp(files.Info.CreationTimeUtc); filePath = files.Info; if (fileCreationTimeStamp == avatarTimeStamp) { return(AvatarState.NotModified); } return(AvatarState.Modified); } return(AvatarState.NotExist); } var file = FileManager.GetFile(_userID, FileCategory.Profile, MediaType.Image); if (file != null) { fileCreationTimeStamp = NeeoUtility.GetTimeStamp(file.Info.CreationTimeUtc); filePath = file.Info; if (fileCreationTimeStamp == avatarTimeStamp) { return(AvatarState.NotModified); } return(AvatarState.Modified); } return(AvatarState.NotExist); }
/// <summary> /// Gets the user's avatar base on the previous time stamp of the avatar. /// </summary> /// <param name="userID">A string containing the user id.</param> /// <param name="timeStamp">An integer containing the time stamp that has to be matched with the existing image. It is optional.</param> /// <param name="requiredDimension">An integer specifying the dimension of the image required. It is optional.</param> public void GetUserAvatar(string userID, ulong timeStamp, uint requiredDimension) { userID = (userID != null) ? userID.Trim() : userID; #region log user request and response /*********************************************** * To log user request and response ***********************************************/ if (_logRequestResponse) { LogManager.CurrentInstance.InfoLogger.LogInfo( System.Reflection.MethodBase.GetCurrentMethod().DeclaringType, System.Reflection.MethodBase.GetCurrentMethod().Name + "===>" + "Request ===> userID : " + userID + ", timeStamp : " + timeStamp + ", requiredDimension : " + requiredDimension); } #endregion // #region Verify User //var request = OperationContext.Current.IncomingMessageProperties[HttpRequestMessageProperty.Name] as HttpRequestMessageProperty; //string keyFromClient = request.Headers["key"]; //if (NeeoUtility.AuthenticateUserRequest(userID, keyFromClient)) //{ // #endregion ulong temp = 0; if (NeeoUtility.IsNullOrEmpty(userID) || !ulong.TryParse(userID, out temp)) { NeeoUtility.SetServiceResponseHeaders((CustomHttpStatusCode)HttpStatusCode.BadRequest); } else { userID = HttpUtility.UrlEncode(userID); NeeoUser user = new NeeoUser(userID); NeeoFileInfo fileInfo = null; ulong avatarTimeStamp; switch (user.GetAvatarState(timeStamp, out avatarTimeStamp, out fileInfo)) { case AvatarState.NotExist: NeeoUtility.SetServiceResponseHeaders((CustomHttpStatusCode)HttpStatusCode.NotFound); break; case AvatarState.Modified: string url = NeeoUrlBuilder.BuildAvatarUrl(userID, timeStamp, requiredDimension); RedirectServiceToUrl(url, avatarTimeStamp); break; case AvatarState.NotModified: NeeoUtility.SetServiceResponseHeaders((CustomHttpStatusCode)HttpStatusCode.NotModified); break; } } //} //else //{ // NeeoUtility.SetServiceResponseHeaders((CustomHttpStatusCode)HttpStatusCode.Unauthorized); //} }
public UploadSession(NeeoFileInfo fileInfo) { FileInfo = fileInfo; CreationDate = DateTime.UtcNow; }