Example #1
0
        /// <summary>
        /// Lambda to insert character to character table
        /// </summary>
        /// <param name="pRequest">Incoming API Gateway request object, should be a PUT or POST with a BODY</param>
        /// <param name="pContext">Incoming Lambda Context object, not used currently</param>
        /// <returns></returns>
        public APIGatewayProxyResponse FunctionHandler(APIGatewayProxyRequest pRequest, ILambdaContext pContext)
        {
            if (pRequest.Headers != null && pRequest.Headers.Count > 0 && pRequest.Headers.Keys.Contains("warmup"))
            {
                return(HttpHelper.WarmupResponse());
            }
            if (pRequest == null)
            {
                return(HttpHelper.HandleError("Request appears to be null", 500));
            }
            //For these operations, we should have the CognitoInfo user available to us
            //Authorized Users only for Deleting Raids
            using (opendkpContext vDatabase = new opendkpContext())
            {
                if (!CognitoHelper.IsDkpAdmin(pRequest) ||
                    !CognitoHelper.IsAuthorizedAdmin(vDatabase, pRequest))
                {
                    return(HttpHelper.HandleError("You do not have permission to perform this action", 401));
                }
                var vCognitoUser = CognitoHelper.GetCognitoUser(pRequest.Headers["cognitoinfo"]);

                if (pRequest.HttpMethod.Equals("PUT", StringComparison.InvariantCultureIgnoreCase))
                {
                    return(HandleInsert(pRequest, pContext, vCognitoUser, vDatabase));
                }
                else if (pRequest.HttpMethod.Equals("POST", StringComparison.InvariantCultureIgnoreCase))
                {
                    return(HandleUpdateAsync(pRequest, pContext, vCognitoUser, vDatabase));
                }
            }

            return(HttpHelper.HandleError("Only Methods PUT,POST are supported by this lamdba", 500));
        }
        /// <summary>
        /// Set the cache value for a particular cache
        /// </summary>
        /// <param name="pContext">The database context in which to set the cache in</param>
        /// <param name="pCacheName">The name of the cache you are storing, case-insensitive</param>
        /// <param name="pCacheValue">The value to be stored for this cache</param>
        /// <param name="pCacheExpires">The time the cache should expire</param>
        public static void SetCache(opendkpContext pContext, string pCacheName, string pCacheValue, string pClientId, DateTime?pCacheExpires = null)
        {
            if (pCacheExpires == null)
            {
                pCacheExpires = DateTime.Now.AddHours(12);
            }
            try
            {
                Cache vCachedSummary = pContext.Cache.FirstOrDefault(x => x.ClientId.Equals(pClientId) && x.CacheName.Equals(pCacheName, StringComparison.InvariantCultureIgnoreCase));
                if (vCachedSummary == null)
                {
                    vCachedSummary = new Cache {
                        CacheName = pCacheName,
                        ClientId  = pClientId
                    };
                    pContext.Add <Cache>(vCachedSummary);
                }
                vCachedSummary.CacheUpdated = DateTime.Now;
                vCachedSummary.CacheExpires = DateTime.Now.AddHours(12);
                vCachedSummary.CacheValue   = pCacheValue;

                pContext.SaveChanges();
            }
            catch (Exception vException)
            {
                Console.WriteLine("Error Cacheing: " + vException);
            }
        }
Example #3
0
        /// <summary>
        /// Lambda to fetch character by name from character table
        /// </summary>
        /// <param name="pRequest">Incoming API Gateway request object, used to pull parameter from url</param>
        /// <param name="pContext">Incoming Lambda Context object, not used currently</param>
        /// <returns></returns>
        public APIGatewayProxyResponse FunctionHandler(APIGatewayProxyRequest pRequest, ILambdaContext pContext)
        {
            if (pRequest.Headers.Keys.Contains("warmup"))
            {
                return(HttpHelper.WarmupResponse());
            }
            var vResponse = HttpHelper.HandleError("[GetAdjustmentsById] Unknown Backend error", 500);

            try
            {
                if (pRequest != null && pRequest.PathParameters != null && pRequest.PathParameters.Count > 0)
                {
                    //We need to retrieve the ClientId for multitenancy purposes
                    var vClientId = pRequest.Headers["clientid"];

                    int vId = int.Parse(pRequest.PathParameters["id"]);
                    using (opendkpContext vDatabase = new opendkpContext())
                    {
                        var vResult = vDatabase.Adjustments
                                      .Include("IdCharacterNavigation")
                                      .First(x => x.ClientId.Equals(vClientId) && x.IdAdjustment == vId);
                        var vAdjustment = new AdjustmentModel(vResult);
                        vResponse = HttpHelper.HandleResponse(vAdjustment, 200, true);
                    }
                }
            }
            catch (Exception vException)
            {
                vResponse = HttpHelper.HandleError(string.Format("[GetAdjustmentsById] {0}", vException.Message), 500);
            }

            return(vResponse);
        }
Example #4
0
        /// <summary>
        /// Lambda to fetch character by name from character table
        /// </summary>
        /// <param name="pRequest">Incoming API Gateway request object, used to pull parameter from url</param>
        /// <param name="pContext">Incoming Lambda Context object, not used currently</param>
        /// <returns></returns>
        public APIGatewayProxyResponse FunctionHandler(APIGatewayProxyRequest pRequest, ILambdaContext pContext)
        {
            if (pRequest.Headers.Keys.Contains("warmup"))
            {
                return(HttpHelper.WarmupResponse());
            }
            var vResponse = HttpHelper.HandleError("[GetClient] Unknown Backend error", 500);

            try
            {
                if (pRequest != null && pRequest.PathParameters != null && pRequest.PathParameters.Count > 0)
                {
                    string vClient = pRequest.PathParameters["client"];
                    using (opendkpContext vDatabase = new opendkpContext())
                    {
                        var vResult = vDatabase.Clients.First(x => x.Subdomain.Equals(vClient.Trim().ToLower()));
                        vResponse = HttpHelper.HandleResponse(vResult, 200);
                    }
                }
                else
                {
                    using (opendkpContext vDatabase = new opendkpContext())
                    {
                        var vResult = vDatabase.Clients.ToList();
                        vResponse = HttpHelper.HandleResponse(vResult, 200);
                    }
                }
            }
            catch (Exception vException)
            {
                vResponse = HttpHelper.HandleError(string.Format("[GetClient] {0}", vException.Message), 500);
            }

            return(vResponse);
        }
Example #5
0
        /// <summary>
        /// Creates an item into the db if needed (not found already)
        /// </summary>
        /// <param name="pDBContext">The database context in which to look or create the item in</param>
        /// <param name="pItem">The item to create or lookup, checks for its Id first otherwise by name</param>
        /// <returns></returns>
        public static Items CreateItemIfNeeded(opendkpContext pDBContext, Items pItem)
        {
            Items vFoundItem = pDBContext.Items.FirstOrDefault <Items>(x => x.IdItem == pItem.IdItem);

            //If we don't find the item by it's ID
            if (vFoundItem == null)
            {
                vFoundItem = pDBContext.Items
                             .FirstOrDefault <Items>(x => x.Name.Trim().Equals(pItem.Name.Trim(), StringComparison.InvariantCultureIgnoreCase));

                //If we don't find the item by it's name
                if (vFoundItem == null)
                {
                    var vNewItem = new Items
                    {
                        Name = pItem.Name
                    };
                    pDBContext.Add(vNewItem);
                    pDBContext.SaveChanges();
                    vFoundItem = vNewItem;
                }
            }

            return(vFoundItem);
        }
Example #6
0
        /// <summary>
        /// Inserts the raid items into the database associated with the raid passed in
        /// </summary>
        /// <param name="pDBContext">The database context to insert items to</param>
        /// <param name="pModel">The raid model containing the items</param>
        /// <param name="pCharacterModels">A pre-populated character list so we dont have to look them all up on the fly</param>
        public static void InsertRaidItems(opendkpContext pDBContext, string pClientId, dynamic pModel, Dictionary <string, Characters> pCharacterModels)
        {
            //Lets insert the items from this raid
            foreach (var vItem in pModel.Items)
            {
                string vCharName = vItem.CharacterName;
                Items  vNewItem;
                if (vItem.ItemID != null)
                {
                    vNewItem = new Items()
                    {
                        IdItem = vItem.ItemID, Name = vItem.ItemName
                    }
                }
                ;
                else
                {
                    vNewItem = new Items()
                    {
                        IdItem = -1, Name = vItem.ItemName
                    }
                };

                vNewItem = ItemHelper.CreateItemIfNeeded(pDBContext, vNewItem);
                ItemsXCharacters vTransaction = new ItemsXCharacters()
                {
                    Dkp         = vItem.DkpValue,
                    CharacterId = pCharacterModels[vCharName.ToLower()].IdCharacter,
                    ItemId      = vNewItem.IdItem,
                    RaidId      = pModel.IdRaid,
                    ClientId    = pClientId
                };
                pDBContext.Add(vTransaction);
            }
        }
Example #7
0
        /// <summary>
        /// Gets All of the CharacterModels associated to the raid via attendance via Raid.Ticks
        /// </summary>
        /// <param name="pDBContext">The database context to retrieve the character models from</param>
        /// <param name="pModel">The raid model containing Ticks and Attendees</param>
        /// <returns></returns>
        public static Dictionary <string, Characters> GetCharacterModels(opendkpContext pDBContext, string pClientId, dynamic pModel)
        {
            var vReturnModel = new Dictionary <string, Characters>();

            foreach (var vItem in pModel.Items)
            {
                string vCharacterName = vItem.CharacterName;
                vItem.CharacterName = vCharacterName = vCharacterName.Split(' ')[0];
                if (!vReturnModel.ContainsKey(vCharacterName.ToLower()))
                {
                    vReturnModel.Add(vCharacterName.ToLower(),
                                     CharacterHelper.CreateCharacterIfNeeded(pDBContext, pClientId, vCharacterName));
                }
            }

            foreach (var vTick in pModel.Ticks)
            {
                string[] vAttendeeArray = vTick.Attendees.ToObject <string[]>();
                for (int i = 0; i < vAttendeeArray.Length; i++)
                {
                    string vAttendee = vAttendeeArray[i].Split(' ')[0];
                    vTick.Attendees[i] = vAttendee.Trim();
                    if (!vReturnModel.ContainsKey(vAttendee.ToLower()))
                    {
                        vReturnModel.Add(vAttendee.ToLower(),
                                         CharacterHelper.CreateCharacterIfNeeded(pDBContext, pClientId, vAttendee));
                    }
                }
            }
            return(vReturnModel);
        }
Example #8
0
        /// <summary>
        /// Creates an individual tick
        /// </summary>
        /// <param name="pDBContext">The database context to store the tick</param>
        /// <param name="pRaidId">The raid id the tick should be associated with</param>
        /// <param name="pModel">The raid model the tick is associated with</param>
        /// <param name="pCharacterModels">Prepopulated character models</param>
        public static void CreateTick(opendkpContext pDBContext, string pClientId, int pRaidId, dynamic pModel, Dictionary <string, Characters> pCharacterModels)
        {
            Ticks vTick = new Ticks()
            {
                Description = pModel.Description,
                Value       = pModel.Value,
                RaidId      = pRaidId,
                ClientId    = pClientId
            };

            //Make sure we don't have duplicate attendees for each tick
            //client should handle this but we'll verify here
            string[] vAttendeeArray = pModel.Attendees.ToObject <string[]>();
            vAttendeeArray = vAttendeeArray.Distinct(StringComparer.OrdinalIgnoreCase).ToArray();

            //Add Attendees to Tick
            foreach (string vAttendee in vAttendeeArray)
            {
                pDBContext.Add(
                    new TicksXCharacters()
                {
                    IdCharacterNavigation = pCharacterModels[vAttendee.ToLower()],
                    IdTickNavigation      = vTick,
                    ClientId = pClientId
                });
            }
        }
        /// <summary>
        /// As the name suggests, creates a character if they are needed. Need is determined by whether or not they already exist in the database
        /// </summary>
        /// <param name="pDBContext">The database context to search for the character</param>
        /// <param name="pCharacterName">The character name to search for, case-insensitive</param>
        /// <returns></returns>
        public static Characters CreateCharacterIfNeeded(opendkpContext pDBContext, string pClientId, string pCharacterName)
        {
            Characters vCharacterModel = pDBContext.Characters
                                         .FirstOrDefault(x => x.Name.Equals(pCharacterName, StringComparison.InvariantCultureIgnoreCase));

            //If the character doesn't exist, we need to create a blank one first
            if (vCharacterModel == null)
            {
                vCharacterModel = new Characters
                {
                    Name     = char.ToUpper(pCharacterName[0]) + pCharacterName.Substring(1),
                    Class    = "UNKNOWN",
                    Race     = "UNKNOWN",
                    Active   = 1,
                    Rank     = "Inactive",
                    Level    = 1,
                    Gender   = "Male",
                    Guild    = "Original Gangster Club",
                    ClientId = pClientId
                };
                pDBContext.Add(vCharacterModel);
                pDBContext.SaveChanges();
            }

            return(vCharacterModel);
        }
        /// <summary>
        /// Fetches a character by their name
        /// </summary>
        /// <param name="pDBContext">The database context in which to search for the character</param>
        /// <param name="pCharacterName">The character name, case-insensitive</param>
        /// <returns></returns>
        public static Characters GetCharacterByName(opendkpContext pDBContext, string pClientId, string pCharacterName)
        {
            Characters vCharacterModel = pDBContext.Characters
                                         .FirstOrDefault(x => x.ClientId.Equals(pClientId) && x.Name.Equals(pCharacterName, StringComparison.InvariantCultureIgnoreCase));

            return(vCharacterModel);
        }
Example #11
0
        /// <summary>
        /// Lambda to fetch character by name from character table
        /// </summary>
        /// <param name="pRequest">Incoming API Gateway request object, used to pull parameter from url</param>
        /// <param name="pContext">Incoming Lambda Context object, not used currently</param>
        /// <returns></returns>
        public APIGatewayProxyResponse FunctionHandler(APIGatewayProxyRequest pRequest, ILambdaContext pContext)
        {
            if (pRequest.Headers.Keys.Contains("warmup"))
            {
                return(HttpHelper.WarmupResponse());
            }
            var vResponse = HttpHelper.HandleError("[GetCharacter] Unknown Backend error", 500);

            try
            {
                if (pRequest != null && pRequest.PathParameters != null && pRequest.PathParameters.Count > 0)
                {
                    //We need to retrieve the ClientId for multitenancy purposes
                    var vClientId = pRequest.Headers["clientid"];

                    string vCharacterName = pRequest.PathParameters["character"];
                    using (opendkpContext vDatabase = new opendkpContext())
                    {
                        var vResult = vDatabase.Characters.First(x => x.ClientId.Equals(vClientId) &&
                                                                 x.Name.Equals(vCharacterName, StringComparison.InvariantCultureIgnoreCase));

                        vResult.SummaryModel = CacheManager.GetPlayerSummary(vDatabase, vCharacterName, vClientId);
                        vResponse            = HttpHelper.HandleResponse(vResult, 200);
                    }
                }
            }
            catch (Exception vException)
            {
                vResponse = HttpHelper.HandleError(string.Format("[GetCharacter] {0}", vException.Message), 500);
            }

            return(vResponse);
        }
Example #12
0
        /// <summary>
        /// This function is designed to Compare the IAM Role associated with the  UserGroup to the ClientID passed in
        /// If the Roles don't match, we don't allow the request to come through
        /// </summary>
        /// <param name="vDatabase">dbcontext</param>
        /// <param name="pArnString">The string passed in by the API Gateway stating who the user is</param>
        /// <param name="pClientId">The client id the user is requesting to update for</param>
        /// <returns></returns>
        public static bool IsAuthorizedAdmin(opendkpContext vDatabase, APIGatewayProxyRequest pRequest)
        {
            //The Context Contains the Identity & Request contains the header with the client id
            //string pArnString, string pClientId
            try
            {
                string[] vArnItems    = pRequest.RequestContext.Identity.UserArn.Split('/');
                string   vAssumedRole = string.Empty;
                string   vClientId    = pRequest.Headers["clientid"];
                if (vArnItems.Length > 1)
                {
                    vAssumedRole = vArnItems[1];
                }

                if (!string.IsNullOrWhiteSpace(vAssumedRole))
                {
                    var vClientModel = vDatabase.Clients.FirstOrDefault(x => x.ClientId.Equals(vClientId, StringComparison.InvariantCultureIgnoreCase));
                    if (vClientModel != null)
                    {
                        if (vClientModel.AssumedRole.Equals(vAssumedRole, StringComparison.InvariantCultureIgnoreCase))
                        {
                            return(true);
                        }
                    }
                }
            }
            catch
            {
                Console.WriteLine("IsAuthorizedAdmin exception encountered");
            }

            return(false);
        }
Example #13
0
        /// <summary>
        /// TODO
        /// </summary>
        /// <param name="pInput">Incoming API Gateway request object, used to pull parameter from url</param>
        /// <param name="pContext">Incoming Lambda Context object, not used currently</param>
        /// <returns></returns>
        public void FunctionHandler(string pInput, ILambdaContext pContext)
        {
            try
            {
                using (opendkpContext vDatabase = new opendkpContext())
                {
                    var vChanges    = new Dictionary <string, string>();
                    var vCharacters = vDatabase.Characters.Include("TicksXCharacters.IdTickNavigation.Raid");
                    foreach (Characters vCharacter in vCharacters)
                    {
                        var vTickCount = vCharacter.TicksXCharacters.Where(x => DateTime.Compare(x.IdTickNavigation.Raid.Timestamp.Date,
                                                                                                 DateTime.Now.AddDays(-60).Date) >= 0).Count();

                        if (vTickCount > 0 && vCharacter.Active == 0)
                        {
                            vCharacter.Active = 1;
                            Console.WriteLine(string.Format("{0} Marked ACTIVE, Total Ticks = {1}", vCharacter.Name, vTickCount));
                            vChanges.Add(vCharacter.Name, "Marked Active, Total Ticks = " + vTickCount);
                        }
                        if (vTickCount <= 0 && vCharacter.Active == 1)
                        {
                            vCharacter.Active = 0;
                            Console.WriteLine(string.Format("{0} Marked INACTIVE, Total Ticks = {1}", vCharacter.Name, vTickCount));
                            vChanges.Add(vCharacter.Name, "Marked Inactive, Total Ticks = " + vTickCount);
                        }
                    }
                    vDatabase.SaveChanges();
                }
            }
            catch (Exception vException)
            {
                Console.WriteLine(vException);
            }
        }
Example #14
0
        /// <summary>
        /// Lambda to insert character to character table
        /// </summary>
        /// <param name="pRequest">Incoming API Gateway request object, should be a PUT or POST with a BODY</param>
        /// <param name="pContext">Incoming Lambda Context object, not used currently</param>
        /// <returns></returns>
        public APIGatewayProxyResponse FunctionHandler(APIGatewayProxyRequest pRequest, ILambdaContext pContext)
        {
            if (pRequest.Headers.Keys.Contains("warmup"))
            {
                return(HttpHelper.WarmupResponse());
            }
            if (pRequest == null)
            {
                return(HttpHelper.HandleError("Request appears to be null", 500));
            }

            using (opendkpContext vDatabase = new opendkpContext())
            {
                if (!CognitoHelper.IsDkpAdmin(pRequest) ||
                    !CognitoHelper.IsAuthorizedAdmin(vDatabase, pRequest))
                {
                    return(HttpHelper.HandleError("You do not have permission to perform this action", 401));
                }
                var vCognitoUser = CognitoHelper.GetCognitoUser(pRequest.Headers["cognitoinfo"]);

                //We need to retrieve the ClientId for multitenancy purposes
                var vClientId = pRequest.Headers["clientid"];

                if (pRequest.HttpMethod.Equals("PUT", StringComparison.InvariantCultureIgnoreCase))
                {
                    return(HandleInsert(pRequest, pContext, vCognitoUser, vDatabase, vClientId));
                }
                else if (pRequest.HttpMethod.Equals("POST", StringComparison.InvariantCultureIgnoreCase))
                {
                    return(HandleUpdate(pRequest, pContext, vCognitoUser, vDatabase, vClientId));
                }
            }
            return(HttpHelper.HandleError("Only Methods PUT,POST are supported by this lamdba", 500));
        }
Example #15
0
        private APIGatewayProxyResponse UpdateCharacterAssignRequest(opendkpContext pDatabase, string pClientId, UserRequests pUserRequest, CognitoUser pCognitoUser)
        {
            var vResponse = HttpHelper.HandleError("[UserRequestsLambda] Issue with DB or Query", 500);

            if (!string.IsNullOrWhiteSpace(pUserRequest.Requestor) && !string.IsNullOrWhiteSpace(pUserRequest.RequestDetails))
            {
                if (pUserRequest.RequestStatus == UserRequests.STATUS_APPROVED)
                {
                    dynamic vCharacterId = JsonConvert.DeserializeObject(pUserRequest.RequestDetails);
                    int     vId          = vCharacterId.characterId;

                    //I need to associate the character
                    //If character associate is successful, I need to update pending request to completed
                    using (var dbContextTransaction = pDatabase.Database.BeginTransaction())
                    {
                        UserXCharacter vAssociation = new UserXCharacter();
                        vAssociation.User        = pUserRequest.Requestor;
                        vAssociation.IdCharacter = vId;
                        vAssociation.ApprovedBy  = pCognitoUser.Username;
                        vAssociation.ClientId    = pClientId;
                        pDatabase.Add(vAssociation);

                        UserRequests vRequest = pDatabase.UserRequests.FirstOrDefault(x => x.ClientId.Equals(pClientId) && x.Id == pUserRequest.Id);
                        if (vRequest == null)
                        {
                            return(HttpHelper.HandleError("[UserRequestsLambda] Couldn't find the Request in DB to update...", 500));
                        }
                        vRequest.RequestApprover   = pCognitoUser.Username;
                        vRequest.ReviewedTimestamp = DateTime.Now;
                        vRequest.RequestStatus     = UserRequests.STATUS_APPROVED;
                        vRequest.ClientId          = pClientId;

                        pDatabase.SaveChanges();
                        dbContextTransaction.Commit();
                        vResponse = HttpHelper.HandleResponse(vRequest, 200, true);
                    }
                }
                else if (pUserRequest.RequestStatus == UserRequests.STATUS_DENIED)
                {
                    UserRequests vRequest = pDatabase.UserRequests.FirstOrDefault(x => x.ClientId.Equals(pClientId) && x.Id == pUserRequest.Id);
                    if (vRequest == null)
                    {
                        return(HttpHelper.HandleError("[UserRequestsLambda] Couldn't find the Request in DB to update...", 500));
                    }
                    vRequest.RequestApprover   = pCognitoUser.Username;
                    vRequest.ReviewedTimestamp = DateTime.Now;
                    vRequest.RequestStatus     = UserRequests.STATUS_DENIED;
                    vRequest.RequestDetails    = pUserRequest.RequestDetails;
                    vRequest.ClientId          = pClientId;

                    pDatabase.SaveChanges();
                    vResponse = HttpHelper.HandleResponse(vRequest, 200, true);
                }
            }
            return(vResponse);
        }
Example #16
0
        /// <summary>
        /// Lambda to insert character to character table
        /// </summary>
        /// <param name="pRequest">Incoming API Gateway request object, should be a PUT or POST with a BODY</param>
        /// <param name="pContext">Incoming Lambda Context object, not used currently</param>
        /// <returns></returns>
        public APIGatewayProxyResponse FunctionHandler(APIGatewayProxyRequest pRequest, ILambdaContext pContext)
        {
            if (pRequest.Headers.Keys.Contains("warmup"))
            {
                return(HttpHelper.WarmupResponse());
            }
            var vResponse = HttpHelper.HandleError("[DeleteAdjustment] Unknown Backend error", 500);

            try
            {
                if (pRequest != null && pRequest.PathParameters != null && pRequest.PathParameters.Count > 0)
                {
                    int vId = int.Parse(pRequest.PathParameters["id"]);
                    using (opendkpContext vDatabase = new opendkpContext())
                    {
                        //Authorized Users only for Deleting Adjustments
                        if (!CognitoHelper.IsDkpAdmin(pRequest) ||
                            !CognitoHelper.IsAuthorizedAdmin(vDatabase, pRequest))
                        {
                            return(HttpHelper.HandleError("You do not have permission to perform this action", 401));
                        }
                        var vCognitoUser = CognitoHelper.GetCognitoUser(pRequest.Headers["cognitoinfo"]);

                        //We need to retrieve the ClientId for multitenancy purposes
                        var vClientId = pRequest.Headers["clientid"];

                        var vResult = vDatabase.Adjustments
                                      .FirstOrDefault(x => x.ClientId.Equals(vClientId) && x.IdAdjustment == vId);
                        if (vResult != null)
                        {
                            vDatabase.Adjustments.Remove(vResult);
                            vDatabase.SaveChanges();

                            //Audit
                            AuditHelper.InsertAudit(vDatabase, vClientId, vResult, string.Empty, vCognitoUser.Username, Audit.ACTION_ADJUST_DELETE);

                            //Update Caches
                            int vStatus = CacheManager.UpdateSummaryCacheAsync(vClientId).GetAwaiter().GetResult();
                            Console.WriteLine("StatusCode for CacheUpdate=" + vStatus);

                            vResponse = HttpHelper.HandleResponse(vResult, 200, true);
                        }
                        else
                        {
                            vResponse = HttpHelper.HandleError("[DeleteAdjustment] Adjustment doesnt exist in DB", 500);
                        }
                    }
                }
            }
            catch
            {
                vResponse = HttpHelper.HandleError("[DeleteAdjustment] Issue with DB or Query", 500);
            }

            return(vResponse);
        }
Example #17
0
        /// <summary>
        /// Lambda to fetch all characters from the character table
        /// </summary>
        /// <param name="pRequest">Incoming API Gateway request object, not used currently</param>
        /// <param name="pContext">Incoming Lambda Context object, not used currently</param>
        /// <returns></returns>
        public APIGatewayProxyResponse FunctionHandler(APIGatewayProxyRequest pRequest, ILambdaContext pContext)
        {
            if (pRequest.Headers != null && pRequest.Headers.Count > 0 && pRequest.Headers.Keys.Contains("warmup"))
            {
                return(HttpHelper.WarmupResponse());
            }
            var vResponse = HttpHelper.HandleError("[CognitoAPIs] Unknown Error in backend", 500);

            try
            {
                string pUserPool = string.Empty;
                //The request should be from an authorized user, if yes then also grab the UserPool for the associated client
                using (opendkpContext vDatabase = new opendkpContext())
                {
                    //Authorized Users only for Audit information
                    if (!CognitoHelper.IsDkpAdmin(pRequest) ||
                        !CognitoHelper.IsAuthorizedAdmin(vDatabase, pRequest))
                    {
                        return(HttpHelper.HandleError("You do not have permission to perform this action", 401));
                    }

                    //No validation on header because it's pre-performed above in the CognitoHelper
                    pUserPool = vDatabase.Clients.
                                FirstOrDefault(x => x.ClientId.Equals(pRequest.Headers["clientid"],
                                                                      StringComparison.InvariantCultureIgnoreCase)).UserPool;
                }

                if (pRequest.HttpMethod == "GET")
                {
                    Task <object> vTask = GetAllUsersAsync(pUserPool);
                    vResponse = HttpHelper.HandleResponse(vTask.Result, 200);
                }
                if (pRequest.HttpMethod == "POST")
                {
                    dynamic vModel  = JsonConvert.DeserializeObject(pRequest.Body);
                    string  vAction = vModel.Action;
                    string  vData   = vModel.Data;

                    if (vAction.Equals("add-admin"))
                    {
                        Task <string> vTask = AddDkpAdminAsync(vData, pUserPool);
                        vResponse = HttpHelper.HandleResponse(vTask.Result, 200);
                    }
                    else if (vAction.Equals("remove-admin"))
                    {
                        Task <string> vTask = RemoveDkpAdminAsync(vData, pUserPool);
                        vResponse = HttpHelper.HandleResponse(vTask.Result, 200);
                    }
                }
            }
            catch (Exception vException)
            {
                vResponse = HttpHelper.HandleError("[CognitoAPIs] " + vException.Message, 500);
            }
            return(vResponse);
        }
Example #18
0
        public void InjectRequestDetails(opendkpContext pDatabase, string pClientId, UserRequests pRequest)
        {
            JsonSerializerSettings vSettings = new JsonSerializerSettings
            {
                ReferenceLoopHandling = ReferenceLoopHandling.Ignore
            };

            if (pRequest.RequestType == UserRequests.TYPE_CHARACTER_ASSIGN)
            {
                dynamic    vModel     = JsonConvert.DeserializeObject(pRequest.RequestDetails);
                int        vId        = vModel.characterId;
                Characters vCharacter = pDatabase.Characters.FirstOrDefault(x => x.ClientId.Equals(pClientId) && x.IdCharacter == vId);
                vModel.character        = JsonConvert.SerializeObject(vCharacter, vSettings);
                pRequest.RequestDetails = JsonConvert.SerializeObject(vModel, vSettings);
            }

            if (pRequest.RequestType == UserRequests.TYPE_RAIDTICK)
            {
                dynamic vModel         = JsonConvert.DeserializeObject(pRequest.RequestDetails);
                string  vCharacterName = vModel.characterName;
                int     vTickId        = vModel.tickId;
                string  vReason        = vModel.reason;

                var vFound = pDatabase.TicksXCharacters.
                             Include("IdTickNavigation.Raid").
                             FirstOrDefault(x => x.ClientId.Equals(pClientId) && x.IdTick == vTickId);
                object vCustomModel = null;
                if (vFound != null)
                {
                    vCustomModel = new
                    {
                        Character = vCharacterName,
                        Raid      = vFound.IdTickNavigation.Raid.Name,
                        vFound.IdTickNavigation.Raid.Timestamp,
                        Tick     = vFound.IdTickNavigation.Description,
                        DkpValue = vFound.IdTickNavigation.Value
                    };
                }
                else
                {
                    vCustomModel = new
                    {
                        Character = vCharacterName,
                        Raid      = "UNKNOWN",
                        Timestamp = DateTime.Now,
                        Tick      = "UNKNOWN",
                        DkpValue  = 0
                    };
                }

                vModel.raid = JsonConvert.SerializeObject(vCustomModel, vSettings);

                pRequest.RequestDetails = JsonConvert.SerializeObject(vModel, vSettings);
            }
        }
Example #19
0
        /// <summary>
        /// Lambda to fetch all characters from the character table
        /// </summary>
        /// <param name="pRequest">Incoming API Gateway request object, not used currently</param>
        /// <param name="pContext">Incoming Lambda Context object, not used currently</param>
        /// <returns></returns>
        public APIGatewayProxyResponse FunctionHandler(APIGatewayProxyRequest pRequest, ILambdaContext pContext)
        {
            if (pRequest.Headers != null && pRequest.Headers.Count > 0 && pRequest.Headers.Keys.Contains("warmup"))
            {
                return(HttpHelper.WarmupResponse());
            }
            var vResponse = HttpHelper.HandleError("[AuditLambda] Unknown Error in backend", 500);

            //We need to retrieve the ClientId for multitenancy purposes
            var vClientId = pRequest.Headers["clientid"];

            try
            {
                int vId = -1;
                if (pRequest != null && pRequest.PathParameters != null && pRequest.PathParameters.Count > 0)
                {
                    vId = int.Parse(pRequest.PathParameters["id"]);
                }
                using (opendkpContext vDatabase = new opendkpContext())
                {
                    //Authorized Users only for Audit information
                    if (!CognitoHelper.IsDkpAdmin(pRequest) ||
                        !CognitoHelper.IsAuthorizedAdmin(vDatabase, pRequest))
                    {
                        return(HttpHelper.HandleError("You do not have permission to perform this action", 401));
                    }

                    if (pRequest.HttpMethod.Equals("GET", StringComparison.InvariantCultureIgnoreCase))
                    {
                        List <Audit> vResult;
                        if (vId > -1)
                        {
                            vResult = vDatabase.Audit.Where(x => x.ClientId.Equals(vClientId) && x.Id == vId).ToList();
                        }
                        else
                        {
                            //We don't want to transmit a ton of data for fetching all audits
                            vResult = vDatabase.Audit.Where(x => x.ClientId.Equals(vClientId)).ToList();
                            foreach (Audit vItem in vResult)
                            {
                                vItem.NewValue = string.Empty;
                                vItem.OldValue = string.Empty;
                            }
                        }
                        vResponse = HttpHelper.HandleResponse(vResult, 200, true);
                    }
                }
            }
            catch (Exception vException)
            {
                vResponse = HttpHelper.HandleError("[AuditLambda] " + vException.Message, 500);
            }
            return(vResponse);
        }
Example #20
0
        private APIGatewayProxyResponse GetAllRequests(opendkpContext pDatabase, string pClientId)
        {
            var vResponse = HttpHelper.HandleError("[UserRequestsLambda] Issue with DB or Query", 500);
            var vResults  = pDatabase.UserRequests.Where(x => x.ClientId.Equals(pClientId)).ToList();

            foreach (UserRequests vRequest in vResults)
            {
                InjectRequestDetails(pDatabase, pClientId, vRequest);
            }
            vResponse = HttpHelper.HandleResponse(vResults, 200, true);
            return(vResponse);
        }
Example #21
0
        /// <summary>
        /// Lambda to insert character to character table
        /// </summary>
        /// <param name="pRequest">Incoming API Gateway request object, should be a PUT or POST with a BODY</param>
        /// <param name="pContext">Incoming Lambda Context object, not used currently</param>
        /// <returns></returns>
        public APIGatewayProxyResponse FunctionHandler(APIGatewayProxyRequest pRequest, ILambdaContext pContext)
        {
            if (pRequest.Headers.Keys.Contains("warmup"))
            {
                return(HttpHelper.WarmupResponse());
            }
            var vResponse = HttpHelper.HandleError("[DeleteCharacter] Unknown Backend error", 500);

            try
            {
                if (pRequest != null && pRequest.PathParameters != null && pRequest.PathParameters.Count > 0)
                {
                    //We need to retrieve the ClientId for multitenancy purposes
                    var vClientId = pRequest.Headers["clientid"];

                    string vCharacterName = pRequest.PathParameters["character"];
                    using (opendkpContext vDatabase = new opendkpContext())
                    {
                        //Authorized Users only for Deleting Characters
                        if (!CognitoHelper.IsDkpAdmin(pRequest) ||
                            !CognitoHelper.IsAuthorizedAdmin(vDatabase, pRequest))
                        {
                            return(HttpHelper.HandleError("You do not have permission to perform this action", 401));
                        }
                        var vCognitoUser = CognitoHelper.GetCognitoUser(pRequest.Headers["cognitoinfo"]);

                        var vResult = vDatabase.
                                      Characters.
                                      FirstOrDefault(x => x.ClientId.Equals(vClientId) &&
                                                     x.Name.Equals(vCharacterName, StringComparison.InvariantCultureIgnoreCase));

                        if (vResult != null)
                        {
                            vDatabase.Characters.Remove(vResult);
                            vDatabase.SaveChanges();
                            AuditHelper.InsertAudit(vDatabase, vClientId, vResult, string.Empty, vCognitoUser.Username, Audit.ACTION_CHAR_DELETE);
                            vResponse = HttpHelper.HandleResponse(vResult, 200);
                        }
                        else
                        {
                            vResponse = HttpHelper.HandleError("[DeleteCharacter] Character doesn't exist in the DB", 500);
                        }
                    }
                }
            }
            catch
            {
                vResponse = HttpHelper.HandleError("[DeleteCharacter] Issue with DB or Query", 500);
            }

            return(vResponse);
        }
Example #22
0
        /// <summary>
        /// Deletes a raid based off the raid id
        /// </summary>
        /// <param name="pDBContext">The database context in which to delete the raid</param>
        /// <param name="pRaidId">The raid id to delete</param>
        /// <returns></returns>
        public static Raids DeleteRaid(opendkpContext pDBContext, int pRaidId, string pClientId)
        {
            Raids vResult;

            vResult = pDBContext.Raids
                      .FirstOrDefault <Raids>(x => x.ClientId.Equals(pClientId) && x.IdRaid == pRaidId);
            if (vResult != null)
            {
                pDBContext.Raids.Remove(vResult);
            }

            return(vResult);
        }
Example #23
0
        /// <summary>
        /// Lambda to fetch all characters from the character table
        /// </summary>
        /// <param name="pRequest">Incoming API Gateway request object, not used currently</param>
        /// <param name="pContext">Incoming Lambda Context object, not used currently</param>
        /// <returns></returns>
        public APIGatewayProxyResponse FunctionHandler(APIGatewayProxyRequest pRequest, ILambdaContext pContext)
        {
            if (pRequest.Headers != null && pRequest.Headers.Count > 0 && pRequest.Headers.Keys.Contains("warmup"))
            {
                return(HttpHelper.WarmupResponse());
            }
            var vResponse = HttpHelper.HandleError("[GetAllCharacters] Unknown Error in backend", 500);

            try
            {
                using (opendkpContext vDatabase = new opendkpContext())
                {
                    //We need to retrieve the ClientId for multitenancy purposes
                    var vClientId = pRequest.Headers["clientid"];
                    if (pRequest != null && pRequest.PathParameters != null && pRequest.PathParameters.Count > 0)
                    {
                        string vAccountName = pRequest.PathParameters["account"].Trim();
                        var    vTmpList     = vDatabase.UserXCharacter
                                              .Where(x => x.ClientId.Equals(vClientId) && x.User.Trim().Equals(vAccountName, StringComparison.InvariantCultureIgnoreCase)).ToList();
                        var vResult = new List <Characters>();
                        var vList   = new List <int>();
                        foreach (var vCharacter in vTmpList)
                        {
                            vList.Add(vCharacter.IdCharacter);
                        }
                        vResult   = vDatabase.Characters.Where(x => x.ClientId.Equals(vClientId) && vList.Contains(x.IdCharacter)).ToList();
                        vResponse = HttpHelper.HandleResponse(vResult, 200, true);
                    }
                    else
                    {
                        object vResult = null;
                        if (pRequest.QueryStringParameters != null && pRequest.QueryStringParameters.Count > 0 &&
                            pRequest.QueryStringParameters.ContainsKey("IncludeInactives"))
                        {
                            vResult = vDatabase.Characters.Where(x => x.ClientId.Equals(vClientId)).ToList <Characters>();
                        }
                        else
                        {
                            vResult = vDatabase.Characters.Where(x => x.ClientId.Equals(vClientId) &&
                                                                 x.Active == 1).ToList <Characters>();
                        }
                        vResponse = HttpHelper.HandleResponse(vResult, 200);
                    }
                }
            }
            catch (Exception vException)
            {
                vResponse = HttpHelper.HandleError("[GetAllCharacters] " + vException.Message, 500);
            }
            return(vResponse);
        }
Example #24
0
        /// <summary>
        /// A simple function that takes a string and does a ToUpper
        /// </summary>
        /// <param name="input"></param>
        /// <param name="context"></param>
        /// <returns></returns>
        public APIGatewayProxyResponse FunctionHandler(APIGatewayProxyRequest pRequest, ILambdaContext pContext)
        {
            if (pRequest.Headers.Keys.Contains("warmup"))
            {
                return(HttpHelper.WarmupResponse());
            }
            var vResponse = HttpHelper.HandleError("[GetItemsByCharacter] Unknown Backend error", 500);

            try
            {
                if (pRequest != null && pRequest.PathParameters != null && pRequest.PathParameters.Count > 0)
                {
                    string vCharacterName = pRequest.PathParameters["id"];

                    //We need to retrieve the ClientId for multitenancy purposes
                    var vClientId = pRequest.Headers["clientid"];
                    using (opendkpContext vDatabase = new opendkpContext())
                    {
                        var vItems = new List <object>();

                        var vResult = vDatabase.Characters
                                      .Include("ItemsXCharacters.Item")
                                      .Include("ItemsXCharacters.Raid").
                                      First(x => x.ClientId.Equals(vClientId) && x.Name.Equals(vCharacterName, StringComparison.InvariantCultureIgnoreCase));


                        foreach (var vItem in vResult.ItemsXCharacters)
                        {
                            vItems.Add(new
                            {
                                ItemName = vItem.Item.Name,
                                ItemID   = vItem.ItemId,
                                Raid     = vItem.Raid.Name,
                                RaidID   = vItem.RaidId,
                                Date     = vItem.Raid.Timestamp,
                                DkpValue = vItem.Dkp
                            });
                        }

                        vResponse = HttpHelper.HandleResponse(vItems, 200, true);
                    }
                }
            }
            catch (Exception vException)
            {
                vResponse = HttpHelper.HandleError(string.Format("[GetItemsByCharacter] {0}", vException.Message), 500);
            }

            return(vResponse);
        }
Example #25
0
        /// <summary>
        /// Fetches the cached value from the database context passed in
        /// </summary>
        /// <param name="pContext">The database context</param>
        /// <param name="pCacheName">The name of the cahce you are retriving, case-insensitive</param>
        /// <returns></returns>
        public static Cache GetCache(opendkpContext pContext, string pCacheName, string pClientId)
        {
            Cache vReturnModel = null;

            try
            {
                vReturnModel = pContext.Cache.FirstOrDefault(x => x.ClientId.Equals(pClientId) && x.CacheName.Equals(pCacheName, StringComparison.InvariantCultureIgnoreCase));
            }
            catch (Exception vException)
            {
                Console.WriteLine("Error Retriving Cache: " + vException);
            }
            return(vReturnModel);
        }
Example #26
0
        private APIGatewayProxyResponse GetAccountRequests(opendkpContext pDatabase, string pAccount, string pClientId)
        {
            var vResponse = HttpHelper.HandleError("[UserRequestsLambda] Issue with DB or Query", 500);
            var vResults  = pDatabase.UserRequests.
                            Where(x => x.ClientId.Equals(pClientId) && x.Requestor.ToLower().Equals(pAccount.ToLower(), StringComparison.InvariantCultureIgnoreCase))
                            .ToList();

            foreach (UserRequests vRequest in vResults)
            {
                InjectRequestDetails(pDatabase, pClientId, vRequest);
            }
            vResponse = HttpHelper.HandleResponse(vResults, 200, true);
            return(vResponse);
        }
Example #27
0
        /// <summary>
        /// Fetches the Player Summary Cache, mostly a helper function to pull out PlayerSummaryModel
        /// </summary>
        /// <param name="pContext">The database to retrieve the cache from</param>
        /// <param name="pCharacterName">The name of the character to pull from, case-insensitive</param>
        /// <returns></returns>
        public static PlayerSummaryModel GetPlayerSummary(opendkpContext pContext, string pCharacterName, string pClientId)
        {
            var   vReturnModel   = new PlayerSummaryModel();
            Cache vCachedSummary = GetCache(pContext, SUMMARY, pClientId);
            var   vModel         = JsonConvert.DeserializeObject <SummaryModel>(vCachedSummary.CacheValue);

            foreach (var vItem in vModel.Models)
            {
                if (vItem.CharacterName.Equals(pCharacterName, StringComparison.InvariantCultureIgnoreCase))
                {
                    return(vItem);
                }
            }
            return(vReturnModel);
        }
Example #28
0
        /// <summary>
        /// Lambda to insert character to character table
        /// </summary>
        /// <param name="pRequest">Incoming API Gateway request object, should be a PUT or POST with a BODY</param>
        /// <param name="pContext">Incoming Lambda Context object, not used currently</param>
        /// <returns></returns>
        public APIGatewayProxyResponse FunctionHandler(APIGatewayProxyRequest pRequest, ILambdaContext pContext)
        {
            if (pRequest.Headers.Keys.Contains("warmup"))
            {
                return(HttpHelper.WarmupResponse());
            }
            var vResponse = HttpHelper.HandleError("[DeleteRaid] Unknown Backend error", 500);

            try
            {
                if (pRequest != null && pRequest.PathParameters != null && pRequest.PathParameters.Count > 0)
                {
                    int vId = int.Parse(pRequest.PathParameters["id"]);
                    using (opendkpContext vDatabase = new opendkpContext())
                    {
                        //Authorized Users only for Deleting Raids
                        if (!CognitoHelper.IsDkpAdmin(pRequest) ||
                            !CognitoHelper.IsAuthorizedAdmin(vDatabase, pRequest))
                        {
                            return(HttpHelper.HandleError("You do not have permission to perform this action", 401));
                        }
                        var vCognitoUser = CognitoHelper.GetCognitoUser(pRequest.Headers["cognitoinfo"]);

                        //We need to retrieve the ClientId for multitenancy purposes
                        var vClientId = pRequest.Headers["clientid"];

                        Raids vResult = RaidHelper.DeleteRaid(vDatabase, vId, vClientId);
                        vDatabase.SaveChanges();
                        vResponse = HttpHelper.HandleResponse(vResult, 200);

                        //Audit
                        AuditHelper.InsertAudit(vDatabase, vClientId, vResult, string.Empty, vCognitoUser.Username, Audit.ACTION_RAID_DELETE);

                        //Update Caches
                        int vStatus = CacheManager.UpdateSummaryCacheAsync(vClientId).GetAwaiter().GetResult();
                        Console.WriteLine("SummaryCacheResponse=" + vStatus);
                        vStatus = CacheManager.UpdateItemCacheAsync(vClientId).GetAwaiter().GetResult();
                        Console.WriteLine("ItemCacheResponse=" + vStatus);
                    }
                }
            }
            catch
            {
                vResponse = HttpHelper.HandleError("[DeleteRaid] Issue with DB or Query", 500);
            }

            return(vResponse);
        }
Example #29
0
        /// <summary>
        /// Converts a Character Name into the Character Id
        /// </summary>
        /// <param name="pDatabase">The database context in which to look up the character</param>
        /// <param name="pCharacterName">The character name, case-insensitive</param>
        /// <returns></returns>
        public static int CharacterNameToId(opendkpContext pDatabase, string pClientId, string pCharacterName)
        {
            int vCharacterId = -1;

            try
            {
                Characters vModel = pDatabase.Characters
                                    .FirstOrDefault(x => x.ClientId.Equals(pClientId) && x.Name.Equals(pCharacterName.Trim(), StringComparison.InvariantCultureIgnoreCase));
                vCharacterId = vModel.IdCharacter;
            }
            catch
            {
                throw new Exception(string.Format("{0} does not exist in the database", pCharacterName));
            }
            return(vCharacterId);
        }
        /// <summary>
        /// Deletes a UserRequest from the Database
        /// </summary>
        /// <param name="pDBContext">The database in which to delete the UserREquest from</param>
        /// <param name="pRequest">The UserRequest to delete</param>
        /// <returns></returns>
        public static bool DeleteRequest(opendkpContext pDBContext, UserRequests pRequest)
        {
            bool vReturn = false;

            try
            {
                pDBContext.Remove(pRequest);
                pDBContext.SaveChanges();
                vReturn = true;
            }
            catch (Exception vException)
            {
                Console.WriteLine("Error Inserting AdminRequest: " + vException);
            }
            return(vReturn);
        }