コード例 #1
0
        public async Task <bool> UpdateUser(TSUser tsUser, bool KeepPassAndSalt, List <string> CallTrace)
        {
            try
            {
                CosmosDocUser newUser = new CosmosDocUser(tsUser);

                if (KeepPassAndSalt)
                {
                    CosmosDocUser oldUser = await GetUserDoc(tsUser, LocalFunctions.AddThisCaller(CallTrace, MethodBase.GetCurrentMethod()));

                    newUser.Salt           = oldUser.Salt;
                    newUser.HashedPassword = oldUser.HashedPassword;
                }
                else
                {
                    newUser.Salt           = GlobalFunctions.GetSalt();
                    newUser.HashedPassword = GlobalFunctions.CmdHashPasswordBytes(tsUser.Password, newUser.Salt);
                }



                await cosmosDBClientBase.UpdateItemAsync(newUser, LocalFunctions.AddThisCaller(CallTrace, MethodBase.GetCurrentMethod()));


                return(true);
            }
            catch (CosmosException ex)
            {
                await CosmosAPI.cosmosDBClientError.AddErrorLog(tsUser.ID, ex.Message, LocalFunctions.AddThisCaller(CallTrace, MethodBase.GetCurrentMethod()));

                return(false);
            }
        }
コード例 #2
0
        public async Task <bool> AddUsersBath(List <TSUser> TsUsers, List <string> CallTrace)
        {
            try
            {
                foreach (var item in TsUsers)
                {
                    CosmosDocUser a = new CosmosDocUser(item)
                    {
                        Salt = GlobalFunctions.GetSalt()
                    };
                    a.HashedPassword = GlobalFunctions.CmdHashPasswordBytes(item.Password, a.Salt);

                    await cosmosDBClientBase.AddItemAsync(a, LocalFunctions.AddThisCaller(CallTrace, MethodBase.GetCurrentMethod()));
                }



                return(true);
            }
            catch (CosmosException ex)
            {
                await CosmosAPI.cosmosDBClientError.AddErrorLog(Guid.Empty, ex.Message, LocalFunctions.AddThisCaller(CallTrace, MethodBase.GetCurrentMethod()));

                return(false);
            }
        }
コード例 #3
0
        public async Task <ActionResult <TSEmail> > PassRecovery(
            [HttpTrigger(AuthorizationLevel.Anonymous, "post", Route = "user/passrecovery")] HttpRequest req,
            ILogger log)
        {
            TSEmail tsEmail = await MyFromBody <TSEmail> .FromBody(req, TodosCosmos.LocalFunctions.AddThisCaller(new List <string>(), MethodBase.GetCurrentMethod()));

            List <WebApiUserTypesEnum> localAllowedRoles = new List <WebApiUserTypesEnum>
            {
                WebApiUserTypesEnum.NotAuthorized,
                WebApiUserTypesEnum.Authorized,
                WebApiUserTypesEnum.Admin
            };

            ClaimsPrincipal User = MyTokenValidator.Authenticate(req, localAllowedRoles, TodosCosmos.LocalFunctions.AddThisCaller(new List <string>(), MethodBase.GetCurrentMethod()));


            Guid UserID = Guid.Parse(LocalFunctions.CmdGetValueFromClaim(User.Claims, "UserID", 10, TodosCosmos.LocalFunctions.AddThisCaller(new List <string>(), MethodBase.GetCurrentMethod())));
            await CosmosAPI.cosmosDBClientActivity.AddActivityLog(UserID, "Pass Recovery", TodosCosmos.LocalFunctions.AddThisCaller(new List <string>(), MethodBase.GetCurrentMethod()));



            string newPass = GlobalFunctions.GetSalt();

            CosmosDocUser cosmosDocUser = await CosmosAPI.cosmosDBClientUser.FindUserByUserName(tsEmail.To, TodosCosmos.LocalFunctions.AddThisCaller(new List <string>(), MethodBase.GetCurrentMethod()));

            if (cosmosDocUser != null)
            {
                cosmosDocUser.Salt           = GlobalFunctions.GetSalt();
                cosmosDocUser.HashedPassword = GlobalFunctions.CmdHashPasswordBytes(newPass, cosmosDocUser.Salt);

                bool b = await CosmosAPI.cosmosDBClientUser.UpdateUserDoc(cosmosDocUser, TodosCosmos.LocalFunctions.AddThisCaller(new List <string>(), MethodBase.GetCurrentMethod()));

                if (b)
                {
                    tsEmail.To = cosmosDocUser.Email;
                    TSEmail result = await TodosCosmos.LocalFunctions.SendEmail(tsEmail, string.Empty, newPass, TodosCosmos.LocalFunctions.AddThisCaller(new List <string>(), MethodBase.GetCurrentMethod()));

                    result.To            = string.Empty;
                    result.OperationCode = 0;

                    return(result);
                }
                else
                {
                    return(new TSEmail {
                        Result = "Error: Could not recover user password"
                    });
                }
            }
            else
            {
                return(new TSEmail {
                    Result = "Error: User not found"
                });
            }
        }
コード例 #4
0
        public async Task <ActionResult <TSEmail> > CheckUserName(
            [HttpTrigger(AuthorizationLevel.Anonymous, "post", Route = "user/checkusername")] HttpRequest req,
            ILogger log)
        {
            TSEmail tsEmail = await MyFromBody <TSEmail> .FromBody(req, TodosCosmos.LocalFunctions.AddThisCaller(new List <string>(), MethodBase.GetCurrentMethod()));

            List <WebApiUserTypesEnum> localAllowedRoles = new List <WebApiUserTypesEnum>
            {
                WebApiUserTypesEnum.NotAuthorized,
                WebApiUserTypesEnum.Authorized,
                WebApiUserTypesEnum.Admin
            };

            ClaimsPrincipal User = MyTokenValidator.Authenticate(req, localAllowedRoles, TodosCosmos.LocalFunctions.AddThisCaller(new List <string>(), MethodBase.GetCurrentMethod()));


            Guid UserID = Guid.Parse(LocalFunctions.CmdGetValueFromClaim(User.Claims, "UserID", 10, TodosCosmos.LocalFunctions.AddThisCaller(new List <string>(), MethodBase.GetCurrentMethod())));
            await CosmosAPI.cosmosDBClientActivity.AddActivityLog(UserID, "Check UserName", TodosCosmos.LocalFunctions.AddThisCaller(new List <string>(), MethodBase.GetCurrentMethod()));



            CosmosDocUser user = await CosmosAPI.cosmosDBClientUser.FindUserByUserName(tsEmail.To, TodosCosmos.LocalFunctions.AddThisCaller(new List <string>(), MethodBase.GetCurrentMethod()));

            TSEmail result = new TSEmail
            {
                To            = string.Empty,
                OperationCode = 0
            };

            if (user is null)
            {
                result.Result = "OK";
            }
            else
            {
                result.Result = "UserName already exists";
            }

            return(result);
        }
コード例 #5
0
        public bool EnsureDemoUser(List <string> CallTrace)
        {
            try
            {
                CosmosDocUser demoUser = CosmosAPI.cosmosDBClientUser.FindUserByUserName("demouser", TodosCosmos.LocalFunctions.AddThisCaller(CallTrace, MethodBase.GetCurrentMethod())).Result;

                if (demoUser is null)
                {
                    TSUser newUser = new TSUser()
                    {
                        Email      = "*****@*****.**",
                        Password   = "******",
                        FullName   = "Demo User",
                        UserName   = "******",
                        ID         = Guid.NewGuid(),
                        CreateDate = DateTime.Now,
                    };

                    CosmosAPI.cosmosDBClientUser.AddUser(newUser, TodosCosmos.LocalFunctions.AddThisCaller(CallTrace, MethodBase.GetCurrentMethod()));

                    demoUser = CosmosAPI.cosmosDBClientUser.FindUserByUserName("demouser", TodosCosmos.LocalFunctions.AddThisCaller(CallTrace, MethodBase.GetCurrentMethod())).Result;

                    if (demoUser is null)
                    {
                        throw new ArgumentException("demouser is null");
                    }
                }



                CosmosAPI.DemoUserID = demoUser.ID;
            }
            catch (CosmosException)
            {
                throw new ArgumentException("Can't add/check demouser");
            }

            return(true);
        }
コード例 #6
0
        public async Task <bool> AddUser(TSUser tsUser, List <string> CallTrace)
        {
            try
            {
                CosmosDocUser newUser = new CosmosDocUser(tsUser)
                {
                    Salt = GlobalFunctions.GetSalt()
                };
                newUser.HashedPassword = GlobalFunctions.CmdHashPasswordBytes(tsUser.Password, newUser.Salt);


                await cosmosDBClientBase.AddItemAsync(newUser, LocalFunctions.AddThisCaller(CallTrace, MethodBase.GetCurrentMethod()));

                await CosmosAPI.cosmosDBClientCategory.AddDefaultCategory(tsUser.ID, LocalFunctions.AddThisCaller(CallTrace, MethodBase.GetCurrentMethod()));

                return(true);
            }
            catch (CosmosException ex)
            {
                await CosmosAPI.cosmosDBClientError.AddErrorLog(tsUser.ID, ex.Message, LocalFunctions.AddThisCaller(CallTrace, MethodBase.GetCurrentMethod()));

                return(false);
            }
        }
コード例 #7
0
        public static async void Run([CosmosDBTrigger(
                                          databaseName: "%CosmosDbDatabaseName%",
                                          collectionName: "%CosmosDbCollectionName%",
                                          ConnectionStringSetting = "CosmosDBConnStr",
                                          LeaseCollectionName = "leases",
                                          CreateLeaseCollectionIfNotExists = true)] IReadOnlyList <Document> input, ILogger log)
        {
            TodosCosmos.LocalFunctions.ConsolePrint("============== feed =================", true);

            ILookup <DocTypeEnum, Document> dict = input.ToLookup(x => (DocTypeEnum)x.GetPropertyValue <byte>("doctype"), x => x);


            //process errors
            foreach (var item in dict[DocTypeEnum.Error])
            {
                CosmosDocErrorLog d = (dynamic)item;
                await TodosCosmos.LocalFunctions.NotifyAdmin("Error: " + d.Description, TodosCosmos.LocalFunctions.AddThisCaller(new List <string>(), MethodBase.GetCurrentMethod()));

                TodosCosmos.LocalFunctions.ConsolePrint("Error: " + d.Description);
            }


            //process todos
            foreach (var item in dict[DocTypeEnum.Todo])
            {
                CosmosDocTodo d = (dynamic)item;

                if (d.IUD == (byte)DocStateMarkEnum.Insert)
                {
                    await TodosCosmos.LocalFunctions.NotifyAdmin("Insert todo " + d.UserID + " " + d.Name, TodosCosmos.LocalFunctions.AddThisCaller(new List <string>(), MethodBase.GetCurrentMethod()));

                    TodosCosmos.LocalFunctions.ConsolePrint("Insert todo Id " + d.ID + ", name - " + d.Name);
                }
                else if (d.IUD == (byte)DocStateMarkEnum.Update)
                {
                    await TodosCosmos.LocalFunctions.NotifyAdmin("Update todo " + d.UserID + " " + d.Name, TodosCosmos.LocalFunctions.AddThisCaller(new List <string>(), MethodBase.GetCurrentMethod()));

                    TodosCosmos.LocalFunctions.ConsolePrint("Update todo Id " + d.ID + ", name - " + d.Name);
                }
                else if (d.IUD == (byte)DocStateMarkEnum.Delete)
                {
                    await TodosCosmos.LocalFunctions.NotifyAdmin("Delete todo " + d.UserID + " " + d.Name, TodosCosmos.LocalFunctions.AddThisCaller(new List <string>(), MethodBase.GetCurrentMethod()));

                    TodosCosmos.LocalFunctions.ConsolePrint("Delete todo Id " + d.ID + ", name - " + d.Name);

                    LocalFunctions.SoftDeleteDoc(item);
                }
            }


            //process categories
            foreach (var item in dict[DocTypeEnum.Category])
            {
                CosmosDocCategory d = (dynamic)item;
                if (d.IUD == (byte)DocStateMarkEnum.Insert)
                {
                    await TodosCosmos.LocalFunctions.NotifyAdmin("Insert category " + d.UserID + " " + d.Name, TodosCosmos.LocalFunctions.AddThisCaller(new List <string>(), MethodBase.GetCurrentMethod()));

                    TodosCosmos.LocalFunctions.ConsolePrint("insert category Id " + d.ID + ", name - " + d.Name);
                }
                else if (d.IUD == (byte)DocStateMarkEnum.Update)
                {
                    await TodosCosmos.LocalFunctions.NotifyAdmin("Update category " + d.UserID + " " + d.Name, TodosCosmos.LocalFunctions.AddThisCaller(new List <string>(), MethodBase.GetCurrentMethod()));

                    TodosCosmos.LocalFunctions.ConsolePrint("update category Id " + d.ID + ", name - " + d.Name);
                }
                else if (d.IUD == (byte)DocStateMarkEnum.Delete)
                {
                    await TodosCosmos.LocalFunctions.NotifyAdmin("Delete category " + d.UserID + " " + d.Name, TodosCosmos.LocalFunctions.AddThisCaller(new List <string>(), MethodBase.GetCurrentMethod()));

                    TodosCosmos.LocalFunctions.ConsolePrint("delete category Id " + d.ID + ", name - " + d.Name);

                    LocalFunctions.SoftDeleteDoc(item);
                }
            }

            //process feedbacks
            foreach (var item in dict[DocTypeEnum.Feedback])
            {
                CosmosDocFeedback d = (dynamic)item;
                if (d.IUD == (byte)DocStateMarkEnum.Insert)
                {
                    await TodosCosmos.LocalFunctions.NotifyAdmin("Insert Feedback " + d.UserID + " " + d.Text, TodosCosmos.LocalFunctions.AddThisCaller(new List <string>(), MethodBase.GetCurrentMethod()));

                    TodosCosmos.LocalFunctions.ConsolePrint("insert Feedback Id " + d.ID + ", name - " + d.Text);
                }
                else if (d.IUD == (byte)DocStateMarkEnum.Update)
                {
                    await TodosCosmos.LocalFunctions.NotifyAdmin("Update Feedback " + d.UserID + " " + d.Text, TodosCosmos.LocalFunctions.AddThisCaller(new List <string>(), MethodBase.GetCurrentMethod()));

                    TodosCosmos.LocalFunctions.ConsolePrint("update Feedback Id " + d.ID + ", name - " + d.Text);
                }
                else if (d.IUD == (byte)DocStateMarkEnum.Delete)
                {
                    await TodosCosmos.LocalFunctions.NotifyAdmin("Delete Feedback " + d.UserID + " " + d.Text, TodosCosmos.LocalFunctions.AddThisCaller(new List <string>(), MethodBase.GetCurrentMethod()));

                    TodosCosmos.LocalFunctions.ConsolePrint("delete Feedback Id " + d.ID + ", name - " + d.Text);

                    LocalFunctions.SoftDeleteDoc(item);
                }
            }

            //process reactions
            foreach (var item in dict[DocTypeEnum.Reaction])
            {
                CosmosDocReaction d = (dynamic)item;
                if (d.IUD == (byte)DocStateMarkEnum.Insert)
                {
                    await TodosCosmos.LocalFunctions.NotifyAdmin("Insert Reaction " + d.UserID + " " + d.LikeOrDislike, TodosCosmos.LocalFunctions.AddThisCaller(new List <string>(), MethodBase.GetCurrentMethod()));

                    TodosCosmos.LocalFunctions.ConsolePrint("insert reaction Id " + d.ID + ", LikeOrDislike - " + d.LikeOrDislike);
                }
                else if (d.IUD == (byte)DocStateMarkEnum.Update)
                {
                    await TodosCosmos.LocalFunctions.NotifyAdmin("Update Reaction " + d.UserID + " " + d.LikeOrDislike, TodosCosmos.LocalFunctions.AddThisCaller(new List <string>(), MethodBase.GetCurrentMethod()));

                    TodosCosmos.LocalFunctions.ConsolePrint("update reaction Id " + d.ID + ", LikeOrDislike - " + d.LikeOrDislike);
                }
                else if (d.IUD == (byte)DocStateMarkEnum.Delete)
                {
                    await TodosCosmos.LocalFunctions.NotifyAdmin("Delete Reaction " + d.UserID + " " + d.LikeOrDislike, TodosCosmos.LocalFunctions.AddThisCaller(new List <string>(), MethodBase.GetCurrentMethod()));

                    TodosCosmos.LocalFunctions.ConsolePrint("delete reaction Id " + d.ID + ", LikeOrDislike - " + d.LikeOrDislike);

                    LocalFunctions.SoftDeleteDoc(item);
                }
            }



            //process users
            foreach (var item in dict[DocTypeEnum.User])
            {
                CosmosDocUser d = (dynamic)item;
                if (d.IUD == (byte)DocStateMarkEnum.Insert)
                {
                    await TodosCosmos.LocalFunctions.NotifyAdmin("Insert user " + d.FullName, TodosCosmos.LocalFunctions.AddThisCaller(new List <string>(), MethodBase.GetCurrentMethod()));

                    TodosCosmos.LocalFunctions.ConsolePrint("insert user Id " + d.ID + ", name - " + d.FullName);
                }
                else if (d.IUD == (byte)DocStateMarkEnum.Update)
                {
                    // await TodosCosmos.LocalFunctions.NotifyAdmin("Update user " + d.FullName, TodosCosmos.LocalFunctions.AddThisCaller(new List<string>(), MethodBase.GetCurrentMethod()));
                    TodosCosmos.LocalFunctions.ConsolePrint("update user Id " + d.ID + ", name - " + d.FullName);
                }
                else if (d.IUD == (byte)DocStateMarkEnum.Delete)
                {
                    await TodosCosmos.LocalFunctions.NotifyAdmin("Delete user " + d.FullName, TodosCosmos.LocalFunctions.AddThisCaller(new List <string>(), MethodBase.GetCurrentMethod()));

                    TodosCosmos.LocalFunctions.ConsolePrint("delete user Id " + d.ID + ", name - " + d.FullName);

                    LocalFunctions.SoftDeleteDoc(item);
                }
            }

            //process FeedMessages
            foreach (var item in dict[DocTypeEnum.FeedMessage])
            {
                CosmosDocFeedMessage d = (dynamic)item;
                if (d.IUD == (byte)DocStateMarkEnum.Insert)
                {
                    RequestedActionEnum r = (RequestedActionEnum)d.RequestedAction;

                    switch (r)
                    {
                    case RequestedActionEnum.SendEmail:
                        break;

                    case RequestedActionEnum.SendSMS:
                        break;

                    case RequestedActionEnum.NotifyAdmin:
                        await TodosCosmos.LocalFunctions.NotifyAdmin(d.Bag, TodosCosmos.LocalFunctions.AddThisCaller(new List <string>(), MethodBase.GetCurrentMethod()));

                        TodosCosmos.LocalFunctions.ConsolePrint("feed action notifyAdmin - " + d.Bag);
                        break;

                    case RequestedActionEnum.UpdateStat:
                        break;

                    default:
                        break;
                    }

                    LocalFunctions.SoftDeleteDoc(item);
                }
            }
        }
コード例 #8
0
        private Task <ClaimsIdentity> GetIdentity(string Par_Username,
                                                  string Par_Password,
                                                  string Par_IPAddress,
                                                  string Par_MachineID,
                                                  WebApiUserTypesEnum ParWebApiUserType,
                                                  out string Par_Out_Result,
                                                  List <string> CallTrace)
        {
            Par_Out_Result = string.Empty;

            try
            {
                switch (ParWebApiUserType)
                {
                case WebApiUserTypesEnum.NotAuthorized:
                    if (Par_Username.Equals(GlobalData.NotAuthorizedUserName) && Par_Password.Equals(GlobalData.NotAuthorizedUserPass))
                    {
                        Par_Out_Result = Guid.Empty.ToString() + GlobalFunctions.GetRandomAlphaNumeric(10);
                        return(Task.FromResult(new ClaimsIdentity(new System.Security.Principal.GenericIdentity(Par_Username, "Token"), new Claim[] { })));
                    }
                    else
                    {
                        Par_Out_Result = "Invalid NotAutorizedUser UserName or Password";
                    }
                    break;

                case WebApiUserTypesEnum.Authorized:
                    CosmosDocUser cosmosDocUser = CosmosAPI.cosmosDBClientUser.FindUserByUserName(Par_Username, TodosCosmos.LocalFunctions.AddThisCaller(CallTrace, MethodBase.GetCurrentMethod())).Result;
                    if (cosmosDocUser != null)
                    {
                        if (LocalFunctions.CompareHash(Par_Password, cosmosDocUser, TodosCosmos.LocalFunctions.AddThisCaller(CallTrace, MethodBase.GetCurrentMethod())))
                        {
                            Par_Out_Result = cosmosDocUser.ID.ToString() + GlobalFunctions.GetRandomAlphaNumeric(10);

                            return(Task.FromResult(new ClaimsIdentity(new System.Security.Principal.GenericIdentity(Par_Username, "Token"), new Claim[] { })));
                        }
                        else
                        {
                            Par_Out_Result = "Invalid User Password";
                        }
                    }
                    else
                    {
                        Par_Out_Result = "Invalid User Name";
                    }

                    break;

                case WebApiUserTypesEnum.Admin:

                    if (Par_IPAddress.Equals(GlobalData.AdminIPAddress))
                    {
                        if (Par_MachineID.Equals(GlobalData.AdminMachineID))
                        {
                            if (Par_Username.Equals(GlobalData.AdminUserName) && Par_Password.Equals(GlobalData.AdminUserPass))
                            {
                                Par_Out_Result = Guid.Empty.ToString() + GlobalFunctions.GetRandomAlphaNumeric(10);
                                return(Task.FromResult(new ClaimsIdentity(new System.Security.Principal.GenericIdentity(Par_Username, "Token"), new Claim[] { })));
                            }
                            else
                            {
                                Par_Out_Result = "Invalid Admin UserName or Password";
                            }
                        }
                        else
                        {
                            Par_Out_Result = "Invalid Admin MachineID";
                        }
                    }
                    else
                    {
                        Par_Out_Result = "Invalid Admin IPAddress";
                    }
                    break;

                default:
                    Par_Out_Result = "unknown error";
                    break;
                }
            }
            catch (Exception ex)
            {
                bool b = CosmosAPI.cosmosDBClientError.AddErrorLog(Guid.Empty, ex.Message, TodosCosmos.LocalFunctions.AddThisCaller(CallTrace, MethodBase.GetCurrentMethod())).Result;
            }

            return(Task.FromResult <ClaimsIdentity>(null));
        }
コード例 #9
0
        //public static string Get_Caller_Name([CallerMemberName]string name = "")
        //{
        //    return name;
        //}

        public static bool CompareHash(string Par_password, CosmosDocUser currCosmosDocUser, List <string> CallTrace)
        {
            return(StructuralComparisons.StructuralEqualityComparer.Equals(GlobalFunctions.CmdHashPasswordBytes(Par_password, currCosmosDocUser.Salt), currCosmosDocUser.HashedPassword));
        }
コード例 #10
0
 public async Task <bool> UpdateUserDoc(CosmosDocUser tsUser, List <string> CallTrace)
 {
     return(await cosmosDBClientBase.UpdateItemAsync(tsUser, LocalFunctions.AddThisCaller(CallTrace, MethodBase.GetCurrentMethod())));
 }