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);
}
}
}