using System; using System.Collections.Generic; using Amazon.Lambda.Core; using Amazon.Lambda.APIGatewayEvents; using Newtonsoft.Json; using MySqlConnector; using Newtonsoft.Json.Linq; using System.Data; using classes; namespace PMF { public class Registration: Pmfbase { MySqlDataReader _reader = null; public APIGatewayProxyResponse RegisterUser(APIGatewayProxyRequest request, ILambdaContext context) { //Partial details entry. APIGatewayProxyResponse response; Dictionary dict = new Dictionary(); string statement = "DB::RegisterUser"; string cognitoUuid = ""; try { string validationMessage = string.Empty; if (request != null && request.Body != null) { var data = JsonConvert.DeserializeObject(request.Body); var validRequest = Helper.ValidateRequestParameters(ref validationMessage, data, "strCognitoUuid", "strEmail", "strName", "strSurname", "strIdType", "strMobileNumber"); if (validRequest) { cognitoUuid = Helper.CleanInput(data["strCognitoUuid"]?.ToString()); var email = data["strEmail"].ToString(); if (String.Equals(data["strIdType"].ToString(), "2")) { string idErrors = string.Empty; var validSaId = Helper.ValidateRequestParameters(ref idErrors, data, "strIdNumber"); if (!validSaId) { response = HttpService.CreateResponse(400, payload: idErrors); } } //Only save if this is available if (Helper.IsAValidEmail(email)) { if (_con.State == ConnectionState.Closed) _con.Open(); using var cmd = new MySqlCommand(); cmd.Connection = _con; statement = $"SELECT * FROM user WHERE strEmail = '{email}' AND strCognitoUuid is not null"; cmd.CommandText = statement; cmd.ExecuteNonQuery(); _reader = cmd.ExecuteReader(); if (!_reader.HasRows) { _reader.Close(); //check if user has already been created //string sqlCheckForUser = $"SELECT * FROM user WHERE strCognitoUuid = '{cognitoUuid}' AND strCognitoUuid is not null"; //cmd.CommandText = sqlCheckForUser; //cmd.ExecuteNonQuery(); //_reader = cmd.ExecuteReader(); _reader.Close(); statement = $"INSERT INTO user (strCognitoUuid, strName, strSurname, strEmail, strIdType, strIdNumber, strMobileNumber, blnActive, strFirstUser, dtFirstEdit) VALUES ('{Helper.CleanInput(data["strCognitoUuid"].ToString())}', '{Helper.CleanInput(data["strName"].ToString())}', '{Helper.CleanInput(data["strSurname"].ToString())}','{Helper.CleanInput(data["strEmail"].ToString())}','{Helper.CleanInput(data["strIdType"].ToString())}','{Helper.CleanInput(data["strIdNumber"].ToString())}','{Helper.CleanInput(data["strMobileNumber"].ToString())}',1,'{Helper.CleanInput(data["strName"].ToString())}', NOW() )"; cmd.CommandText = statement; cmd.ExecuteNonQuery(); string sqlSelectNewUser = $"SELECT * FROM user WHERE strCognitoUuid = '{cognitoUuid}'"; cmd.CommandText = sqlSelectNewUser; cmd.ExecuteNonQuery(); _reader = cmd.ExecuteReader(); if (_reader.HasRows) { while (_reader.Read()) { //Watch out when the db changes dict.Add(_reader.GetName(2), _reader.GetValue(2).ToString()); //strName dict.Add(_reader.GetName(3), _reader.GetValue(3).ToString()); //strSurname dict.Add(_reader.GetName(5), _reader.GetValue(5).ToString()); //strEmail } _reader.Close(); } else { response = HttpService.CreateResponse(500, payload: "Error creating user"); _logger.WriteLog(cognitoUuid, statement, response.Body.ToString(), "DB"); return response; } } else { response = HttpService.CreateResponse(200, payload: "User Email Already exists"); _logger.WriteLog(cognitoUuid, statement, response.Body.ToString(), "DB"); return response; } } else { response = HttpService.CreateResponse(400, payload: "Invalid Email"); _logger.WriteLog(cognitoUuid, statement, response.Body.ToString(), "DB"); return response; } } else { _logger.LogMessage(context, $"Processing request failed {validationMessage}"); response = HttpService.CreateResponse(400, payload: $"{validationMessage}"); return response; } } else { response = HttpService.CreateResponse(400, payload: "No parameters provided"); _logger.WriteLog(cognitoUuid, statement, response.Body.ToString(), "DB"); return response; } if (dict.Count > 0) { response = HttpService.CreateResponse(201, payload: dict); } else { response = HttpService.CreateResponse(500, payload: "Internal error: User was not created"); } _logger.WriteLog(cognitoUuid, statement, response.Body.ToString(), "DB"); } catch (Exception ex) { response = HttpService.CreateResponse(500, payload: ex.Message); _logger.WriteLog(cognitoUuid, statement, response.Body.ToString(), "DB"); return response; } finally { if (_reader != null) _reader.Close(); if (_con != null || _con.State == ConnectionState.Open) _con.Close(); } return response; } } }