132 lines
3.7 KiB
C#
132 lines
3.7 KiB
C#
using CPF.Mac.CoreFoundation;
|
|
using CPF.Mac.ObjCRuntime;
|
|
using System;
|
|
using System.Runtime.InteropServices;
|
|
|
|
namespace CPF.Mac.CoreServices
|
|
{
|
|
public class CFHTTPAuthentication : CFType, INativeObject, IDisposable
|
|
{
|
|
internal IntPtr handle;
|
|
|
|
public IntPtr Handle
|
|
{
|
|
get
|
|
{
|
|
CheckHandle();
|
|
return handle;
|
|
}
|
|
}
|
|
|
|
public bool IsValid => CFHTTPAuthenticationIsValid(Handle, IntPtr.Zero);
|
|
|
|
public bool RequiresAccountDomain => CFHTTPAuthenticationRequiresAccountDomain(Handle);
|
|
|
|
public bool RequiresOrderedRequests => CFHTTPAuthenticationRequiresOrderedRequests(Handle);
|
|
|
|
public bool RequiresUserNameAndPassword => CFHTTPAuthenticationRequiresUserNameAndPassword(Handle);
|
|
|
|
internal CFHTTPAuthentication(IntPtr handle)
|
|
: this(handle, owns: false)
|
|
{
|
|
}
|
|
|
|
internal CFHTTPAuthentication(IntPtr handle, bool owns)
|
|
{
|
|
if (!owns)
|
|
{
|
|
CFObject.CFRetain(handle);
|
|
}
|
|
this.handle = handle;
|
|
}
|
|
|
|
[DllImport("/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/CFNetwork", EntryPoint = "CFHTTPAuthenticationGetTypeID")]
|
|
public static extern int GetTypeID();
|
|
|
|
~CFHTTPAuthentication()
|
|
{
|
|
Dispose(disposing: false);
|
|
}
|
|
|
|
protected void CheckHandle()
|
|
{
|
|
if (handle == IntPtr.Zero)
|
|
{
|
|
throw new ObjectDisposedException(GetType().Name);
|
|
}
|
|
}
|
|
|
|
public void Dispose()
|
|
{
|
|
Dispose(disposing: true);
|
|
GC.SuppressFinalize(this);
|
|
}
|
|
|
|
protected virtual void Dispose(bool disposing)
|
|
{
|
|
if (handle != IntPtr.Zero)
|
|
{
|
|
CFObject.CFRelease(handle);
|
|
handle = IntPtr.Zero;
|
|
}
|
|
}
|
|
|
|
[DllImport("/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/CFNetwork")]
|
|
private static extern IntPtr CFHTTPAuthenticationCreateFromResponse(IntPtr allocator, IntPtr response);
|
|
|
|
public static CFHTTPAuthentication CreateFromResponse(CFHTTPMessage response)
|
|
{
|
|
if (response.IsRequest)
|
|
{
|
|
throw new InvalidOperationException();
|
|
}
|
|
IntPtr value = CFHTTPAuthenticationCreateFromResponse(IntPtr.Zero, response.Handle);
|
|
if (value == IntPtr.Zero)
|
|
{
|
|
return null;
|
|
}
|
|
return new CFHTTPAuthentication(value);
|
|
}
|
|
|
|
[DllImport("/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/CFNetwork")]
|
|
private static extern bool CFHTTPAuthenticationIsValid(IntPtr handle, IntPtr error);
|
|
|
|
[DllImport("/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/CFNetwork")]
|
|
private static extern bool CFHTTPAuthenticationAppliesToRequest(IntPtr handle, IntPtr request);
|
|
|
|
public bool AppliesToRequest(CFHTTPMessage request)
|
|
{
|
|
if (!request.IsRequest)
|
|
{
|
|
throw new InvalidOperationException();
|
|
}
|
|
return CFHTTPAuthenticationAppliesToRequest(Handle, request.Handle);
|
|
}
|
|
|
|
[DllImport("/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/CFNetwork")]
|
|
private static extern bool CFHTTPAuthenticationRequiresAccountDomain(IntPtr handle);
|
|
|
|
[DllImport("/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/CFNetwork")]
|
|
private static extern bool CFHTTPAuthenticationRequiresOrderedRequests(IntPtr handle);
|
|
|
|
[DllImport("/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/CFNetwork")]
|
|
private static extern bool CFHTTPAuthenticationRequiresUserNameAndPassword(IntPtr handle);
|
|
|
|
[DllImport("/System/Library/Frameworks/CoreServices.framework/Frameworks/CFNetwork.framework/CFNetwork")]
|
|
private static extern IntPtr CFHTTPAuthenticationCopyMethod(IntPtr handle);
|
|
|
|
public string GetMethod()
|
|
{
|
|
IntPtr value = CFHTTPAuthenticationCopyMethod(Handle);
|
|
if (value == IntPtr.Zero)
|
|
{
|
|
return null;
|
|
}
|
|
using (CFString x = new CFString(value))
|
|
{
|
|
return x;
|
|
}
|
|
}
|
|
}
|
|
}
|