using System; using System.Collections.Generic; using Amazon.Lambda.Core; using Amazon.Lambda.APIGatewayEvents; using MySqlConnector; using System.Data; using classes; namespace PMF { public class UserDetails: Pmfbase { MySqlDataReader _reader; public APIGatewayProxyResponse GetUserDetails(APIGatewayProxyRequest request, ILambdaContext context) { APIGatewayProxyResponse response; Dictionary dict = new Dictionary(); Dictionary dictIds = new Dictionary(); string statement = "DB::GetUserDetails"; string strCognitoUuid = ""; string userId = ""; try { if (!Helper.IsRequestEmpty(request)) { if (request.QueryStringParameters.ContainsKey("userId")) { string validationMessage = string.Empty; var validCognitoUuidRequest = Helper.ValidateRequestParameters(ref validationMessage, request.QueryStringParameters, "userId"); if (validCognitoUuidRequest) { userId = Helper.CleanInput(request.QueryStringParameters["userId"]); statement = "SELECT * FROM `user` WHERE UserID = '" + userId + "'"; } if (!validCognitoUuidRequest && validationMessage.Length > 0) return HttpService.CreateResponse(400, payload: validationMessage); } else if (request.QueryStringParameters.ContainsKey("strCognitoUuid")) { string validationMessageId = string.Empty; var validIdRequest = Helper.ValidateRequestParameters(ref validationMessageId, request.QueryStringParameters, "strCognitoUuid"); if (validIdRequest) { strCognitoUuid = Helper.CleanInput(request.QueryStringParameters["strCognitoUuid"]); statement = "SELECT * FROM `user` WHERE strCognitoUuid = '" + strCognitoUuid + "'"; } if (!validIdRequest && validationMessageId.Length > 0) return HttpService.CreateResponse(400, payload: validationMessageId); } else if (request.QueryStringParameters.ContainsKey("strEmail")) { string strEmail = Helper.CleanInput(request.QueryStringParameters["strEmail"]); if (Helper.IsAValidEmail(strEmail)) { statement = "SELECT * FROM `user` WHERE strEmail = '" + strEmail + "'"; } else { return HttpService.CreateResponse(400, payload: "Email is invalid"); } } else { return HttpService.CreateResponse(400, payload: "Please supply a CognitoUuid or UserId or Email Address"); } if (_con.State == ConnectionState.Closed) _con.Open(); var cmd = new MySqlCommand(); cmd.Connection = _con; cmd.CommandText = statement; cmd.ExecuteNonQuery(); _reader = cmd.ExecuteReader(); if (_reader.HasRows) { while (_reader.Read()) { userId = _reader.GetValue(0).ToString(); dict.Add(_reader.GetName(0), _reader.GetValue(0).ToString()); //userID dict.Add(_reader.GetName(2), _reader.GetValue(2).ToString()); //strName dict.Add(_reader.GetName(3), _reader.GetValue(3).ToString()); //strSurname dict.Add(_reader.GetName(4), _reader.GetValue(4).ToString()); //strIdType dict.Add(_reader.GetName(5), _reader.GetValue(5).ToString()); //strEmail dict.Add(_reader.GetName(6), _reader.GetValue(6).ToString()); //strRole dict.Add(_reader.GetName(7), _reader.GetValue(7).ToString()); //strMobileNumber dict.Add(_reader.GetName(8), _reader.GetValue(8).ToString()); //strBusinessAccount dict.Add(_reader.GetName(9), _reader.GetValue(9).ToString()); //strTermsAndConditions dict.Add(_reader.GetName(10), _reader.GetValue(10).ToString()); //txtBillToAddress dict.Add(_reader.GetName(11), _reader.GetValue(11).ToString()); //txtNotes dict.Add("dtDateCaptured", _reader.GetValue(13).ToString()); //datecaptured dict.Add(_reader.GetName(14), _reader.GetValue(14).ToString()); //strIdNumber dict.Add(_reader.GetName(17), _reader.GetValue(17).ToString()); //strLastEdit } _reader.Close(); string sqlSelectIds = $"SELECT * FROM `userIdNumber` WHERE refUserID = {userId}"; cmd.CommandText = sqlSelectIds; cmd.ExecuteNonQuery(); bool maxIdCount = false; var idReader = cmd.ExecuteReader(); List ids = new List { }; if (idReader.HasRows) { while (idReader.Read()) { ids.Add(new { strName = idReader.GetValue(2).ToString(), strSurname = idReader.GetValue(3).ToString(), dtDateCaptured = idReader.GetValue(9).ToString(), strIDNumber = idReader.GetValue(5).ToString(), strIdType = idReader.GetValue(4).ToString() }); } idReader.Close(); } if (ids.Count >= 5) maxIdCount = true; dict.Add("maxNumberIds", maxIdCount.ToString()); var responseBody = new { data = dict, additionalIds = ids }; response = HttpService.CreateResponse(200, payload: responseBody); //_logger.WriteLog(strCognitoUuid, statement, response.Body.ToString(), "DB"); excess logs unnessesary return response; } else { if (request.QueryStringParameters.ContainsKey("email")) { _reader.Close(); var email = request.QueryStringParameters["email"]; if (Helper.IsAValidEmail(email)) { statement = "SELECT * FROM `user` WHERE strEmail = '" + email + "'"; cmd = new MySqlCommand(statement, _con); _reader = cmd.ExecuteReader(); if (_reader.HasRows) { while (_reader.Read()) { userId = _reader.GetValue(0).ToString(); dict.Add(_reader.GetName(0), _reader.GetValue(0).ToString()); //userID dict.Add(_reader.GetName(2), _reader.GetValue(2).ToString()); //strName dict.Add(_reader.GetName(3), _reader.GetValue(3).ToString()); //strSurname dict.Add(_reader.GetName(4), _reader.GetValue(4).ToString()); //strIdType dict.Add(_reader.GetName(5), _reader.GetValue(5).ToString()); //strEmail dict.Add(_reader.GetName(6), _reader.GetValue(6).ToString()); //strRole dict.Add(_reader.GetName(7), _reader.GetValue(7).ToString()); //strMobileNumber dict.Add(_reader.GetName(8), _reader.GetValue(8).ToString()); //strBusinessAccount dict.Add(_reader.GetName(9), _reader.GetValue(9).ToString()); //strTermsAndConditions dict.Add(_reader.GetName(10), _reader.GetValue(10).ToString()); //txtBillToAddress dict.Add(_reader.GetName(11), _reader.GetValue(11).ToString()); //txtNotes dict.Add("dtDateCaptured", _reader.GetValue(13).ToString()); //datecaptured dict.Add(_reader.GetName(14), _reader.GetValue(14).ToString()); //strIdNumber dict.Add(_reader.GetName(17), _reader.GetValue(17).ToString()); //strLastEdit } _reader.Close(); if (dict.Count == 15) { return HttpService.CreateResponse(200, payload: "Profile update required", forcedResult: false); } else { return HttpService.CreateResponse(200, payload: "Cognito ID update required", forcedResult: false); } } } else { if (!Helper.IsAValidEmail(email)) return HttpService.CreateResponse(400, payload: "The email supplied is not valid"); } } response = HttpService.CreateResponse(200, payload: "User does not exist", forcedResult: false); _logger.WriteLog(strCognitoUuid, statement, response.Body.ToString(), "DB"); return response; } } else { _logger.LogMessage(context, $"Processing request failed invalid request"); response = HttpService.CreateResponse(400, payload: "No parameters provided"); return response; } } catch (Exception ex) { _logger.LogMessage(context, "Processing request failed: " + ex.Message); _logger.WriteLog(strCognitoUuid, statement, ex.Message, "DB"); return HttpService.CreateResponse(500, exception: ex); } finally { if (_reader != null) _reader.Close(); if (_con != null || _con.State == ConnectionState.Open) _con.Close(); } } } }