Added assembly name and root namespace to project file; updated session and vlan classes with new properties; modified module manifest to reference DLL and updated exported cmdlets; corrected property name in address class.
This commit is contained in:
131
classlib/Helpers/SessionManager.cs
Normal file
131
classlib/Helpers/SessionManager.cs
Normal file
@@ -0,0 +1,131 @@
|
||||
namespace PS.IPAM.Helpers;
|
||||
using System;
|
||||
using System.Management.Automation;
|
||||
using System.Net.Http;
|
||||
using System.Net.Http.Headers;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using Newtonsoft.Json;
|
||||
using PS.IPAM;
|
||||
|
||||
public static class SessionManager
|
||||
{
|
||||
private static Session? _currentSession;
|
||||
|
||||
public static Session? CurrentSession
|
||||
{
|
||||
get => _currentSession;
|
||||
set => _currentSession = value;
|
||||
}
|
||||
|
||||
public static string TestSession()
|
||||
{
|
||||
if (_currentSession == null)
|
||||
{
|
||||
return "NoToken";
|
||||
}
|
||||
|
||||
if (_currentSession.Expires == null)
|
||||
{
|
||||
return "Valid";
|
||||
}
|
||||
|
||||
if (_currentSession.Expires < DateTime.Now)
|
||||
{
|
||||
return "Expired";
|
||||
}
|
||||
|
||||
return "Valid";
|
||||
}
|
||||
|
||||
public static async Task<Session> CreateSessionWithCredentials(
|
||||
string url,
|
||||
string appId,
|
||||
PSCredential credentials,
|
||||
bool ignoreSsl = false)
|
||||
{
|
||||
var uri = $"{url}/api/{appId}/user";
|
||||
var auth = Convert.ToBase64String(
|
||||
Encoding.UTF8.GetBytes($"{credentials.UserName}:{GetPassword(credentials)}"));
|
||||
|
||||
using var client = CreateHttpClient(ignoreSsl);
|
||||
client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
|
||||
client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Basic", auth);
|
||||
|
||||
var response = await client.PostAsync(uri, null);
|
||||
var content = await response.Content.ReadAsStringAsync();
|
||||
var jsonResponse = JsonConvert.DeserializeObject<dynamic>(content);
|
||||
|
||||
if (jsonResponse?.success != true)
|
||||
{
|
||||
throw new Exception(jsonResponse?.error?.ToString() ?? "Failed to create session");
|
||||
}
|
||||
|
||||
var token = jsonResponse.data.token.ToString();
|
||||
var expires = DateTime.Parse(jsonResponse.data.expires.ToString());
|
||||
|
||||
_currentSession = new Session(
|
||||
AuthType.credentials,
|
||||
token,
|
||||
appId,
|
||||
url,
|
||||
expires,
|
||||
credentials
|
||||
);
|
||||
|
||||
return _currentSession;
|
||||
}
|
||||
|
||||
public static Session CreateSessionWithToken(
|
||||
string url,
|
||||
string appId,
|
||||
string token)
|
||||
{
|
||||
_currentSession = new Session(
|
||||
AuthType.token,
|
||||
token,
|
||||
appId,
|
||||
url,
|
||||
null,
|
||||
null
|
||||
);
|
||||
|
||||
return _currentSession;
|
||||
}
|
||||
|
||||
public static void CloseSession()
|
||||
{
|
||||
_currentSession = null;
|
||||
}
|
||||
|
||||
private static string GetPassword(PSCredential credential)
|
||||
{
|
||||
var ptr = System.Runtime.InteropServices.Marshal.SecureStringToBSTR(credential.Password);
|
||||
try
|
||||
{
|
||||
return System.Runtime.InteropServices.Marshal.PtrToStringBSTR(ptr);
|
||||
}
|
||||
finally
|
||||
{
|
||||
System.Runtime.InteropServices.Marshal.ZeroFreeBSTR(ptr);
|
||||
}
|
||||
}
|
||||
|
||||
public static HttpClient CreateHttpClient(bool ignoreSsl = false, HttpMessageHandler? handler = null)
|
||||
{
|
||||
if (handler != null)
|
||||
{
|
||||
return new HttpClient(handler);
|
||||
}
|
||||
|
||||
if (ignoreSsl)
|
||||
{
|
||||
var sslHandler = new HttpClientHandler
|
||||
{
|
||||
ServerCertificateCustomValidationCallback = (message, cert, chain, errors) => true
|
||||
};
|
||||
return new HttpClient(sslHandler);
|
||||
}
|
||||
return new HttpClient();
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user