예제 #1
0
        public async Task <IHttpActionResult> PostIdentity([FromBody] string contacts)
        {
            DataClassesManager.ControllerLog("info", _User.Id, this.Request.RequestUri.PathAndQuery, string.Format("{0}#{1}:{2}", "", _User.Username, string.IsNullOrEmpty(contacts) ? "NULL" : (contacts.Length > 20 ? contacts.Substring(0, 20) + "..." : contacts)));

            DateTimeOffset?ack; string countryCode;

            DataClassesManager.GetUserSyncInfo(_User.UserId.Value, out countryCode, out ack);
            string error  = string.Empty;
            var    script = Helper.SynchronizeUtils.GenerateSynchronizeIdentityTSQL(_User.UserId.Value, countryCode, contacts, out error);

            if (!string.IsNullOrEmpty(error))
            {
                DataClassesManager.ControllerLog("error", _User.Id, this.Request.RequestUri.PathAndQuery, string.Format("{0}#{1}:{2}", "", _User.Username, error));
                return(BadRequest(error));
            }

            DataClassesManager.ExecuteSynchronizeScript(_User.UserId.Value, script, "Identity", ack, out error);
            if (string.IsNullOrEmpty(error))
            {
                DataClassesManager.ControllerLog("info", _User.Id, this.Request.RequestUri.PathAndQuery, string.Format("{0}#{1}:{2}:{3}", "", _User.Username, ack, "Done"));
            }
            else
            {
                DataClassesManager.ControllerLog("error", _User.Id, this.Request.RequestUri.PathAndQuery, string.Format("{0}#{1}:{2}", "", _User.Username, error));
            }


            DataClassesManager.ControllerLog("info", _User.Id, this.Request.RequestUri.PathAndQuery, string.Format("{0}#{1}:{2}", "", _User.Username, ack));
            return(Ok(new { ack = ack }));
        }
        public async Task <IHttpActionResult> Get()
        {
            var deviceSerial = _SessionInfo.DeviceSerial;

            if (string.IsNullOrEmpty(deviceSerial))
            {
                DataClassesManager.ControllerLog("error", _User.Id, this.Request.RequestUri.PathAndQuery, string.Format("{0}:{1}", _User.Username, "SerialHeaderRequired"));
                return(BadRequest("SerialHeaderRequired"));
            }
            //var activeSession = context.UserSession.Where(x => x.UserId == user.UserId).OrderByDescending(x => x.LoggedAt).Take(1).SingleOrDefault();
            //if (activeSession.DeviceSerial != deviceSerial)
            //{
            //    var ac = activeSession.DeviceSerial;
            //    DataClassesManager.ControllerLog("error", id, this.Request.RequestUri.PathAndQuery, string.Format("{0}:{1}-current:{2}-active:{3}", user.Username, "Conflict", activeSession.DeviceSerial, deviceSerial));
            //    return Conflict();
            //}
            var errorMessage = "";
            var result       = DataClassesManager.GetPendingChat(_User.UserId.Value, out errorMessage);

            if (!string.IsNullOrEmpty(errorMessage))
            {
                DataClassesManager.ControllerLog("error", _User.Id, this.Request.RequestUri.PathAndQuery, string.Format("{0}:{1}", _User.Username, errorMessage));
                return(BadRequest(errorMessage));
            }
            var chatGroupedBySender = result.GroupBy(x => new { x.Group, x.Sender }, x => new { Id = x.Id, Type = x.Type, Content = x.Content, IssuedAt = x.IssuedAt.ToString(ChatUtils.DATE_TIME_FORMAT), ExpiresAt = x.ExpiresAt, SizeInBytes = x.SizeInBytes, Duration = x.Duration, IsScrambled = x.IsScrambled })
                                      .Select(grp => new {
                sender = grp.Key.Sender,
                group  = grp.Key.Group,
                chat   = grp.ToList().OrderBy(x => x.IssuedAt)
            }).ToList();

            DataClassesManager.ControllerLog("info", _User.Id, this.Request.RequestUri.PathAndQuery, string.Format("{0}:count={1}", _User.Username, result.Count));

            return(Ok(chatGroupedBySender));
        }
        public async Task <IHttpActionResult> CheckAvailability(int type, string value)
        {
            value = value.ToLower();
            bool available = DataClassesManager.CheckIdentityAvailability(type, value);

            DataClassesManager.ControllerLog("info", value, this.Request.RequestUri.PathAndQuery, string.Format("{0}:{1}:available={2}", type, value, available));

            return(Ok(new { Available = available }));
        }
예제 #4
0
        public async Task <IHttpActionResult> Post(RegistrationDTO item)
        {
            var userId = string.Empty;

            if (!ModelState.IsValid)
            {
                LogManager.WriteLog("error", userId, this.Request.RequestUri.PathAndQuery, string.Format("{0}:{1}", JsonConvert.SerializeObject(item), JsonConvert.SerializeObject(ModelState))).Forget();
                return(BadRequest(ModelState));
            }
            var error = string.Empty;

            if (string.IsNullOrEmpty(item.Mobile) && string.IsNullOrEmpty(item.Email))
            {
                error = "Mobile or email are required";
                DataClassesManager.ControllerLog("error", userId, this.Request.RequestUri.PathAndQuery, error);
                return(BadRequest(error));
            }

            long?preUserId = 0;
            var  password  = AuthorizationUtils.HashPassword(item.Password);

            var validation = DataClassesManager.Register(item.Username.ToLower(), password.Hash, password.Salt, item.CountryId, IdentityUtils.GetIdentitiesXML(item.Mobile, item.Email), out preUserId, out error);

            if (!string.IsNullOrEmpty(error))
            {
                LogManager.WriteLog("error", userId, this.Request.RequestUri.PathAndQuery, error).Forget();
                return(BadRequest(error));
            }

            foreach (var v in validation)
            {
                IdentityUtils.ValidateIdentity(v);
            }

            LogManager.WriteLog("info", userId, this.Request.RequestUri.PathAndQuery, string.Format("{0}:{1}:{2}", preUserId, JsonConvert.SerializeObject(item), JsonConvert.SerializeObject(validation))).Forget();

            return(Ok(new
            {
                RefId = preUserId,
                Identity = from x in validation
                           where x.Immediate
                           select new IdentityDTO
                {
                    TypeId = x.TypeId,
                    Value = x.Identity,
                    Token = x.Token
                }
            }
                      ));
        }
예제 #5
0
        public async Task <IHttpActionResult> ValidateMobile(string id, string mobile)
        {
            DataClassesManager.ControllerLog("info", "", this.Request.RequestUri.PathAndQuery, string.Empty);
            var error = string.Empty;

            var regExp = DataClassesManager.GetRegExpByCountry(id);
            var result = IdentityUtils.ExactMatch(mobile, regExp);

            if (result)
            {
                return(Ok());
            }
            return(BadRequest());
        }
예제 #6
0
        private static void SaveLog(string level, string userId, string request, string message, string category = "", string header = "")
        {
            StringBuilder builder = new StringBuilder();

            builder.AppendLine("");
            builder.AppendLine(string.Format("[Category:{0}]", category));
            builder.AppendLine(string.Format("[UserId:{0}]", userId));
            builder.AppendLine(header.Replace("\r\n", ""));
            builder.AppendLine(request);
            builder.AppendLine(message);
            builder.AppendLine(new string('-', 200));

            if (level == "error")
            {
                log.Error(builder.ToString());
                DataClassesManager.ControllerLog(level, userId, request, message, category);
            }
            else
            {
                log.Info(builder.ToString());
            }
        }
예제 #7
0
        public async Task <IHttpActionResult> ValidateIdentity(string token, string code)
        {
            DataClassesManager.ControllerLog("info", token, this.Request.RequestUri.PathAndQuery, string.Empty);
            var    error = string.Empty;
            long?  userId;
            string user_Id;
            var    content = string.Empty;
            var    updates = DataClassesManager.Validate(token, code, out userId, out user_Id, out content, out error);

            if (!string.IsNullOrEmpty(error))
            {
                DataClassesManager.ControllerLog("error", token, this.Request.RequestUri.PathAndQuery, error);
                return(BadRequest(error));
            }

            //Broadcast user joining
            //foreach (var update in updates)
            //{
            //    if (update.Recipients != null && update.Recipients.Count > 0)
            //        Task.Factory.StartNew(() => ChatUtils.BroadcastUpdate((ChatUtils.NotificationTypeEnum)update.TypeId, update.Id, user_Id, update.Recipients.Select(x => x.Id).ToList(), ""));
            //}

            return(Ok());
        }