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); } }
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); } }
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" }); } }
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); }
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); }
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); } }
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); } } }
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)); }
//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)); }
public async Task <bool> UpdateUserDoc(CosmosDocUser tsUser, List <string> CallTrace) { return(await cosmosDBClientBase.UpdateItemAsync(tsUser, LocalFunctions.AddThisCaller(CallTrace, MethodBase.GetCurrentMethod()))); }