public async Task <HttpResponseMessage> DeleteUserApp(int appId) { if (appId <= 0) { throw new ArgumentException("Application id cannot be 0 or negative.", "appId"); } using (var userapps = new userappsEntities()) { userapps.ChangeTracker.DetectChanges(); var userApp = userapps.apps.Where(app => app.idapps == appId).FirstOrDefault(); if (userApp == null) { Request.CreateErrorResponse(HttpStatusCode.BadRequest, "Application id is invalid."); } else { //First delete all connections between apps and app users var appUsers = userapps.users.Where(aus => aus.appid == userApp.idapps); try { if (appUsers != null) { if (appUsers.Count() > 0) { foreach (var appUsr in appUsers) { userapps.users.Remove(appUsr); await userapps.SaveChangesAsync(); } } } var userapp = userapps.appusers.Where(ua => ua.appid == userApp.idapps).FirstOrDefault(); if (userapp != null) { userapps.appusers.Remove(userapp); await userapps.SaveChangesAsync(); } } catch (Exception ex) { return(Request.CreateErrorResponse(HttpStatusCode.BadRequest, String.Format("Database error. Exception:{1}", ex.Message))); } } } return(Request.CreateResponse <string>(HttpStatusCode.OK, "User Appplication was deleted successfully.")); }
public async Task <HttpResponseMessage> RemoveOtpUser(dynamic authData) { if (ReferenceEquals(null, authData.userId) || Equals(0, authData.userId)) { return(Request.CreateErrorResponse(HttpStatusCode.BadRequest, "The userId value cannot be null or zero.")); } if (ReferenceEquals(null, authData.appId) || Equals(0, authData.appId)) { return(Request.CreateErrorResponse(HttpStatusCode.BadRequest, "The appId value cannot be null or zero.")); } Logging.Logger logger = new Logging.Logger(LogName); try { int userId = authData.userId; int appId = authData.appId; using (var userApps = new userappsEntities()) { userApps.ChangeTracker.DetectChanges(); var user = userApps.OTPUsers.Where(otpu => otpu.appid == appId && otpu.userid == userId).FirstOrDefault(); if (user != null) { userApps.OTPUsers.Remove(user); await userApps.SaveChangesAsync(); var value = new { Message = "Otp user successfully removed", UserId = userId, AppId = appId }; var ser = await JsonConvert.SerializeObjectAsync(value); await logger.StoreNewLogMessage(new Logging.Message(String.Format("REMOVETOPUSERSUCCESS {0} for appId {1} generated." , userId, appId), LogName)); return(Request.CreateResponse <string>(ser)); } else { var value = new { Message = "Otp user does not exist.", UserId = userId, AppId = appId }; var ser = await JsonConvert.SerializeObjectAsync(value); logger.StoreNewLogMessage(new Logging.Message(String.Format("APPERROR, METHOD {0} ERROR {1}" , "RemoveOtpUser", "OTP User does not exist."), LogName)).Wait(); return(Request.CreateResponse <string>(ser)); } } } catch (Exception ex) { logger.StoreNewLogMessage(new Logging.Message(String.Format("APPERROR, METHOD {0} ERROR {1}" , "RemoveOtpUser", ex.ToString()), LogName)).Wait(); return(Request.CreateErrorResponse(HttpStatusCode.InternalServerError, "Database Error")); } }
public async Task <bool> PostDeActiviatePromoCode(dynamic data) { if (data == null) { throw new HttpResponseException(HttpStatusCode.BadRequest); } using (userappsEntities ctx = new userappsEntities()) { try { ctx.ChangeTracker.DetectChanges(); var userId = (string)data.userId; var promoCode = (string)data.promoCode; var code = ctx.promotioncodes.Where(x => x.promocode.Equals(promoCode) && x.userid == userId).FirstOrDefault(); if (code == null) { return(false); } code.IsActive = false; await ctx.SaveChangesAsync(); return(true); } catch (Exception ex) { return(false); } } }
public async Task <HttpResponseMessage> DeleteUserAppUser(dynamic data) { int userId = data.userId; int appId = data.appId; using (var userapps = new userappsEntities()) { try { userapps.ChangeTracker.DetectChanges(); var appUser = userapps.appusers.Where(usra => usra.appid == appId && usra.appid == appId).FirstOrDefault(); if (appUser != null) { userapps.appusers.Remove(appUser); await userapps.SaveChangesAsync(); } } catch (Exception ex) { return(Request.CreateErrorResponse(HttpStatusCode.BadRequest, String.Format("Database error. Exception:{1}", ex.Message))); } } return(Request.CreateResponse <string>(HttpStatusCode.OK, "App user deleted successfully.")); }
public async Task <HttpResponseMessage> AddExternalUser(dynamic data) { int appId = data.appId; string password = data.password; string userName = data.userName; #region checkParameters if (appId <= 0) { return(Request.CreateErrorResponse(HttpStatusCode.BadRequest, "Application id cannot be 0 or negative.")); } if (string.IsNullOrEmpty(userName)) { return(Request.CreateErrorResponse(HttpStatusCode.BadRequest, "Username cannot be null or empty.")); } if (string.IsNullOrEmpty(password)) { return(Request.CreateErrorResponse(HttpStatusCode.BadRequest, "Password cannot be null or empty.")); } #endregion //Generate authentication data UserAppAuthenticationManager authManger = new Security.UserAppAuthenticationManager(); using (var userApps = new userappsEntities()) { userApps.ChangeTracker.DetectChanges(); try { var userExists = userApps.users.Any(uau => uau.username.ToLower().Equals(userName.ToLower()) && uau.appid == appId); if (userExists) { return(Request.CreateErrorResponse(HttpStatusCode.BadRequest, "User already exists.")); } var pwd = await authManger.GeneratePasswordSalt(userName, password); var user = new user() { username = userName, password = pwd, appid = appId }; userApps.users.Add(user); await userApps.SaveChangesAsync(); return(Request.CreateResponse <user>(user)); } catch (Exception ex) { return(Request.CreateErrorResponse(HttpStatusCode.InternalServerError, ex.ToString())); } } }
/// <summary> /// Sets the otp counter valid. /// </summary> /// <param name="userId">The user identifier.</param> /// <param name="appId">The application identifier.</param> /// <returns></returns> private async Task <bool> SetOtpCounterValid(int userId, int appId, long counter) { Logging.Logger logger = new Logging.Logger(LogName); using (var userApps = new userappsEntities()) { userApps.ChangeTracker.DetectChanges(); var otpData = userApps.OTPUsers.Where(usrOtp => usrOtp.userid == userId && usrOtp.appid == appId).FirstOrDefault(); if (otpData != null) { otpData.seqvalid = true; otpData.otpcounter = counter; otpData.otpcreated = DateTime.UtcNow; await userApps.SaveChangesAsync(); return(true); } else { return(false); } } }
public async Task <HttpResponseMessage> RemoveExternalUser(dynamic data) { int userId = data.userId; string extUserName = data.extUserName; int appId = data.appId; #region checkParameters if (userId <= 0) { return(Request.CreateErrorResponse(HttpStatusCode.BadRequest, "External User id cannot be 0 or negative.")); } if (appId <= 0) { return(Request.CreateErrorResponse(HttpStatusCode.BadRequest, "User app id cannot be 0 or negative.")); } if (string.IsNullOrEmpty(extUserName)) { return(Request.CreateErrorResponse(HttpStatusCode.BadRequest, "External Username cannot be null or empty.")); } #endregion //Generate authentication data UserAppAuthenticationManager authManger = new Security.UserAppAuthenticationManager(); using (var userApps = new userappsEntities()) { userApps.ChangeTracker.DetectChanges(); try { var extUser = userApps.users.Where(uau => uau.iduser == userId && uau.username.ToLower().Equals(extUserName.ToLower()) && uau.appid == appId).FirstOrDefault(); if (extUser != null) { userApps.users.Remove(extUser); await userApps.SaveChangesAsync(); return(Request.CreateResponse <user>(extUser)); } else { return(Request.CreateErrorResponse(HttpStatusCode.BadRequest, "External App user does not exist")); } } catch (Exception ex) { return(Request.CreateErrorResponse(HttpStatusCode.InternalServerError, ex.ToString())); } } }
public async Task <HttpResponseMessage> GenerateNewSecret(int userId, int appId) { Logging.Logger logger = new Logging.Logger(LogName); try { using (var userApps = new userappsEntities()) { userApps.ChangeTracker.DetectChanges(); var otpUser = userApps.OTPUsers.Where(otpu => otpu.appid == appId && otpu.userid == userId).FirstOrDefault(); if (otpUser != null) { byte[] secret; OTP.Helper.RandomHelper.GenerateRandomByteArray(20, out secret); var serialized = await JsonConvert.SerializeObjectAsync(secret); otpUser.secret = serialized; await userApps.SaveChangesAsync(); await logger.StoreNewLogMessage(new Logging.Message(String.Format("SECRETSUCCESS {0} for appId {1} generated." , userId, appId), LogName)); return(Request.CreateResponse <string>(serialized)); } else { await logger.StoreNewLogMessage(new Logging.Message(String.Format("SECRETGENERROR {0} for appId {1}" , userId, appId), LogName)); return(Request.CreateErrorResponse(HttpStatusCode.BadRequest, "Application user has no OTP access")); } } } catch (Exception ex) { logger.StoreNewLogMessage(new Logging.Message(String.Format("APPERROR, METHOD {0} ERROR {1}" , "GenereteNewSecret", ex.ToString()), LogName)).Wait(); return(Request.CreateErrorResponse(HttpStatusCode.InternalServerError, "Database Error")); } }
public async Task <HttpResponseMessage> CreateUserApp(dynamic data) { int systemuserid = data.systemuserid; string appName = data.appName; app newApp = null; using (var uapps = new userappsEntities()) { using (var sysuser = new exgripEntities()) { if (sysuser.UserProfiles.Any(u => u.UserId == systemuserid)) { if (!uapps.apps.Any(a => a.appname.ToLower().Equals(appName.ToLower()))) { try { uapps.ChangeTracker.DetectChanges(); newApp = new app() { appname = appName, systemuserid = systemuserid }; uapps.apps.Add(newApp); await uapps.SaveChangesAsync(); } catch (Exception ex) { return(Request.CreateErrorResponse(HttpStatusCode.BadRequest, ex.ToString())); } } } else { return(Request.CreateErrorResponse(HttpStatusCode.BadRequest, "Systemuser does not exist")); } } } return(Request.CreateResponse <app>(newApp)); }
/// <summary> /// Updates the server counter. /// </summary> /// <param name="value">The value.</param> /// <param name="userId">The user identifier.</param> /// <param name="appId">The application identifier.</param> /// <returns></returns> private async Task <bool> UpdateServerCounter(long value, int userId, int appId) { Logging.Logger logger = new Logging.Logger(LogName); try { using (var userApps = new userappsEntities()) { userApps.ChangeTracker.DetectChanges(); var counter = userApps.OTPUsers.Where(otp => otp.appid == appId && otp.userid == userId).FirstOrDefault(); if (counter != null) { counter.otpcounter = value - 1; counter.otpcreated = DateTime.UtcNow; await userApps.SaveChangesAsync(); await logger.StoreNewLogMessage(new Logging.Message( String.Format("SUCESS. COUNTER UPDATE ON SERVER. User:{0}, App:{1}", userId, appId), LogName)); return(true); } else { return(false); } } } catch (Exception ex) { logger.StoreNewLogMessage(new Logging.Message( String.Format("Error during UpdateCounter. User:{0}, App:{1}, Error:{2}", userId, appId, ex.ToString()), LogName)).Wait(); return(false); } }
/// <summary> /// Sets the otp counter invalid. /// </summary> /// <param name="userId">The user identifier.</param> /// <param name="appId">The application identifier.</param> /// <returns></returns> private async Task <bool> SetOtpCounterInvalid(int userId, int appId) { Logging.Logger logger = new Logging.Logger(LogName); try { using (var userApps = new userappsEntities()) { userApps.ChangeTracker.DetectChanges(); var otpData = userApps.OTPUsers.Where(usrOtp => usrOtp.userid == userId && usrOtp.appid == appId).FirstOrDefault(); if (otpData != null) { otpData.seqvalid = false; otpData.otpcreated = DateTime.UtcNow.Subtract(TimeSpan.FromMinutes(20)); await userApps.SaveChangesAsync(); await logger.StoreNewLogMessage(new Logging.Message(String.Format("SETOTPCOUNTERINVALIDSUCCESS by user {0} for appId {1}" , userId, appId), LogName)); return(true); } else { await logger.StoreNewLogMessage(new Logging.Message(String.Format("SETOTPCOUNTERINVALIDERROR by user {0} for appId {1}" , userId, appId), LogName)); return(false); } } } catch (Exception ex) { logger.StoreNewLogMessage(new Logging.Message(String.Format("APPERROR, METHOD {0} ERROR {1}" , "SetOtpCounterInvalid", ex.ToString()), LogName)).Wait(); return(false); } }
public async Task <bool> PostCreateNewStack(dynamic data) { const string APP_KEY = "X-AppKey"; const string APP_SECRET = "X-Token"; systemappuser user = null; UserProfile profile = null; if (Request.Headers.Contains(APP_KEY) && Request.Headers.Contains(APP_SECRET)) { string appKey = Request.Headers.GetValues(APP_KEY).First(); string appSecret = Request.Headers.GetValues(APP_SECRET).First(); using (var sysapps = new userappsEntities()) { user = sysapps.systemappusers.Where(usr => usr.appSecret.Equals(appSecret) && usr.apptoken.Equals(appKey)).FirstOrDefault(); if (user == null) { return(false); } else { using (var exgrip = new exgripEntities()) { profile = exgrip.UserProfiles.Where(up => up.UserId == user.systemuserid).FirstOrDefault(); if (profile == null) { return(false); } } } } } else { return(false); } int betaCount = 500; WordGenerator gen = new WordGenerator(); var timeZone = (string)data.timeZone; var dateString = (string)data.dateString; var dateStringFrom = (string)data.dateStringFrom; var codeLink = (string)data.codeLink; var userId = profile.AlternateUserId; var count = (int)data.count; DateTime outDate; var parseResult = DateTime.TryParse(dateString, out outDate); if (!parseResult) { return(false); } DateTime outDate2; var parseResult2 = DateTime.TryParse(dateStringFrom, out outDate2); if (!parseResult2) { return(false); } if (count > betaCount) { return(false); } using (userappsEntities ctx = new userappsEntities()) { try { var customerTime = TimeZoneInfo.ConvertTime(new DateTime(outDate.Year, outDate.Month, outDate.Day, outDate.Hour, outDate.Minute, outDate.Second), DateHelpers.GetTimeZoneInfoForTzdbId(timeZone), DateHelpers.GetTimeZoneInfoForTzdbId(timeZone)); var customerTime2 = TimeZoneInfo.ConvertTime(new DateTime(outDate2.Year, outDate2.Month, outDate2.Day, outDate2.Hour, outDate2.Minute, outDate2.Second), DateHelpers.GetTimeZoneInfoForTzdbId(timeZone), DateHelpers.GetTimeZoneInfoForTzdbId(timeZone)); if ((customerTime2.Ticks > customerTime.Ticks)) { return(false); } var reedemedVouchers = ctx.promotioncodes.Where(x => x.userid == userId && x.redeemed == true && x.ismulticode == false).ToList(); var allOnetimes = ctx.promotioncodes.Where(x => x.userid == userId && x.ismulticode == false).ToList(); if ((count + allOnetimes.Count()) > betaCount) { throw new HttpResponseException(System.Net.HttpStatusCode.BadRequest); } if ((allOnetimes.Count() == betaCount) && (reedemedVouchers.Count < betaCount) && (reedemedVouchers.Count != 0)) { return(false); } else { ctx.Configuration.AutoDetectChangesEnabled = false; ctx.Configuration.ValidateOnSaveEnabled = false; for (int i = 1; i <= count; i++) { var word = gen.RandomString(7); promotioncode code = new promotioncode(); code.created = TimeZoneInfo.ConvertTimeFromUtc(DateTime.UtcNow, DateHelpers.GetTimeZoneInfoForTzdbId(timeZone)); code.validfrom = customerTime2; code.validuntil = customerTime; code.redeemed = false; code.promocode = word; code.userid = userId; code.ismulticode = false; code.timezone = timeZone; code.GetCodeLink = codeLink; code.IsActive = true; ctx.promotioncodes.Add(code); } await ctx.SaveChangesAsync(); return(true); } } catch (Exception ex) { return(false); } } }
public async Task <bool> PostRedeem(dynamic data) { if (data == null) { return(false); } var value = (string)data.promocode; if (string.IsNullOrWhiteSpace(value)) { return(false); } using (userappsEntities ctx = new userappsEntities()) { try { ctx.ChangeTracker.DetectChanges(); var code = ctx.promotioncodes.Where(x => x.promocode.Equals(value) && (x.IsActive == true)).FirstOrDefault(); if (code == null) { return(false); } var userTimeZone = DateHelpers.GetTimeZoneInfoForTzdbId(code.timezone); //If code is valid to a certain date if (code.validuntil.HasValue) { if (((DateTime.UtcNow + userTimeZone.GetUtcOffset(code.validuntil.Value)).Ticks < code.validuntil.Value.Ticks) && code.redeemed.Value == false) { if (!code.ismulticode.Value) { if (!code.redeemed.Value) { code.redeemed = true; code.IsActive = false; await ctx.SaveChangesAsync(); return(true); } } if (code.ismulticode.Value) { if (code.multicodequantity.HasValue) { if (code.multicodequantity > 0) { if (code.multicodequantity == 0) { code.redeemed = true; code.IsActive = false; await ctx.SaveChangesAsync(); return(false); } if (code.multicodequantity > 1) { code.multicodequantity = code.multicodequantity - 1; if (code.multiredeemcount.HasValue) { code.multiredeemcount = code.multiredeemcount + 1; } else { code.multiredeemcount = 1; } await ctx.SaveChangesAsync(); return(true); } else { return(false); } } else { if (code.IsActive.Value) { code.IsActive = false; await ctx.SaveChangesAsync(); } return(false); } } else { return(false); } } } } } catch (Exception ex) { return(false); } return(false); } }
public async Task <bool> PostCreateNewMultiUserCode(dynamic data) { const string APP_KEY = "X-AppKey"; const string APP_SECRET = "X-Token"; systemappuser user = null; UserProfile profile = null; if (Request.Headers.Contains(APP_KEY) && Request.Headers.Contains(APP_SECRET)) { string appKey = Request.Headers.GetValues(APP_KEY).First(); string appSecret = Request.Headers.GetValues(APP_SECRET).First(); using (var sysapps = new userappsEntities()) { user = sysapps.systemappusers.Where(usr => usr.appSecret.Equals(appSecret) && usr.apptoken.Equals(appKey)).FirstOrDefault(); if (user == null) { return(false); } else { using (var exgrip = new exgripEntities()) { profile = exgrip.UserProfiles.Where(up => up.UserId == user.systemuserid).FirstOrDefault(); if (profile == null) { return(false); } } } } } else { return(false); } WordGenerator gen = new WordGenerator(); var userId = profile.AlternateUserId; var timeZone = (string)data.timeZone; var amountOfUsers = (int)data.count; var dateString = (string)data.dateString; var dateStringFrom = (string)data.dateStringFrom; var codeLink = (string)data.codeLink; var count = (int)data.count; int betacount = 200; if (string.IsNullOrEmpty(userId) || string.IsNullOrWhiteSpace(userId)) { return(false); } if (string.IsNullOrEmpty(timeZone) || string.IsNullOrWhiteSpace(timeZone)) { return(false); } if (amountOfUsers <= 0) { return(false); } DateTime outDate; var parseResult = DateTime.TryParse(dateString, out outDate); if (!parseResult) { return(false); } DateTime outDate2; var parseResult2 = DateTime.TryParse(dateStringFrom, out outDate2); if (!parseResult2) { return(false); } if (DateHelpers.GetTimeZoneInfoForTzdbId(timeZone) == null) { return(false); } if (!string.IsNullOrWhiteSpace(codeLink)) { Uri uriResult; bool result = Uri.TryCreate(codeLink, UriKind.Absolute, out uriResult); if (!result) { return(false); } } if (amountOfUsers == 0 || amountOfUsers <= 0 || amountOfUsers > int.MaxValue) { return(false); } using (userappsEntities ctx = new userappsEntities()) { try { var customerTime = TimeZoneInfo.ConvertTime(new DateTime(outDate.Year, outDate.Month, outDate.Day, outDate.Hour, outDate.Minute, outDate.Second), DateHelpers.GetTimeZoneInfoForTzdbId(timeZone), DateHelpers.GetTimeZoneInfoForTzdbId(timeZone)); var customerTime2 = TimeZoneInfo.ConvertTime(new DateTime(outDate2.Year, outDate2.Month, outDate2.Day, outDate2.Hour, outDate2.Minute, outDate2.Second), DateHelpers.GetTimeZoneInfoForTzdbId(timeZone), DateHelpers.GetTimeZoneInfoForTzdbId(timeZone)); var allMultiCodes = ctx.promotioncodes.Where(x => x.userid == userId && x.ismulticode == true).ToList(); if ((allMultiCodes.Count()) > betacount) { throw new HttpResponseException(System.Net.HttpStatusCode.BadRequest); } if (count > 2000000) { throw new HttpResponseException(System.Net.HttpStatusCode.BadRequest); } if ((customerTime2.Ticks > customerTime.Ticks)) { return(false); } var word = gen.RandomString(7); promotioncode code = new promotioncode(); code.created = TimeZoneInfo.ConvertTimeFromUtc(DateTime.UtcNow, DateHelpers.GetTimeZoneInfoForTzdbId(timeZone)); code.redeemed = false; code.promocode = word; code.userid = userId; code.timezone = timeZone; code.multicodequantity = amountOfUsers; code.validfrom = customerTime2; code.validuntil = customerTime; code.GetCodeLink = codeLink; code.IsActive = true; code.ismulticode = true; ctx.promotioncodes.Add(code); await ctx.SaveChangesAsync(); return(true); } catch (Exception ex) { return(false); } } }
public async Task <bool> PostActivatePromoCode(dynamic data) { if (data == null) { throw new HttpResponseException(HttpStatusCode.BadRequest); } using (userappsEntities ctx = new userappsEntities()) { ctx.ChangeTracker.DetectChanges(); ctx.Configuration.AutoDetectChangesEnabled = true; ctx.Configuration.LazyLoadingEnabled = false; try { var userId = (string)data.userId; var promoCode = (string)data.promoCode; var code = ctx.promotioncodes.Where(x => x.promocode.Equals(promoCode) && x.userid == userId).FirstOrDefault(); if (code == null) { return(false); } var customerTimeZone = DateHelpers.GetTimeZoneInfoForTzdbId(code.timezone); var validFrom = TimeZoneInfo.ConvertTime(new DateTime(code.validfrom.Value.Year, code.validfrom.Value.Month, code.validfrom.Value.Day, code.validfrom.Value.Hour, code.validfrom.Value.Minute, code.validfrom.Value.Second), customerTimeZone, customerTimeZone); var validTo = TimeZoneInfo.ConvertTime(new DateTime(code.validuntil.Value.Year, code.validuntil.Value.Month, code.validuntil.Value.Day, code.validuntil.Value.Hour, code.validuntil.Value.Minute, code.validuntil.Value.Second), customerTimeZone, customerTimeZone); if ((validFrom <= validTo) && (validTo > (DateTime.UtcNow + customerTimeZone.GetUtcOffset(validTo)))) { if (code.redeemed.HasValue) { if (code.redeemed.Value) { code.IsActive = false; await ctx.SaveChangesAsync(); return(true); } } code.IsActive = true; await ctx.SaveChangesAsync(); } else { return(false); } return(true); } catch (Exception ex) { return(false); } } }
/// <summary> /// Issues the token. /// </summary> /// <param name="username">The username.</param> /// <param name="password">The password.</param> /// <param name="systemuserid">The systemuserid.</param> /// <param name="appId">The application identifier.</param> /// <returns></returns> /// <exception cref="System.ArgumentException"> /// Username cannot be null or empty.;username /// or /// Password cannot be null or empty.;password /// or /// Userid cannot be zero or negative.;systemuserid /// or /// Appid cannot be zero or negative.;appId /// </exception> public async Task <User> IssueToken(int systemuserid, int appId) { #region CheckParameters //if ( String.IsNullOrEmpty ( username ) ) //{ // throw new ArgumentException ( "Username cannot be null or empty.", "username" ); //} //if ( String.IsNullOrEmpty ( password ) ) //{ // throw new ArgumentException ( "Password cannot be null or empty.", "password" ); //} if (systemuserid <= 0) { throw new ArgumentException("Userid cannot be zero or negative.", "systemuserid"); } if (appId <= 0) { throw new ArgumentException("Appid cannot be zero or negative.", "appId"); } #endregion TaskCompletionSource <User> tks = new TaskCompletionSource <User> (); using (var userapps = new userappsEntities()) { using (var sysuser = new exgripEntities()) { userapps.ChangeTracker.DetectChanges(); //Check if app exeists var currentApp = userapps.apps.Where(a => a.idapps == appId && a.systemuserid == systemuserid).FirstOrDefault(); var currentUser = sysuser.UserProfiles.Where(usr => usr.UserId == systemuserid).FirstOrDefault(); var password = Membership.GeneratePassword(15, 5); if (currentUser == null) { tks.SetResult(null); return(tks.Task.Result); } if (currentApp != null) { var encrptedPassword = await GeneratePasswordSalt(currentUser.UserName, password); var user = await EncryptToken(currentUser.UserName, encrptedPassword, password, true); userapps.appusers.Add(new appuser() { appSecret = user.Secret, apptoken = user.Token, appid = currentApp.idapps, securitySoup = user.SecSoup }); try { await userapps.SaveChangesAsync(); } catch (Exception ex) { } tks.SetResult(user); } else { try { var encrptedPassword = await GeneratePasswordSalt(currentUser.UserName, password); var user = await EncryptToken(currentUser.UserName, encrptedPassword, password); //Update existing user var existingUser = userapps.appusers.Where(ua => ua.appid == currentApp.idapps).FirstOrDefault(); existingUser.appSecret = user.Secret; existingUser.apptoken = user.Token; existingUser.securitySoup = user.SecSoup; await userapps.SaveChangesAsync(); tks.SetResult(user); } catch (Exception ex) { throw; } } } } return(tks.Task.Result); }
public async Task <HttpResponseMessage> AddNewOtpUser(dynamic authData) { if (ReferenceEquals(null, authData.userId) || Equals(0, authData.userId)) { return(Request.CreateErrorResponse(HttpStatusCode.BadRequest, "The userId value cannot be null or zero.")); } if (ReferenceEquals(null, authData.appId) || Equals(0, authData.appId)) { return(Request.CreateErrorResponse(HttpStatusCode.BadRequest, "The appId value cannot be null or zero.")); } Logging.Logger logger = new Logging.Logger(LogName); int userId = authData.userId; int appId = authData.appId; byte[] secret; OTP.Helper.RandomHelper.GenerateRandomByteArray(20, out secret); var serialized = await JsonConvert.SerializeObjectAsync(secret); try { using (var userApps = new userappsEntities()) { userApps.ChangeTracker.DetectChanges(); if (userApps.appusers.Any(usr => usr.appid == appId && usr.idappusers == userId)) { if (!userApps.OTPUsers.Any(otp => otp.userid == userId && otp.appid == appId)) { var otpUser = userApps.OTPUsers.Add(new OTPUser() { userid = userId, appid = appId, secret = serialized, seqvalid = true, otpcounter = 1, otpcreated = DateTime.UtcNow }); await userApps.SaveChangesAsync(); var value = new { Message = "User successfully added." }; var ser = await JsonConvert.SerializeObjectAsync(value); await logger.StoreNewLogMessage(new Logging.Message(String.Format("ADDUSERSUCCESS {0} for appId {1} generated." , userId, appId), LogName)); return(Request.CreateResponse <string>(ser)); } else { var value = new { Message = "User already exists" }; var ser = await JsonConvert.SerializeObjectAsync(value); logger.StoreNewLogMessage(new Logging.Message(String.Format("APPERROR, METHOD {0} ERROR {1}" , "AddNewOtpUser", "User already exists."), LogName)).Wait(); return(Request.CreateResponse <string>(ser)); } } else { var value = new { Message = "User is not an appuser." }; logger.StoreNewLogMessage(new Logging.Message(String.Format("APPERROR, METHOD {0} ERROR {1}" , "AddNewOtpUser", "User is not an app user"), LogName)).Wait(); var ser = await JsonConvert.SerializeObjectAsync(value); return(Request.CreateResponse <string>(ser)); } } } catch (Exception ex) { logger.StoreNewLogMessage(new Logging.Message(String.Format("APPERROR, METHOD {0} ERROR {1}" , "AddNewOtpUser", ex.ToString()), LogName)).Wait(); return(Request.CreateErrorResponse(HttpStatusCode.InternalServerError, "Database Error")); } }
public async Task <bool> PostValidate(dynamic data) { return(await Task.Run <bool>(async() => { using (userappsEntities ctx = new userappsEntities()) { if (data == null) { return false; } var value = (string)data.promocode; if (string.IsNullOrWhiteSpace(value)) { return false; } ctx.ChangeTracker.DetectChanges(); try { var code = ctx.promotioncodes.Where(x => x.promocode.Equals(value) && x.IsActive == true).FirstOrDefault(); if (code == null) { return false; } var userTimeZone = DateHelpers.GetTimeZoneInfoForTzdbId(code.timezone); //If code is valid to a certain date if (code.validuntil.HasValue) { //if code is a multicode if (code.ismulticode.HasValue) { if (code.ismulticode.Value == true) { if (code.validuntil.HasValue) { if (((DateTime.UtcNow + userTimeZone.GetUtcOffset(code.validuntil.Value)).Ticks < code.validuntil.Value.Ticks)) { if (code.multicodequantity.HasValue) { if (code.multicodequantity.Value > 0) { if (code.multiredeemcount.HasValue) { if (code.multicodequantity.Value > code.multiredeemcount.Value) { return true; } else { return false; } } else { if (code.multicodequantity.Value > 0) { return true; } else { return false; } } } else { code.IsActive = false; code.redeemed = true; await ctx.SaveChangesAsync(); return false; } } return true; } } } else { if (((DateTime.UtcNow + userTimeZone.GetUtcOffset(code.validuntil.Value)).Ticks < code.validuntil.Value.Ticks) && code.redeemed.Value == false) { if (code.redeemed.Value == false && code.IsActive.Value == true) { return true; } else { if (code.redeemed.Value == true) { if (code.IsActive.Value == true) { code.IsActive = false; await ctx.SaveChangesAsync(); return false; } return false; } } } else { //Code is not in the validation time range code.IsActive = false; code.redeemed = true; await ctx.SaveChangesAsync(); return false; } } } } return false; } catch (Exception ex) { return false; } } })); }