using Newtonsoft.Json; using Newtonsoft.Json.Linq; using System; using System.Reflection.Metadata; using System.Text; using System.Text.RegularExpressions; using static System.Net.WebRequestMethods; namespace axwaycli { public class ServicesAxwayClient { /// /// API Manager Administrator (Super User): Regresa información de todas las organizaciones. /// Administrator/Usuarip de Organizacion: Regresa información de la organización perteneciente. /// /// Este parámetro es el Usuario/Contraseña encriptado en Base64. /// Regresa información de acuerdo al rol del usuario. public async Task getAllOrganizations(string ApiLogin = "") { var error = ""; try { var client = new HttpClient(); var request = new HttpRequestMessage(HttpMethod.Get, "https://manager.axwayon-gke.com/api/portal/v1.4/organizations"); request.Headers.Add("Accept", "application/json"); request.Headers.Add("Authorization", ApiLogin); var response = await client.SendAsync(request); response.EnsureSuccessStatusCode(); var JSONString = await response.Content.ReadAsStringAsync(); if (String.IsNullOrEmpty(JSONString)) { return ""; } else { return JSONString; } } catch (Exception e) { return e.Message; } } /// /// API Manager Administrator (Super User): Regresa información de todas las organizaciones, si existe el Id. /// Administrator/Usuario de Organizacion: Solo regresa información si el Id de la organización es a la que pertenece. /// /// Este parámetro es el Usuario/Contraseña encriptado en Base64. /// Id de la organización a buscar. /// Regresa información de acuerdo al rol del usuario. public async Task getOrganizationById(string ApiLogin = "", string OrganizationId = "") { var error = ""; string requesturi = "https://manager.axwayon-gke.com/api/portal/v1.4/organizations/" + OrganizationId; try { var client = new HttpClient(); var request = new HttpRequestMessage(HttpMethod.Get, requesturi); request.Headers.Add("Accept", "application/json"); request.Headers.Add("Authorization", ApiLogin); var response = await client.SendAsync(request); error = await response.Content.ReadAsStringAsync(); response.EnsureSuccessStatusCode(); var JSONString = await response.Content.ReadAsStringAsync(); if (String.IsNullOrEmpty(JSONString)) { return ""; } else { return JSONString; } } catch (Exception e) { string message = error + e.Message; message = message.Replace(Environment.NewLine, ""); message = message.Replace("\n", ""); message = message.Replace("\r", ""); return message; //return e.Message; } } /// /// API Manager Administrator (Super User): Crea una organizacion. /// Administrator/Usuarip de Organizacion: No tiene permiso. /// /// Este parámetro es el Usuario/Contraseña encriptado en Base64. /// Body con todos los campos de informacion, No incluir ID /// Regresa información de acuerdo al rol del usuario. public async Task addOrganization(string ApiLogin = "", string Body = "") { var error = ""; try { var client = new HttpClient(); var request = new HttpRequestMessage(HttpMethod.Post, "https://manager.axwayon-gke.com/api/portal/v1.4/organizations"); request.Headers.Add("Accept", "application/json"); request.Headers.Add("Authorization", ApiLogin); request.Content = new StringContent(Body, Encoding.UTF8, "application/json"); var response = await client.SendAsync(request); error = await response.Content.ReadAsStringAsync(); response.EnsureSuccessStatusCode(); var JSONString = await response.Content.ReadAsStringAsync(); if (String.IsNullOrEmpty(JSONString)) { return ""; } else { return JSONString; } } catch (Exception e) { string message = error + e.Message; message = message.Replace(Environment.NewLine, ""); message = message.Replace("\n", ""); message = message.Replace("\r", ""); return message; //return e.Message; } } /// /// API Manager Administrator (Super User): Crea una organizacion, es importante andar todos los campos, ya que los faltantes los pondrá como Null. /// /// Este parámetro es el Usuario/Contraseña encriptado en Base64. /// Body con todos los campos de informacion, No incluir ID /// public async Task UpdateOrganizationById(string ApiLogin = "", string OrganizationId = "", string Body = "") { var error = ""; string requesturi = "https://manager.axwayon-gke.com/api/portal/v1.4/organizations/" + OrganizationId; try { var client = new HttpClient(); var request = new HttpRequestMessage(HttpMethod.Put, requesturi); request.Headers.Add("Accept", "application/json"); request.Headers.Add("Authorization", ApiLogin); request.Content = new StringContent(Body, Encoding.UTF8, "application/json"); var response = await client.SendAsync(request); error = await response.Content.ReadAsStringAsync(); response.EnsureSuccessStatusCode(); var JSONString = await response.Content.ReadAsStringAsync(); if (String.IsNullOrEmpty(JSONString)) { return ""; } else { return JSONString; } } catch (Exception e) { string message = error + e.Message; message = message.Replace(Environment.NewLine, ""); message = message.Replace("\n", ""); message = message.Replace("\r", ""); return message; //return e.Message; } } /// /// API Manager Administrator (Super User): Regresa información de todos los usuarios. /// Administrator de Organizacion: Regresa información de todos los usuarios la organización perteneciente. /// Usuario de Organizacion: Solo regresa información del mismo usuario. /// /// /// Regresa información de acuerdo al rol del usuario. public async Task getAllUsers(string ApiLogin = "") { var error = ""; try { var client = new HttpClient(); var request = new HttpRequestMessage(HttpMethod.Get, "https://manager.axwayon-gke.com/api/portal/v1.4/users"); request.Headers.Add("Accept", "application/json"); request.Headers.Add("Authorization", ApiLogin); var response = await client.SendAsync(request); error = await response.Content.ReadAsStringAsync(); response.EnsureSuccessStatusCode(); var JSONString = await response.Content.ReadAsStringAsync(); if (String.IsNullOrEmpty(JSONString)) { return ""; } else { return JSONString; } } catch (Exception e) { string message = error + e.Message; message = message.Replace(Environment.NewLine, ""); message = message.Replace("\n", ""); message = message.Replace("\r", ""); return message; //return e.Message; } } /// /// API Manager Administrator (Super User): Regresa información de cual quier usuario si el Id existe. /// Administrator de Organizacion: Regresa información del usuario de la organización perteneciente si el Id existe. /// Usuario de Organizacion: Solo regresa información del mismo usuario, si coincide el id. /// /// Este parámetro es el Usuario/Contraseña encriptado en Base64. /// Id del usuario a buscar. /// Regresa información de acuerdo al rol del usuario. public async Task getUserById(string ApiLogin = "", string UserId = "") { var error = ""; string requesturi = "https://manager.axwayon-gke.com/api/portal/v1.4/users/" + UserId; try { var client = new HttpClient(); var request = new HttpRequestMessage(HttpMethod.Get, "https://manager.axwayon-gke.com/api/portal/v1.4/users"); request.Headers.Add("Accept", "application/json"); request.Headers.Add("Authorization", "Basic YXp1bGFkbWluOkF4d2F5MTIzIUF4d2F5MTIzIQ=="); var response = await client.SendAsync(request); error = await response.Content.ReadAsStringAsync(); response.EnsureSuccessStatusCode(); var JSONString = await response.Content.ReadAsStringAsync(); if (String.IsNullOrEmpty(JSONString)) { return ""; } else { return JSONString; } } catch (Exception e) { string message = error + e.Message; message = message.Replace(Environment.NewLine, ""); message = message.Replace("\n", ""); message = message.Replace("\r", ""); return message; //return e.Message; } } /// /// API Manager Administrator (Super User):Registra un usuario. /// Administrator/Usuarip de Organizacion: No tiene permiso. /// /// Este parámetro es el Usuario/Contraseña encriptado en Base64. /// Body con todos los campos de informacion, No incluir ID /// Regresa información de acuerdo al rol del usuario. public async Task addUser(string ApiLogin = "", string Body = "") { var error = ""; try { var client = new HttpClient(); var request = new HttpRequestMessage(HttpMethod.Post, "https://manager.axwayon-gke.com/api/portal/v1.4/users"); request.Headers.Add("Accept", "application/json"); request.Headers.Add("Authorization", ApiLogin); request.Content = new StringContent(Body, Encoding.UTF8, "application/json"); var response = await client.SendAsync(request); error = await response.Content.ReadAsStringAsync(); response.EnsureSuccessStatusCode(); var JSONString = await response.Content.ReadAsStringAsync(); if (String.IsNullOrEmpty(JSONString)) { return ""; } else { return JSONString; } } catch (Exception e) { string message = error + e.Message; message = message.Replace(Environment.NewLine, ""); message = message.Replace("\n", ""); message = message.Replace("\r", ""); return message; //return e.Message; } } public async Task addPasswordUser(string ApiLogin = "", string UserId = "") { var error = ""; string requesturi = "https://manager.axwayon-gke.com/api/portal/v1.4/users/" + UserId + "/changepassword"; string TempPassword = CreatePassword(9); try { var client = new HttpClient(); var request = new HttpRequestMessage(HttpMethod.Post, requesturi); request.Headers.Add("Accept", "application/json"); request.Headers.Add("Authorization", ApiLogin); var collection = new List>(); collection.Add(new("newPassword", TempPassword)); var content = new FormUrlEncodedContent(collection); request.Content = content; var response = await client.SendAsync(request); error = await response.Content.ReadAsStringAsync(); response.EnsureSuccessStatusCode(); var JSONString = await response.Content.ReadAsStringAsync(); if (String.IsNullOrEmpty(JSONString)) { return TempPassword; } else { return JSONString; } } catch (Exception e) { string message = error + e.Message; message = message.Replace(Environment.NewLine, ""); message = message.Replace("\n", ""); message = message.Replace("\r", ""); return message; //return e.Message; } } /// /// No utilizar, en desarollo, no devuelve info. /// /// Este parámetro es el Usuario/Contraseña encriptado en Base64. /// (Required) The report type, either 'app' or 'api' /// (Required) The starting date/time for the report /// (Required) The end date/time for the report. /// Nombre de la organización a buscar. /// Agrupar trafficSubset o individual trafficAll /// Numero de llamadas de API public async Task getMetricReport(string ApiLogin = "", string type = "", string from = "", string to = "", string OrganizationName = "", string subtype = "") { var error = ""; string requesturi = "https://manager.axwayon-gke.com/api/portal/v1.4/metrics/reports/" + type + "/summary/0?from=" + from + "&to=" + to + "&organization=" + OrganizationName + "&reportsubtype=" + subtype; try { var client = new HttpClient(); var request = new HttpRequestMessage(HttpMethod.Get, requesturi); request.Headers.Add("Authorization", ApiLogin); //request.Content = new StreamContent(File.OpenRead("\"\"")); var response = await client.SendAsync(request); error = await response.Content.ReadAsStringAsync(); response.EnsureSuccessStatusCode(); var JSONString = await response.Content.ReadAsStringAsync(); if (String.IsNullOrEmpty(JSONString)) { return ""; } else { return JSONString; } } catch (Exception e) { string message = error + e.Message; message = message.Replace(Environment.NewLine, ""); message = message.Replace("\n", ""); message = message.Replace("\r", ""); return message; //return e.Message; } } public async Task addOrgForm(string ApiLogin = "", string Formulario = "") { var error = ""; string OrgId; string OrgName; string User1Id; string User1Login; string User1Password; string User2Id = ""; string User2Login = ""; string User2Password = ""; try { var Form = JObject.Parse(Formulario); var orgForm = (JObject)Form["organizacion"]; var userAdminForm = (JObject)Form["usr_admin"]; OrganizacionApi OrgBody = new OrganizacionApi { name = (string)orgForm["name_org_axway"], email = (string)orgForm["email_org_axway"], restricted = "false", enabled = "true", development = "true", phone = (string)orgForm["phone_org_axway"], description = (string)orgForm["description_org_axway"] }; //Serializar el nuevo JSON string OrgP2 = JsonConvert.SerializeObject(OrgBody); //Creando organizacion string OrgP3 = await addOrganization(ApiLogin, OrgP2); //Valida si existe errores bool ValidaOrg = OrgP3.Like("%400 (Bad Request)%"); if (ValidaOrg == true) { return "Error al crear organizacion: " + OrgP3; } dynamic OrgP4 = JsonConvert.DeserializeObject(OrgP3); // Console.WriteLine("Organizacion creada"); //Extraer id de la organizacion para asignarlo a los usuarios OrgId = OrgP4.id; OrgName = OrgP4.name; //Armar usuario admin if (String.IsNullOrEmpty((string)userAdminForm["user_useradm_axway"])) { return "Falta informacion en el usuario administrador"; } else { //Crear usuario UsuarioApi UserBodyAdmin = new UsuarioApi { organizationId = OrgId, name = (string)userAdminForm["name_useradm_axway"], description = (string)userAdminForm["description_useradm_axway"], loginName = (string)userAdminForm["user_useradm_axway"], email = (string)userAdminForm["email_useradm_axway"], phone = (string)userAdminForm["phone_useradm_axway"], mobile = (string)userAdminForm["mobilephone_useradm_axway"], role = "oadmin", enabled = "true", state = "approved", type = "internal", }; string Usuario = JsonConvert.SerializeObject(UserBodyAdmin); string UAdmin = await addUser(ApiLogin, Usuario); //Valida si existe errores bool ValidaU1 = UAdmin.Like("%400 (Bad Request)%"); if (ValidaU1 == true) { return "Error al crear usuario consulta: " + UAdmin; } dynamic User1Creado = JsonConvert.DeserializeObject(UAdmin); User1Id = User1Creado.id; User1Login = User1Creado.loginName; User1Password = await addPasswordUser(ApiLogin, User1Id); } OrgCreada FormCreado = new OrgCreada(); FormCreado.OrgId = OrgId; FormCreado.OrgName = OrgName; FormCreado.User1Id = User1Id; FormCreado.User1Login = User1Login; FormCreado.User1Password = User1Password; FormCreado.User2Id = User2Id; FormCreado.User2Login = User2Login; FormCreado.User2Password = User2Password; FormCreado.WebURL = "https://manager.axwayon-gke.com/"; string OrgFinal = JsonConvert.SerializeObject(FormCreado); return OrgFinal; } catch (Exception e) { string message = error + e.Message; message = message.Replace(Environment.NewLine, ""); message = message.Replace("\n", ""); message = message.Replace("\r", ""); return message; //return e.Message; } } public string CreatePassword(int length) { const string valid = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890!#$%&@*&()_-"; StringBuilder res = new StringBuilder(); Random rnd = new Random(); while (0 < length--) { res.Append(valid[rnd.Next(valid.Length)]); } return res.ToString(); } } public class OrganizacionApi { public string name { get; set; } public string description { get; set; } public string email { get; set; } public string restricted { get; set; } public string phone { get; set; } public string enabled { get; set; } public string development { get; set; } public string isTrial { get; set; } } public class UsuarioApi { public string organizationId { get; set; } public string name { get; set; } public string description { get; set; } public string loginName { get; set; } public string email { get; set; } public string phone { get; set; } public string mobile { get; set; } public string role { get; set; } public string enabled { get; set; } public string state { get; set; } public string type { get; set; } } public class OrgCreada { public string OrgId { get; set; } public string OrgName { get; set; } public string User1Id { get; set; } public string User1Login { get; set; } public string User1Password { get; set; } public string User2Id { get; set; } public string User2Login { get; set; } public string User2Password { get; set; } public string WebURL { get; set; } } public static class MyStringExtensions { public static bool Like(this string toSearch, string toFind) { return new Regex(@"\A" + new Regex(@"\.|\$|\^|\{|\[|\(|\||\)|\*|\+|\?|\\").Replace(toFind, ch => @"\" + ch).Replace('_', '.').Replace("%", ".*") + @"\z", RegexOptions.Singleline).IsMatch(toSearch); } } }