mirror of
https://github.com/LukeHagar/plexcsharp.git
synced 2025-12-06 12:37:46 +00:00
228 lines
7.4 KiB
C#
228 lines
7.4 KiB
C#
|
|
//------------------------------------------------------------------------------
|
|
// <auto-generated>
|
|
// This code was generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.
|
|
//
|
|
// Changes to this file may cause incorrect behavior and will be lost when
|
|
// the code is regenerated.
|
|
// </auto-generated>
|
|
//------------------------------------------------------------------------------
|
|
#nullable enable
|
|
namespace PlexAPI.Utils
|
|
{
|
|
using System;
|
|
using System.Reflection;
|
|
using System.Text;
|
|
|
|
internal static class SecuritySerializer
|
|
{
|
|
public static ISpeakeasyHttpClient Apply(ISpeakeasyHttpClient client, object security)
|
|
{
|
|
if (security == null)
|
|
{
|
|
return client;
|
|
}
|
|
|
|
client = new SpeakeasyHttpClient(client);
|
|
|
|
var props = security.GetType().GetProperties();
|
|
|
|
foreach (var prop in props)
|
|
{
|
|
var value = prop.GetValue(security, null);
|
|
|
|
if (value == null)
|
|
{
|
|
continue;
|
|
}
|
|
|
|
var metadata = prop.GetCustomAttribute<SpeakeasyMetadata>()?.GetSecurityMetadata();
|
|
if (metadata == null)
|
|
{
|
|
continue;
|
|
}
|
|
|
|
if (metadata.Option)
|
|
{
|
|
ApplyOption(ref client, value);
|
|
}
|
|
else if (metadata.Scheme)
|
|
{
|
|
if (metadata.SubType == "basic" && !Utilities.IsClass(value))
|
|
{
|
|
ApplyScheme(ref client, metadata, security);
|
|
return client;
|
|
}
|
|
else
|
|
{
|
|
ApplyScheme(ref client, metadata, value);
|
|
}
|
|
}
|
|
}
|
|
|
|
return client;
|
|
}
|
|
|
|
private static void ApplyOption(ref ISpeakeasyHttpClient client, object option)
|
|
{
|
|
var props = option.GetType().GetProperties();
|
|
|
|
foreach (var prop in props)
|
|
{
|
|
var value = prop.GetValue(option, null);
|
|
|
|
if (value == null)
|
|
{
|
|
continue;
|
|
}
|
|
|
|
var metadata = prop.GetCustomAttribute<SpeakeasyMetadata>()?.GetSecurityMetadata();
|
|
if (metadata == null || !metadata.Scheme)
|
|
{
|
|
continue;
|
|
}
|
|
|
|
ApplyScheme(ref client, metadata, value);
|
|
}
|
|
}
|
|
|
|
private static void ApplyScheme(
|
|
ref ISpeakeasyHttpClient client,
|
|
SpeakeasyMetadata.SecurityMetadata schemeMetadata,
|
|
object scheme
|
|
)
|
|
{
|
|
if (Utilities.IsClass(scheme))
|
|
{
|
|
if (schemeMetadata.Type == "http" && schemeMetadata.SubType == "basic")
|
|
{
|
|
ApplyBasicAuthScheme(ref client, scheme);
|
|
return;
|
|
}
|
|
|
|
var props = scheme.GetType().GetProperties();
|
|
|
|
foreach (var prop in props)
|
|
{
|
|
var value = prop.GetValue(scheme, null);
|
|
|
|
if (value == null)
|
|
{
|
|
continue;
|
|
}
|
|
|
|
var metadata = prop.GetCustomAttribute<SpeakeasyMetadata>()?.GetSecurityMetadata();
|
|
if (metadata == null || metadata.Name == "")
|
|
{
|
|
continue;
|
|
}
|
|
|
|
ApplySchemeValue(ref client, schemeMetadata, metadata, value);
|
|
}
|
|
}
|
|
else
|
|
{
|
|
ApplySchemeValue(ref client, schemeMetadata, schemeMetadata, scheme);
|
|
}
|
|
}
|
|
|
|
private static void ApplySchemeValue(
|
|
ref ISpeakeasyHttpClient client,
|
|
SpeakeasyMetadata.SecurityMetadata schemeMetadata,
|
|
SpeakeasyMetadata.SecurityMetadata valueMetadata,
|
|
object value
|
|
)
|
|
{
|
|
if (valueMetadata.Name == "")
|
|
{
|
|
return;
|
|
}
|
|
|
|
switch (schemeMetadata.Type)
|
|
{
|
|
case "apiKey":
|
|
switch (schemeMetadata.SubType)
|
|
{
|
|
case "header":
|
|
client.AddHeader(valueMetadata.Name, Utilities.ValueToString(value));
|
|
break;
|
|
case "query":
|
|
client.AddQueryParam(
|
|
valueMetadata.Name,
|
|
Utilities.ValueToString(value)
|
|
);
|
|
break;
|
|
case "cookie":
|
|
client.AddHeader(
|
|
"cookie",
|
|
$"{valueMetadata.Name}={Utilities.ValueToString(value)}"
|
|
);
|
|
break;
|
|
default:
|
|
throw new Exception(
|
|
$"Unknown apiKey subType: {schemeMetadata.SubType}"
|
|
);
|
|
}
|
|
break;
|
|
case "openIdConnect":
|
|
client.AddHeader(valueMetadata.Name, Utilities.PrefixBearer(Utilities.ValueToString(value)));
|
|
break;
|
|
case "oauth2":
|
|
client.AddHeader(valueMetadata.Name, Utilities.PrefixBearer(Utilities.ValueToString(value)));
|
|
break;
|
|
case "http":
|
|
switch (schemeMetadata.SubType)
|
|
{
|
|
case "bearer":
|
|
client.AddHeader(
|
|
valueMetadata.Name,
|
|
Utilities.PrefixBearer(Utilities.ValueToString(value))
|
|
);
|
|
break;
|
|
default:
|
|
throw new Exception($"Unknown http subType: {schemeMetadata.SubType}");
|
|
}
|
|
break;
|
|
default:
|
|
throw new Exception($"Unknown security type: {schemeMetadata.Type}");
|
|
}
|
|
}
|
|
|
|
private static void ApplyBasicAuthScheme(ref ISpeakeasyHttpClient client, object scheme)
|
|
{
|
|
var props = scheme.GetType().GetProperties();
|
|
|
|
string username = "";
|
|
string password = "";
|
|
|
|
foreach (var prop in props)
|
|
{
|
|
var value = prop.GetValue(scheme, null);
|
|
|
|
if (value == null)
|
|
{
|
|
continue;
|
|
}
|
|
|
|
var metadata = prop.GetCustomAttribute<SpeakeasyMetadata>()?.GetSecurityMetadata();
|
|
if (metadata == null || metadata.Name == "")
|
|
{
|
|
continue;
|
|
}
|
|
|
|
if (metadata.Name == "username")
|
|
{
|
|
username = Utilities.ValueToString(value);
|
|
}
|
|
else if (metadata.Name == "password")
|
|
{
|
|
password = Utilities.ValueToString(value);
|
|
}
|
|
}
|
|
|
|
var auth = Convert.ToBase64String(Encoding.UTF8.GetBytes($"{username}:{password}"));
|
|
client.AddHeader("Authorization", $"Basic {auth}");
|
|
}
|
|
}
|
|
}
|