示例#1
0
        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."));
        }
示例#2
0
        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"));
            }
        }
示例#3
0
        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);
                }
            }
        }
示例#4
0
        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."));
        }
示例#5
0
        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()));
                }
            }
        }
示例#6
0
        /// <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);
                }
            }
        }
示例#7
0
        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()));
                }
            }
        }
示例#8
0
        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"));
            }
        }
示例#9
0
        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));
        }
示例#10
0
        /// <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);
            }
        }
示例#11
0
        /// <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);
            }
        }
示例#12
0
        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);
                }
            }
        }
示例#13
0
        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);
            }
        }
示例#14
0
        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);
                }
            }
        }
示例#15
0
        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);
        }
示例#17
0
        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"));
            }
        }
示例#18
0
        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;
                    }
                }
            }));
        }