Example #1
0
        private void UserRequest_Click(object sender, RoutedEventArgs e)
        {
            var requestHolder = ((this.Parent as FrameworkElement).FindName("userrequest") as ContentControl);

            if (requestHolder.Visibility == Visibility.Visible)
            {
                requestHolder.Visibility = Visibility.Collapsed;
                var ur = requestHolder.Content as UserRequests;
                if (ur != null)
                {
                    ur.stop();
                }
                requestHolder.Content = null;
            }
            else
            {
                var ur = new UserRequests();
                if (Double.IsNaN(ur.Height))
                {
                    ur.Height = 200;
                }
                if (Double.IsNaN(ur.Width))
                {
                    ur.Width = 400;
                }
                if (Manager.Config.UserRequestSize.Width > 2)
                {
                    ur.Width  = Manager.Config.UserRequestSize.Width;
                    ur.Height = Manager.Config.UserRequestSize.Height;
                }
                var h = WorkPage.CurrentPage.ActualHeight - 55;
                if (h < ur.Height)
                {
                    ur.Height = h;
                }
                ur.MinHeight          = ur.Height;
                requestHolder.Content = ur;
                VisualEx.MakeResizable(requestHolder.Content as FrameworkElement, false);
                requestHolder.Visibility = Visibility.Visible;
            }
        }
        public async Task <ActionResult> GetUserRequests(string argRequestType)
        {
            #region Declarations
            UserRequests             l_UserRequests             = new UserRequests();
            UserRequestsBECollection l_UserRequestsBECollection = new UserRequestsBECollection();
            UserRequestsCollection   l_UserRequestsCollection   = new UserRequestsCollection();
            string l_skillsURL = string.Empty;
            #endregion

            l_skillsURL = apiBaseURL + "/GetUserRequests?argLoggedInUser="******"&argType=" + argRequestType + "";
            HttpResponseMessage l_SkillsData = await client.GetAsync(l_skillsURL);

            if (l_SkillsData != null && l_SkillsData.IsSuccessStatusCode)
            {
                var l_SkillResponse = l_SkillsData.Content.ReadAsStringAsync().Result;
                l_UserRequestsBECollection = JsonConvert.DeserializeObject <UserRequestsBECollection>(l_SkillResponse);
            }

            l_UserRequestsCollection = ConvertUserRequestsToModel(l_UserRequestsBECollection);
            return(PartialView("_partialGetUserRequests", l_UserRequestsCollection));
        }
        /// <summary>
        /// Executed when Navigation is performed
        /// </summary>
        /// <param name="mode">Value representing page to navigate to</param>
        private async void OnNavigateModeChanged(Mode mode)
        {
            //Load user requests when History view is opened
            if (mode == Mode.History)
            {
                LoaderService.Instance.ShowLoader();
                bool isSuccess = await Task.Run(() =>
                {
                    try
                    {
                        //this code added to show loader working
                        Thread.Sleep(3000);
                        using (UserRequestApiService userRequestApi = new UserRequestApiService())
                        {
                            IEnumerable <UserRequest> userRequests = userRequestApi.GetUserRequests(AutoLoginService.Instance.CurrentUser.Guid)
                                                                     .Select(r => { r.ChangedAt = r.ChangedAt.ToLocalTime(); return(r); });
                            UserRequests = new ObservableCollection <UserRequest>(userRequests);
                            return(true);
                        }
                    }
                    catch (Exception ex)
                    {
                        Logger.Log(ex);
                        return(false);
                    }
                });

                LoaderService.Instance.HideLoader();
                if (!isSuccess)
                {
                    Logger.Log(Resources.UserRequest_LoadAllFailed);
                    MessageBox.Show(Resources.UserRequest_LoadAllFailed);
                }
            }
            else
            {
                //Clear user requests list when user opens other pages
                UserRequests.Clear();
            }
        }
Example #4
0
        private void btn_addProjectToWorker_Click(object sender, EventArgs e)
        {
            List <User> users = new List <User>();

            for (int i = 0; i < checkedListBoxWorkers.Items.Count; i++)
            {
                if (checkedListBoxWorkers.GetItemChecked(i))
                {
                    users.Add((checkedListBoxWorkers.Items[i] as User));
                }
            }
            bool isSuccess = UserRequests.addWorkerToProject((cmbx_projects.SelectedItem as Project).ProjectId, users);

            if (isSuccess)
            {
                MessageBox.Show("Success");
            }
            else
            {
                MessageBox.Show("ERROR!");
            }
        }
Example #5
0
        /// <summary>
        /// Try to get ip cumputer and login with ip
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void Main_Load(object sender, EventArgs e)
        {
            string computerIp = "";
            var    host       = Dns.GetHostEntry(Dns.GetHostName());

            foreach (var ip in host.AddressList)
            {
                if (ip.AddressFamily == AddressFamily.InterNetwork)
                {
                    computerIp = ip.ToString();
                }
            }

            User user = UserRequests.LoginByIP(computerIp);

            //enter form by premission
            Form form = BaseService.GetDepartmentUser(user);

            form.BringToFront();
            form.TopMost = true;
            form.Focus();
            form.Show();
        }
Example #6
0
        private void AddWorkerToProject_Load(object sender, EventArgs e)
        {
            List <User> workers = UserRequests.getSimpleWorkers();

            if (workers != null)
            {
                checkedListBoxWorkers.DisplayMember = "UserName";
                foreach (User worker in workers)
                {
                    checkedListBoxWorkers.Items.Add(worker);
                }
            }
            List <Project> projects = TaskRequests.getAllProjects();

            if (projects != null)
            {
                cmbx_projects.DisplayMember = "ProjectName";
                foreach (Project project in projects)
                {
                    cmbx_projects.Items.Add(project);
                }
            }
        }
Example #7
0
        private void UpdateWorkerInDB(GridViewRowInfo newRowInfo)
        {
            User editWorker = getUpdateWorker();

            editWorker.UserId = (newRowInfo.Tag as User).UserId;
            try
            {
                if (UserRequests.UpdateUser(editWorker))
                {
                    UpdateWorkerInGridView();
                }
                else
                {
                    this.radGridView1.CloseEditor();
                }
            }
            catch
            {
                radGridView1.CloseEditor();
                RadMessageBox.SetThemeName(ThemeName);
                RadMessageBox.Show("update worker failed", "error", MessageBoxButtons.OK, RadMessageIcon.None, MessageBoxDefaultButton.Button1);
            }
        }
Example #8
0
        public IActionResult Index()
        {
            var userRequests = new UserRequests
            {
                Id         = 1,
                Reference  = "U001",
                Firstname  = "Gilles",
                Firstname2 = "Gilles",
                Lastname   = "Lautrou"
            };

            //Add
            _solr.Add(userRequests);
            _solr.Commit();

            //Get
            var results1 = _solr.Query(new SolrQueryByField("id", "1"));
            var results2 = _solr.Query(new SolrQueryByField("firstname2", "Gilles"));
            var results3 = _solr.Query(new SolrQueryByField("firstname2", "gilles"));
            var results4 = _solr.Query(new SolrQueryByField("firstname2", "lles"));

            return(View());
        }
        public async Task ReadTextMessageFromUpdateAsync(Update update)
        {
            User   senderUser;
            ChatId chatId;
            string updateMessage = string.Empty;

            try {
                updateMessage = update.Message.Text;
                updateMessage = updateMessage.StartsWith("/") ? updateMessage.ToLower() : updateMessage;
                senderUser    = update.Message.From;
                chatId        = update.Message.Chat.Id;
                DatabaseHandler.GetCurrentRequest(chatId.Identifier);
                // Update UI
                DataGridView.Invoke((MethodInvoker) delegate {
                    // From,Name,To,ReceiverName,Message
                    DataGridView.Rows.Add(chatId.Identifier, senderUser.FirstName, "BOT", "BOT", updateMessage);
                });

                if (updateMessage.StartsWith(BotConfigs.CMD_START))
                {
                    if (updateMessage.Equals(BotConfigs.CMD_START))  //----------------------------------------------------------------- '/start'
                    {
                        if (DatabaseHandler.UserExists(id: chatId.Identifier))
                        {
                            BotApiMethods.SendTextMessageAsync(chatId: chatId, message: BotConfigs.MSG_RECEIVE_CMD); //------------------------------------ Send "what can i do for u?"
                        }
                        else                                                                                         //---------------------------------------------------------------------------------------------------- Register new user
                        {
                            Image profileImage = await BotApiMethods.GetProfileImageAsync(senderUser.Id);

                            Model.NewUser newUser = new Model.NewUser(chatId, senderUser, profileImage);
                            if (DatabaseHandler.RegisterUser(newUser: newUser))
                            {
                                BotApiMethods.SendTextMessageAsync(chatId: chatId, message: BotConfigs.MSG_WELCOME); //------------------- Send "welcome message"
                            }
                            else
                            {
                                BotApiMethods.SendTextMessageAsync(chatId: chatId, message: BotConfigs.MSG_EXCEPTION);
                                // send to admin
                            }
                        }
                    }
                    else     //--------------------------------------------------------------------------------------------------------  '/start contactcode'

                    {
                        if (!DatabaseHandler.UserExists(chatId.Identifier))  // ------------------------------ Register new user
                        {
                            Image profileImage = await BotApiMethods.GetProfileImageAsync(senderUser.Id);

                            Model.NewUser newUser = new Model.NewUser(chatId, senderUser, profileImage);
                            if (!DatabaseHandler.RegisterUser(newUser: newUser))
                            {
                                BotApiMethods.SendTextMessageAsync(chatId: chatId, message: BotConfigs.MSG_EXCEPTION);//--------------------------------- sending a message to user that shows we are aware of the problem, we'll fix it soon
                                //------------------------------------------------------------------------------------------------------ send the problem to admin(s)
                                return;
                            }
                        }
                        string contactCode = updateMessage.Split(separator: ' ')[1]; //------ updateMessage = '/start contactCode'.splitBySpace ----> contactCode
                        if (DatabaseHandler.UserExists(contactCode: contactCode))
                        {
                            string fullName = DatabaseHandler.GetFullNameByContactCode(contactCode: contactCode);
                            BotApiMethods.SendTextMessageAsync(chatId: chatId, message: BotConfigs.MSG_SENDING_ANONYMOUS_TO.Replace("X", fullName));  //---- "you're going to send an anonymous message for 'fullName' please type your message"
                            DatabaseHandler.EditUserRequest(id: chatId.Identifier, userRequests: UserRequests.sendMessage, contactCode: contactCode); /* ---Update tbl_requests for chatId with request "sendMessage" and "contactCode",
                                                                                                                                                       * if user types anymessage and press enter, we will send it to target, (exception: user press BackButton)*/
                            // <REQUEST ADDED TO DATABASE, NOW WE NEED TO ANALYZE THE NEXT USER'S MESSAGE>
                        }
                        else
                        {
                            BotApiMethods.SendTextMessageAsync(chatId: chatId, message: BotConfigs.MSG_USER_NOT_FOUND);//--------------- user not found
                        }
                    }
                }
                else if (updateMessage.Equals(BotConfigs.CMD_LINK))     //------------------------------------------- Request contact links

                {
                    if (DatabaseHandler.IsContactNameSet(id: chatId.Identifier))                  //---------------------------------------------------------------------- If user's name is set to database
                    {
                        string links = BotApiMethods.CreateAnonymousLinks(id: chatId.Identifier); //-------------------------------------------- Receive links
                        BotApiMethods.SendTextMessageAsync(chatId: chatId, message: links);
                    }
                    else                                                                                                          //---------------------------------------------------------------------------------------------------------------------------------- before sending links, set user's name to database
                    {
                        if (DatabaseHandler.EditUserRequest(id: chatId.Identifier, userRequests: Model.UserRequests.contactCode)) // Add a request to database, user wants to enter his/her own name.
                        {
                            BotApiMethods.SendTextMessageAsync(chatId: chatId.Identifier, message: BotConfigs.MSG_GET_NAME, keyboard: Keyboards.Back);
                        }
                        else
                        {
                            BotApiMethods.SendTextMessageAsync(chatId: chatId, message: BotConfigs.MSG_EXCEPTION);
                            // send to admin
                        }
                    }
                }
                else if (updateMessage.Equals(BotConfigs.CMD_INBOX))     // ------------------- receive inbox Messages from database.

                {
                    System.Data.SqlClient.SqlDataReader userMessages = DatabaseHandler.GetAllMessagesFor(id: chatId.Identifier); // -- request to database for returning messages.
                    if (userMessages != null)
                    {
                        string messages      = string.Empty; // User messages.
                        int    messageNumber = 0;            // ------------------------ messages count.
                        while (userMessages.Read())
                        {
                            messages = messages + $"{++messageNumber}- {userMessages.GetString(0)}\n"; // Model -> 1- HereIsMessageOne ... \n 2- HereIsMessageTwo ... and etc..
                        }

                        userMessages.Close();
                        BotApiMethods.SendTextMessageAsync(chatId: chatId, message: $"{BotConfigs.MSG_SHOW_INBOX.Replace("X", messageNumber.ToString())}{messages}", keyboard: Keyboards.Inbox); // Send messages to user.
                    }
                }
                else if (updateMessage.StartsWith(BotConfigs.CMD_HELP))
                {
                    BotApiMethods.SendTextMessageAsync(chatId: chatId.Identifier, message: BotConfigs.MSG_HELP);
                }
                else if (updateMessage.StartsWith(BotConfigs.CMD_REPLY))
                {
                    BotApiMethods.SendTextMessageAsync(chatId: chatId.Identifier, message: BotConfigs.MSG_ENTER_REPLY_NUMBER, keyboard: Keyboards.Back);
                    DatabaseHandler.EditUserRequest(id: chatId.Identifier, userRequests: UserRequests.replyToMessage);
                }
                else if (updateMessage.Equals(BotConfigs.CMD_BACK))     // ---- We need to clean user's request from database for preventing future errors/exceptions.
                {
                    if (DatabaseHandler.EditUserRequest(id: chatId.Identifier, userRequests: UserRequests.empty))
                    {
                        BotApiMethods.SendTextMessageAsync(chatId: chatId.Identifier, message: BotConfigs.MSG_RECEIVE_CMD);
                    }
                }
                else     // --------------------------------------------------------------------------------------------------------------- Handling user requests like sendMessage, replyMessage and etc..
                {
                    UserRequests request = DatabaseHandler.GetCurrentRequest(id: chatId.Identifier);
                    if (request == UserRequests.empty)
                    {
                        return;
                    }
                    if (request == UserRequests.contactCode)  // If user requests the contact links.

                    {
                        if (DatabaseHandler.SetContactName(id: chatId.Identifier, name: updateMessage))
                        {
                            string links = BotApiMethods.CreateAnonymousLinks(id: chatId.Identifier); // --------- Receive links
                            BotApiMethods.SendTextMessageAsync(chatId: chatId, message: links);       //  Send links to user
                        }
                    }
                    else if (request == UserRequests.sendMessage)                                                                                                                                                                                /* If user requests to send anonymous Message to anotherone. We already saved the target's contactCode in database when
                                                                                                                                                                                                                                                  * setting up the sendMessage request(line 75)*/
                    {
                        string rContact = DatabaseHandler.GetContactCodeFromRequests(id: chatId.Identifier);                                                                                                                                     // receiver contactCode
                        long   rId      = DatabaseHandler.GetIdByContactCode(contactCode: rContact);                                                                                                                                             // reciver id
                        string rName    = DatabaseHandler.GetFullNameByContactCode(contactCode: rContact);                                                                                                                                       // receiver name
                        string rUser    = DatabaseHandler.GetUsernameById(id: rId);                                                                                                                                                              // receiver username
                        string sContact = DatabaseHandler.GetContactCode(id: chatId.Identifier);                                                                                                                                                 // sender contactCode
                        string sName    = DatabaseHandler.GetFullNameByContactCode(contactCode: sContact);                                                                                                                                       // sender name
                        string sUser    = DatabaseHandler.GetUsernameById(id: chatId.Identifier);                                                                                                                                                // sender username, we could also get it from senderUser object too(line 29)
                        DatabaseHandler.AddMessage(receiverId: rId, receiverName: rName, receiverContactCode: rContact, receiverUsername: rUser, message: updateMessage, senderId: chatId.Identifier, senderName: sName, senderUsername: sUser); // Add message to database.
                        DatabaseHandler.EditUserRequest(id: chatId.Identifier, userRequests: UserRequests.empty);                                                                                                                                // Clean senderUser request from database.

                        BotApiMethods.SendTextMessageAsync(chatId: chatId.Identifier, message: BotConfigs.MSG_SENT);                                                                                                                             // Notif sender that your message sent.
                        BotApiMethods.SendTextMessageAsync(chatId: rId, message: BotConfigs.MSG_NEW_MESSAGE);                                                                                                                                    // Notif receiver that you received a new message.
                    }
                    else if (request == UserRequests.replyToMessage)
                    {
                        /* We need to get all messages from database for current user
                         * then we have to pick the number which user told us want to reply it.(it saved in tbl_requests, column contactCode.
                         * after that, we find the senderId from database where selected message and receiverId equals to user info*/
                        int    messageNumber;
                        string messageToSearch = string.Empty;
                        if (int.TryParse(s: updateMessage, result: out messageNumber))
                        {
                            System.Data.SqlClient.SqlDataReader userMessages = DatabaseHandler.GetAllMessagesFor(id: chatId.Identifier);
                            int counter = 1;
                            while (userMessages.Read())
                            {
                                if (counter++ == messageNumber)
                                {
                                    messageToSearch = userMessages.GetString(0);
                                    break;
                                }
                            }

                            userMessages.Close();
                            if (!string.IsNullOrEmpty(value: messageToSearch))
                            {
                                long senderId = DatabaseHandler.GetSenderIdByMessage(receiverId: chatId.Identifier, message: messageToSearch);
                                if (senderId != 0)
                                {
                                    if (DatabaseHandler.EditUserRequest(id: chatId.Identifier, userRequests: UserRequests.pickReplyMessage, contactCode: senderId.ToString()))
                                    {
                                        BotApiMethods.SendTextMessageAsync(chatId: chatId.Identifier, message: BotConfigs.MSG_ENTER_REPLY_MESSAGE, keyboard: Keyboards.Back);
                                    }
                                }
                            }
                        }
                    }
                    else if (request == UserRequests.pickReplyMessage)
                    {
                        // NEXT UPDATE STARTS HERE. replyToMessage didnt tested.
                        long id;
                        if (long.TryParse(s: DatabaseHandler.GetContactCodeFromRequests(id: chatId.Identifier), result: out id))
                        {
                            BotApiMethods.SendTextMessageAsync(chatId: id, message: $"{BotConfigs.MSG_REPLY_ANSWERED}{updateMessage}");
                            BotApiMethods.SendTextMessageAsync(chatId: chatId.Identifier, message: BotConfigs.MSG_SENT);
                            DatabaseHandler.EditUserRequest(id: chatId.Identifier, userRequests: UserRequests.empty);
                        }
                    }
                }
            } catch (Exception ex) {
                ErrorHandler.SetError(source: "ReadMessageFromUpdateAsync", error: ex.Message);
                return;
            }
        }
Example #10
0
 public UpdateHours(User teamHead)
 {
     InitializeComponent();
     cmb_workers.DataSource    = UserRequests.GetWorkersByTeamhead(teamHead.UserId);
     cmb_workers.DisplayMember = "userName";
 }
Example #11
0
        public async Task <ActionResult <string> > GetAsync()
        {
            List <User> users = await UserRequests.GetAllUsersInACityOrWithinDistance("London", 50);

            return(JsonConvert.SerializeObject(users));;
        }
Example #12
0
        public async Task TestGetAllUsersInACityOrWithinDistance2()
        {
            List <User> allUsers = await UserRequests.GetAllUsersInACityOrWithinDistance("London", 30);

            Assert.AreEqual(allUsers.Count, 8);
        }
Example #13
0
        public async Task TestGetAllUserGivenDistanceFromCity1()
        {
            List <User> allUsers = await UserRequests.GetAllUserGivenDistanceFromCity("London", 50);

            Assert.AreEqual(allUsers.Count, 3);
        }
Example #14
0
        public async Task TestGetAllUsersListedInACity1()
        {
            List <User> allUsers = await UserRequests.GetAllUsersListedInACity("London");

            Assert.AreEqual(allUsers.Count, 6);
        }
Example #15
0
        private APIGatewayProxyResponse HandleCharacterAssignRequest(opendkpContext pDatabase, UserRequests pUserRequest, APIGatewayProxyRequest pRequest, CognitoUser pCognitoUser)
        {
            var vResponse = HttpHelper.HandleError("[UserRequestsLambda] Issue with DB or Query", 500);

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

            if (!string.IsNullOrWhiteSpace(pUserRequest.RequestDetails))
            {
                dynamic vCharacterId = JsonConvert.DeserializeObject(pUserRequest.RequestDetails);
                int     vId          = vCharacterId.characterId;

                //Determine if we've already got a character associated for this character Id
                var vFound = pDatabase.UserXCharacter.FirstOrDefault(x => x.ClientId.Equals(vClientId) && x.IdCharacter == vId);
                if (vFound != null)
                {
                    return(HttpHelper.HandleError("[UserRequestsLambda] This character has already been associated to an account", 500));
                }

                //Verify that there is not already an open pending request for the specific character
                //Note: It's possible someone else tries to claim someone elses character and this request would block them
                //TODO: Review note above, determine if anything should be done regarding this scenario
                var vPendingRequests = pDatabase.UserRequests.Where(x => x.ClientId.Equals(vClientId) &&
                                                                    x.RequestType == UserRequests.TYPE_CHARACTER_ASSIGN &&
                                                                    x.RequestStatus == UserRequests.STATUS_PENDING).ToList();
                foreach (var vRequest in vPendingRequests)
                {
                    dynamic vTmpCharId = JsonConvert.DeserializeObject(vRequest.RequestDetails);
                    int     vTmpId     = vTmpCharId.characterId;
                    if (vTmpId == vId)
                    {
                        return(HttpHelper.HandleError("[UserRequestsLambda] There is already a pending request for this character", 500));
                    }
                }
                pUserRequest.Requestor         = pCognitoUser.Username;
                pUserRequest.RequestStatus     = UserRequests.STATUS_PENDING;
                pUserRequest.RequestTimestamp  = DateTime.Now;
                pUserRequest.RequestApprover   = "NONE";
                pUserRequest.ReviewedTimestamp = DateTime.Now;
                pUserRequest.ClientId          = vClientId;
                pDatabase.Add(pUserRequest);
                pDatabase.SaveChanges();
                vResponse = HttpHelper.HandleResponse(pUserRequest, 200, true);
            }
            return(vResponse);
        }
Example #16
0
        private APIGatewayProxyResponse HandleRaidTickRequest(opendkpContext pDatabase, UserRequests pUserRequest, APIGatewayProxyRequest pRequest, CognitoUser pCognitoUser)
        {
            var vResponse = HttpHelper.HandleError("[UserRequestsLambda] Issue with DB or Query", 500);
            //We need to retrieve the ClientId for multitenancy purposes
            var vClientId = pRequest.Headers["clientid"];

            if (!string.IsNullOrWhiteSpace(pUserRequest.RequestDetails))
            {
                dynamic vModel = JsonConvert.DeserializeObject(pUserRequest.RequestDetails);
                //`{characterName:${this.CharacterName},tickId=${this.SelectedData.TickId},reason:${this.LogData}}`;
                string vCharacterName = vModel.characterName;
                int    vTickId        = vModel.tickId;
                string vReason        = vModel.reason;

                //First, lets make sure the Character Exists in the Database!
                Characters vCharacter = CharacterHelper.GetCharacterByName(pDatabase, vClientId, vCharacterName);
                if (vCharacter == null)
                {
                    return(HttpHelper.HandleError(string.Format("{0} does not exist in the database...", vCharacterName), 500));
                }

                //Second, lets confirm the Character is associated with the Account
                var vUser = pDatabase.UserXCharacter.FirstOrDefault(x => x.ClientId.Equals(vClientId) && x.IdCharacter == vCharacter.IdCharacter && x.User.Equals(pCognitoUser.Username));
                if (vUser == null)
                {
                    return(HttpHelper.HandleError(string.Format("{0} is not associated with your account", vCharacterName), 500));
                }

                //Determine if this character already has the raid tick
                var vFound = pDatabase.TicksXCharacters.FirstOrDefault(x => x.ClientId.Equals(vClientId) && x.IdCharacter == vCharacter.IdCharacter && x.IdTick == vTickId);
                if (vFound != null)
                {
                    return(HttpHelper.HandleError("You already have credit for this raid tick!", 500));
                }

                //Verify that there is not already an open pending request
                var vPendingRequests = pDatabase.UserRequests.Where(x => x.ClientId.Equals(vClientId) &&
                                                                    x.RequestType == UserRequests.TYPE_RAIDTICK &&
                                                                    x.RequestStatus == UserRequests.STATUS_PENDING).ToList();
                foreach (var vRequest in vPendingRequests)
                {
                    dynamic vTmpModel = JsonConvert.DeserializeObject(vRequest.RequestDetails);
                    string  vTmpName  = vTmpModel.characterName;
                    int     vTmpId    = vTmpModel.tickId;
                    if (vTmpId == vTickId && vCharacterName.Trim().Equals(vTmpName.Trim(), StringComparison.InvariantCultureIgnoreCase))
                    {
                        return(HttpHelper.HandleError("There is already a pending request for this character & raid tick!", 500));
                    }
                }

                pUserRequest.Requestor         = pCognitoUser.Username;
                pUserRequest.RequestStatus     = UserRequests.STATUS_PENDING;
                pUserRequest.RequestTimestamp  = DateTime.Now;
                pUserRequest.RequestApprover   = "NONE";
                pUserRequest.ReviewedTimestamp = DateTime.Now;
                pUserRequest.ClientId          = vClientId;
                pDatabase.Add(pUserRequest);
                pDatabase.SaveChanges();
                vResponse = HttpHelper.HandleResponse(pUserRequest, 200, true);
            }
            return(vResponse);
        }
Example #17
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());
            }
            var vResponse = HttpHelper.HandleError("[UserRequestsLambda] Unknown Backend error", 500);

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

            try
            {
                using (opendkpContext vDatabase = new opendkpContext())
                {
                    //For these operations, we should have the CognitoInfo user available to us
                    if (pRequest.Headers != null && !pRequest.Headers.ContainsKey("cognitoinfo"))
                    {
                        return(HttpHelper.HandleError("You do not have permission to perform this action", 401));
                    }

                    CognitoUser vCognitoUser = CognitoHelper.GetCognitoUser(pRequest.Headers["cognitoinfo"]);
                    if (pRequest.HttpMethod.Equals("GET", StringComparison.InvariantCultureIgnoreCase))
                    {
                        //If the GET request has PathParameter of the account, fetch all requests for given account
                        //Otherwise return all requests
                        if (pRequest != null && pRequest.PathParameters != null && pRequest.PathParameters.Count > 0)
                        {
                            string vAccountName = pRequest.PathParameters["account"];
                            vResponse = GetAccountRequests(vDatabase, vAccountName, vClientId);
                        }
                        else
                        {
                            vResponse = GetAllRequests(vDatabase, vClientId);
                        }
                    }

                    //PUT can come from any user, such as a standard user who wants to assign a character to themselves
                    //or credit for a raid tick.
                    if (pRequest.HttpMethod.Equals("PUT", StringComparison.InvariantCultureIgnoreCase))
                    {
                        if (vCognitoUser == null)
                        {
                            return(HttpHelper.HandleError("You do not have permission to perform this action", 401));
                        }
                        UserRequests vUserRequest = JsonConvert.DeserializeObject <UserRequests>(pRequest.Body);
                        if (vUserRequest.RequestType == UserRequests.TYPE_CHARACTER_ASSIGN)
                        {
                            vResponse = HandleCharacterAssignRequest(vDatabase, vUserRequest, pRequest, vCognitoUser);
                        }
                        if (vUserRequest.RequestType == UserRequests.TYPE_RAIDTICK)
                        {
                            vResponse = HandleRaidTickRequest(vDatabase, vUserRequest, pRequest, vCognitoUser);
                        }
                    }

                    //POST can only come from admins, need to make sure cognito Groups contains "DKP_ADMIN" or "SITE_ADMIN"
                    //This would be for approving or denying requests
                    if (pRequest.HttpMethod.Equals("POST", StringComparison.InvariantCultureIgnoreCase))
                    {
                        if (!CognitoHelper.IsDkpAdmin(pRequest) ||
                            !CognitoHelper.IsAuthorizedAdmin(vDatabase, pRequest))
                        {
                            return(HttpHelper.HandleError("You do not have permission to perform this action", 401));
                        }
                        vCognitoUser = CognitoHelper.GetCognitoUser(pRequest.Headers["cognitoinfo"]);

                        UserRequests vUserRequest = JsonConvert.DeserializeObject <UserRequests>(pRequest.Body);
                        if (vUserRequest.RequestType == UserRequests.TYPE_CHARACTER_ASSIGN)
                        {
                            vResponse = UpdateCharacterAssignRequest(vDatabase, vClientId, vUserRequest, vCognitoUser);
                        }
                        if (vUserRequest.RequestType == UserRequests.TYPE_RAIDTICK)
                        {
                            vResponse = UpdateRaidTickRequest(vDatabase, vUserRequest, vCognitoUser, vClientId);
                        }
                    }
                }
            }
            catch (Exception vException)
            {
                vResponse = HttpHelper.HandleError("[UserRequestsLambda] Issue with DB or Query: " + vException.Message, 500);
            }

            return(vResponse);
        }
Example #18
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 #19
0
        private APIGatewayProxyResponse UpdateRaidTickRequest(opendkpContext pDatabase, UserRequests pUserRequest, CognitoUser pCognitoUser, string pClientId)
        {
            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 vModel = JsonConvert.DeserializeObject(pUserRequest.RequestDetails);
                    //`{characterName:${this.CharacterName},tickId=${this.SelectedData.TickId},reason:${this.LogData}}`;
                    string vCharacterName = vModel.characterName;
                    int    vTickId        = vModel.tickId;
                    string vReason        = vModel.reason;

                    //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())
                    {
                        //First, lets make sure the Character Exists in the Database!
                        Characters vCharacter = CharacterHelper.GetCharacterByName(pDatabase, pClientId, vCharacterName);
                        if (vCharacter == null)
                        {
                            return(HttpHelper.HandleError(string.Format("{0} does not exist in the database...", vCharacterName), 500));
                        }

                        //Determine if this character already has the raid tick
                        var vFound = pDatabase.TicksXCharacters.FirstOrDefault(x => x.ClientId.Equals(pClientId) && x.IdCharacter == vCharacter.IdCharacter && x.IdTick == vTickId);
                        if (vFound != null)
                        {
                            return(HttpHelper.HandleError("You already have credit for this raid tick!", 500));
                        }

                        TicksXCharacters vTickToInsert = new TicksXCharacters();
                        vTickToInsert.IdCharacter = vCharacter.IdCharacter;
                        vTickToInsert.IdTick      = vTickId;
                        vTickToInsert.ClientId    = pClientId;
                        pDatabase.Add(vTickToInsert);

                        //Update the Request
                        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();

                        //Update Caches
                        int vStatus = CacheManager.UpdateSummaryCacheAsync(pClientId).GetAwaiter().GetResult();
                        Console.WriteLine("SummaryCacheResponse=" + vStatus);
                        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);
        }