Пример #1
0
        /// <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);
        }
Пример #2
0
        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);
        }
Пример #3
0
        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);
        }
Пример #4
0
        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));
        }
Пример #5
0
        /// <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);
            }
        }
Пример #6
0
        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);

            //}
        }
Пример #7
0
        /// <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);
        }
Пример #8
0
        /// <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);
        }
Пример #9
0
        /// <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);
        }
Пример #10
0
        /// <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);
        }
Пример #11
0
        /// <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);
        }
Пример #12
0
        /// <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);

            //}
        }
Пример #13
0
 public UploadSession(NeeoFileInfo fileInfo)
 {
     FileInfo     = fileInfo;
     CreationDate = DateTime.UtcNow;
 }