138 lines
3.3 KiB
C#
138 lines
3.3 KiB
C#
using System;
|
|
using System.Collections;
|
|
|
|
namespace System.Net
|
|
{
|
|
// Token: 0x02000211 RID: 529
|
|
internal class DigestClient : IAuthenticationModule
|
|
{
|
|
// Token: 0x170005E8 RID: 1512
|
|
// (get) Token: 0x06001203 RID: 4611 RVA: 0x00035C6C File Offset: 0x00033E6C
|
|
private static Hashtable Cache
|
|
{
|
|
get
|
|
{
|
|
object syncRoot = DigestClient.cache.SyncRoot;
|
|
lock (syncRoot)
|
|
{
|
|
DigestClient.CheckExpired(DigestClient.cache.Count);
|
|
}
|
|
return DigestClient.cache;
|
|
}
|
|
}
|
|
|
|
// Token: 0x06001204 RID: 4612 RVA: 0x00035CC8 File Offset: 0x00033EC8
|
|
private static void CheckExpired(int count)
|
|
{
|
|
if (count < 10)
|
|
{
|
|
return;
|
|
}
|
|
DateTime dateTime = DateTime.MaxValue;
|
|
DateTime now = DateTime.Now;
|
|
ArrayList arrayList = null;
|
|
foreach (object obj in DigestClient.cache.Keys)
|
|
{
|
|
int num = (int)obj;
|
|
DigestSession digestSession = (DigestSession)DigestClient.cache[num];
|
|
if (digestSession.LastUse < dateTime && (digestSession.LastUse - now).Ticks > 6000000000L)
|
|
{
|
|
dateTime = digestSession.LastUse;
|
|
if (arrayList == null)
|
|
{
|
|
arrayList = new ArrayList();
|
|
}
|
|
arrayList.Add(num);
|
|
}
|
|
}
|
|
if (arrayList != null)
|
|
{
|
|
foreach (object obj2 in arrayList)
|
|
{
|
|
int num2 = (int)obj2;
|
|
DigestClient.cache.Remove(num2);
|
|
}
|
|
}
|
|
}
|
|
|
|
// Token: 0x06001205 RID: 4613 RVA: 0x00035E34 File Offset: 0x00034034
|
|
public Authorization Authenticate(string challenge, WebRequest webRequest, ICredentials credentials)
|
|
{
|
|
if (credentials == null || challenge == null)
|
|
{
|
|
return null;
|
|
}
|
|
string text = challenge.Trim();
|
|
if (text.ToLower().IndexOf("digest") == -1)
|
|
{
|
|
return null;
|
|
}
|
|
HttpWebRequest httpWebRequest = webRequest as HttpWebRequest;
|
|
if (httpWebRequest == null)
|
|
{
|
|
return null;
|
|
}
|
|
int num = httpWebRequest.Address.GetHashCode() ^ credentials.GetHashCode();
|
|
DigestSession digestSession = (DigestSession)DigestClient.Cache[num];
|
|
bool flag = digestSession == null;
|
|
if (flag)
|
|
{
|
|
digestSession = new DigestSession();
|
|
}
|
|
if (!digestSession.Parse(challenge))
|
|
{
|
|
return null;
|
|
}
|
|
if (flag)
|
|
{
|
|
DigestClient.Cache.Add(num, digestSession);
|
|
}
|
|
return digestSession.Authenticate(webRequest, credentials);
|
|
}
|
|
|
|
// Token: 0x06001206 RID: 4614 RVA: 0x00035EE8 File Offset: 0x000340E8
|
|
public Authorization PreAuthenticate(WebRequest webRequest, ICredentials credentials)
|
|
{
|
|
HttpWebRequest httpWebRequest = webRequest as HttpWebRequest;
|
|
if (httpWebRequest == null)
|
|
{
|
|
return null;
|
|
}
|
|
if (credentials == null)
|
|
{
|
|
return null;
|
|
}
|
|
int num = httpWebRequest.Address.GetHashCode() ^ credentials.GetHashCode();
|
|
DigestSession digestSession = (DigestSession)DigestClient.Cache[num];
|
|
if (digestSession == null)
|
|
{
|
|
return null;
|
|
}
|
|
return digestSession.Authenticate(webRequest, credentials);
|
|
}
|
|
|
|
// Token: 0x170005E9 RID: 1513
|
|
// (get) Token: 0x06001207 RID: 4615 RVA: 0x00035F48 File Offset: 0x00034148
|
|
public string AuthenticationType
|
|
{
|
|
get
|
|
{
|
|
return "Digest";
|
|
}
|
|
}
|
|
|
|
// Token: 0x170005EA RID: 1514
|
|
// (get) Token: 0x06001208 RID: 4616 RVA: 0x00035F50 File Offset: 0x00034150
|
|
public bool CanPreAuthenticate
|
|
{
|
|
get
|
|
{
|
|
return true;
|
|
}
|
|
}
|
|
|
|
// Token: 0x04000FAF RID: 4015
|
|
private static readonly Hashtable cache = Hashtable.Synchronized(new Hashtable());
|
|
}
|
|
}
|