Compare commits
8 Commits
8eabf99616
...
39e78821cf
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
39e78821cf | ||
|
|
152b4f7cff | ||
|
|
987cecba4c | ||
|
|
dcaf510bd3 | ||
|
|
71f0919bce | ||
|
|
5062930d5b | ||
|
|
c233ab0ed7 | ||
|
|
0346af5b29 |
@@ -1,6 +1,7 @@
|
||||
using DigitalData.Core.Legacy.Client;
|
||||
using Microsoft.Extensions.DependencyInjection;
|
||||
using WindreamHub.Legacy.Client.Route;
|
||||
using WindreamHub.Legacy.Client.Routes;
|
||||
|
||||
namespace WindreamHub.Legacy.Client
|
||||
{
|
||||
@@ -15,7 +16,9 @@ namespace WindreamHub.Legacy.Client
|
||||
})
|
||||
.AddSingleton<WindreamClientService>()
|
||||
.AddSingleton<SubscriptionsRouteService>()
|
||||
.AddSingleton<SystemDetailsRouteService>();
|
||||
.AddSingleton<SystemDetailsRouteService>()
|
||||
.AddSingleton<AuthenticationRouteService>()
|
||||
.AddSingleton<DocumentsRouteService>();
|
||||
|
||||
return services;
|
||||
}
|
||||
|
||||
@@ -0,0 +1,9 @@
|
||||
namespace WindreamHub.Legacy.Client.Models.Authentication
|
||||
{
|
||||
public class Base64Credential : ICredential
|
||||
{
|
||||
public Base64Credential(string authorizationHeader) => AuthorizationHeader = authorizationHeader;
|
||||
|
||||
public string AuthorizationHeader { get; }
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,11 @@
|
||||
using WindreamHub.Legacy.Client.Models.Shared;
|
||||
|
||||
namespace WindreamHub.Legacy.Client.Models.Authentication
|
||||
{
|
||||
public class ErrorDetails
|
||||
{
|
||||
public ErrorItem Item { get; set; }
|
||||
public string Message { get; set; }
|
||||
public int? ErrorCode { get; set; }
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,7 @@
|
||||
namespace WindreamHub.Legacy.Client.Models.Authentication
|
||||
{
|
||||
public interface ICredential
|
||||
{
|
||||
string AuthorizationHeader { get; }
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,29 @@
|
||||
using System;
|
||||
using System.Text;
|
||||
using WindreamHub.Legacy.Client.Models.Authentication;
|
||||
|
||||
namespace WindreamHub.Legacy.Client.Models
|
||||
{
|
||||
public class UserCredential : ICredential
|
||||
{
|
||||
public readonly string Domain;
|
||||
|
||||
public readonly string Name;
|
||||
|
||||
public string AuthorizationHeader { get; }
|
||||
|
||||
public UserCredential(string domain, string name, string password)
|
||||
{
|
||||
Domain = domain;
|
||||
Name = name;
|
||||
AuthorizationHeader = ConvertToBase64(domain, name, password);
|
||||
}
|
||||
|
||||
private static string ConvertToBase64(string domain, string username, string password)
|
||||
{
|
||||
var credentials = $"{domain}\\{username}:{password}";
|
||||
var base64Credentials = Convert.ToBase64String(System.Text.Encoding.ASCII.GetBytes(credentials));
|
||||
return base64Credentials;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,15 @@
|
||||
using System.Collections.Generic;
|
||||
|
||||
namespace WindreamHub.Legacy.Client.Models.Authentication
|
||||
{
|
||||
public class ValidationResponse
|
||||
{
|
||||
public int? UserID { get; set; }
|
||||
public string UserName { get; set; }
|
||||
public string FullUserName { get; set; }
|
||||
public bool IsValidUser { get; set; }
|
||||
public ErrorDetails Error { get; set; }
|
||||
public List<ErrorDetails> Errors { get; set; }
|
||||
public bool HasErrors { get; set; }
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,8 @@
|
||||
namespace WindreamHub.Legacy.Client.Models.Documents.Request
|
||||
{
|
||||
public class Attribute
|
||||
{
|
||||
public string Name { get; set; }
|
||||
public object Value { get; set; }
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,9 @@
|
||||
namespace WindreamHub.Legacy.Client.Models.Documents.Request
|
||||
{
|
||||
public class DocCreateBody
|
||||
{
|
||||
public Item Item { get; set; }
|
||||
public bool CreateFolder { get; set; }
|
||||
public int? ResponseDetails { get; set; }
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,13 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
|
||||
namespace WindreamHub.Legacy.Client.Models.Documents.Request
|
||||
{
|
||||
public class Item
|
||||
{
|
||||
public ObjectType ObjectType { get; set; }
|
||||
public List<Attribute> Attributes { get; set; }
|
||||
public string Location { get; set; }
|
||||
public string Name { get; set; }
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,8 @@
|
||||
namespace WindreamHub.Legacy.Client.Models.Documents.Request
|
||||
{
|
||||
public class ObjectType
|
||||
{
|
||||
public int? Id { get; set; }
|
||||
public string Name { get; set; }
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,21 @@
|
||||
namespace WindreamHub.Legacy.Client.Models.Documents.Response
|
||||
{
|
||||
public class Attribute
|
||||
{
|
||||
public string Name { get; set; }
|
||||
public string DisplayName { get; set; }
|
||||
public object Value { get; set; }
|
||||
public int? Type { get; set; }
|
||||
public int? UnderlyingType { get; set; }
|
||||
public string Column { get; set; }
|
||||
public bool IsSystem { get; set; }
|
||||
public bool IsSortable { get; set; }
|
||||
public VectorDetails VectorDetails { get; set; }
|
||||
public TypeSpecificDetails TypeSpecificDetails { get; set; }
|
||||
public int? MaxSize { get; set; }
|
||||
public bool AlwaysModifiable { get; set; }
|
||||
public int? PreDigits { get; set; }
|
||||
public int? PostDigits { get; set; }
|
||||
public bool IsFulltext { get; set; }
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,13 @@
|
||||
using System.Collections.Generic;
|
||||
|
||||
namespace WindreamHub.Legacy.Client.Models.Documents.Response
|
||||
{
|
||||
public class DocCreatResponse
|
||||
{
|
||||
public Item Item { get; set; }
|
||||
public IndexingDetails IndexingDetails { get; set; }
|
||||
public Error Error { get; set; }
|
||||
public List<Error> Errors { get; set; }
|
||||
public bool HasErrors { get; set; }
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,11 @@
|
||||
using WindreamHub.Legacy.Client.Models.Shared;
|
||||
|
||||
namespace WindreamHub.Legacy.Client.Models.Documents.Response
|
||||
{
|
||||
public class Error
|
||||
{
|
||||
public ErrorItem Item { get; set; }
|
||||
public string Message { get; set; }
|
||||
public int? ErrorCode { get; set; }
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,7 @@
|
||||
namespace WindreamHub.Legacy.Client.Models.Documents.Response
|
||||
{
|
||||
public class IndexingDetails
|
||||
{
|
||||
public bool IndexEventRequired { get; set; }
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,16 @@
|
||||
using System.Collections.Generic;
|
||||
|
||||
namespace WindreamHub.Legacy.Client.Models.Documents.Response
|
||||
{
|
||||
public class Item
|
||||
{
|
||||
public List<Attribute> Attributes { get; set; }
|
||||
public ObjectType ObjectType { get; set; }
|
||||
public ParentWindreamObject ParentWindreamObject { get; set; }
|
||||
public int? Entity { get; set; }
|
||||
public string LocationComplete { get; set; }
|
||||
public int? Id { get; set; }
|
||||
public string Location { get; set; }
|
||||
public string Name { get; set; }
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,8 @@
|
||||
namespace WindreamHub.Legacy.Client.Models.Documents.Response
|
||||
{
|
||||
public class ObjectType
|
||||
{
|
||||
public int? Id { get; set; }
|
||||
public string Name { get; set; }
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,10 @@
|
||||
namespace WindreamHub.Legacy.Client.Models.Documents.Response
|
||||
{
|
||||
public class ParentWindreamObject
|
||||
{
|
||||
public string LocationComplete { get; set; }
|
||||
public int? Id { get; set; }
|
||||
public string Location { get; set; }
|
||||
public string Name { get; set; }
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,7 @@
|
||||
namespace WindreamHub.Legacy.Client.Models.Documents.Response
|
||||
{
|
||||
public class TypeSpecificDetails
|
||||
{
|
||||
public bool OnceEditable { get; set; }
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,7 @@
|
||||
namespace WindreamHub.Legacy.Client.Models.Documents.Response
|
||||
{
|
||||
public class VectorDetails
|
||||
{
|
||||
public int? EntriesLimit { get; set; }
|
||||
}
|
||||
}
|
||||
@@ -3,6 +3,8 @@ using System;
|
||||
using System.Net.Http;
|
||||
using System.Threading;
|
||||
using System.Threading.Tasks;
|
||||
using Newtonsoft.Json;
|
||||
using System.Text;
|
||||
|
||||
namespace WindreamHub.Legacy.Client.Models
|
||||
{
|
||||
@@ -89,5 +91,13 @@ namespace WindreamHub.Legacy.Client.Models
|
||||
error?.Invoke(res.Error);
|
||||
});
|
||||
}
|
||||
|
||||
public static string Serialize(this object model) => JsonConvert.SerializeObject(model);
|
||||
|
||||
public static HttpContent ToContent(this string json, Encoding encoding = null, string mediaType = "application/json")
|
||||
=> new StringContent(json, encoding ?? Encoding.UTF8, mediaType);
|
||||
|
||||
public static HttpContent Stringify(this object model, Encoding encoding = null, string mediaType = "application/json")
|
||||
=> model.Serialize().ToContent(encoding ?? Encoding.UTF8, mediaType);
|
||||
}
|
||||
}
|
||||
10
src/WindreamHub.Legacy.Client/Models/Shared/ErrorItem.cs
Normal file
10
src/WindreamHub.Legacy.Client/Models/Shared/ErrorItem.cs
Normal file
@@ -0,0 +1,10 @@
|
||||
namespace WindreamHub.Legacy.Client.Models.Shared
|
||||
{
|
||||
public class ErrorItem
|
||||
{
|
||||
public int? Entity { get; set; }
|
||||
public int? Id { get; set; }
|
||||
public string Location { get; set; }
|
||||
public string Name { get; set; }
|
||||
}
|
||||
}
|
||||
@@ -1,4 +1,4 @@
|
||||
namespace WindreamHub.Legacy.Client.Models
|
||||
namespace WindreamHub.Legacy.Client.Models.SystemDetails
|
||||
{
|
||||
public class SystemDetails
|
||||
{
|
||||
@@ -8,6 +8,6 @@
|
||||
|
||||
public string DefaultDomain { get; set; }
|
||||
|
||||
public int AuthenticationModes { get; set; }
|
||||
public int? AuthenticationModes { get; set; }
|
||||
}
|
||||
}
|
||||
@@ -1,4 +1,4 @@
|
||||
namespace WindreamHub.Legacy.Client.Models
|
||||
namespace WindreamHub.Legacy.Client.Models.SystemDetails
|
||||
{
|
||||
public class SystemDetailsResponse
|
||||
{
|
||||
@@ -0,0 +1,22 @@
|
||||
using DigitalData.Core.Legacy.Client;
|
||||
using Microsoft.Extensions.Options;
|
||||
using System.Net;
|
||||
using System.Net.Http;
|
||||
using System.Threading.Tasks;
|
||||
using WindreamHub.Legacy.Client.Models;
|
||||
using WindreamHub.Legacy.Client.Models.Authentication;
|
||||
|
||||
namespace WindreamHub.Legacy.Client.Routes
|
||||
{
|
||||
public class AuthenticationRouteService : BaseRouteService
|
||||
{
|
||||
public AuthenticationRouteService(HttpClient client, CookieContainer cookieContainer, IOptions<WindreamClientOptions> clientOptions) : base(client, cookieContainer, clientOptions)
|
||||
{
|
||||
}
|
||||
|
||||
public async Task<SimplifiedResponse<ValidationResponse, object>> IsValidUser()
|
||||
{
|
||||
return await FetchAsync(route: "/IsValidUser", HttpMethod.Get).ThenAsync(res => res.Simplify<ValidationResponse, object>());
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,6 +1,5 @@
|
||||
using DigitalData.Core.Legacy.Client;
|
||||
using Microsoft.Extensions.Options;
|
||||
using System;
|
||||
using System.Net;
|
||||
using System.Net.Http;
|
||||
|
||||
@@ -15,8 +14,8 @@ namespace WindreamHub.Legacy.Client.Routes
|
||||
|
||||
clientOptions.Value.Routes.TryGetValue(route_name, out string route);
|
||||
|
||||
if(route is null)
|
||||
throw new InvalidOperationException($"Route not found for the route name: {route_name}.");
|
||||
if (route is null)
|
||||
Uri += $"/{route_name.ToLower()}";
|
||||
|
||||
Uri += route;
|
||||
}
|
||||
|
||||
@@ -0,0 +1,26 @@
|
||||
using Microsoft.Extensions.Options;
|
||||
using System.Net;
|
||||
using System.Net.Http;
|
||||
using DigitalData.Core.Legacy.Client;
|
||||
using System.Threading.Tasks;
|
||||
using WindreamHub.Legacy.Client.Models;
|
||||
using WindreamHub.Legacy.Client.Models.Documents.Response;
|
||||
using WindreamHub.Legacy.Client.Models.Documents.Request;
|
||||
|
||||
namespace WindreamHub.Legacy.Client.Routes
|
||||
{
|
||||
public class DocumentsRouteService : BaseRouteService
|
||||
{
|
||||
public DocumentsRouteService(HttpClient client, CookieContainer cookieContainer, IOptions<WindreamClientOptions> clientOptions) : base(client, cookieContainer, clientOptions)
|
||||
{
|
||||
}
|
||||
|
||||
public async Task<SimplifiedResponse<DocCreatResponse, object>> Create(HttpContent docCreateBody)
|
||||
=> await FetchAsync(route: "/Create", method: HttpMethod.Post, body: docCreateBody)
|
||||
.ThenAsync(res => res.Simplify<DocCreatResponse, object>());
|
||||
|
||||
public async Task<SimplifiedResponse<DocCreatResponse, object>> Create(DocCreateBody docCreateBody)
|
||||
=> await FetchAsync(route: "/Create", method: HttpMethod.Post, body: docCreateBody.Stringify())
|
||||
.ThenAsync(res => res.Simplify<DocCreatResponse, object>());
|
||||
}
|
||||
}
|
||||
@@ -1,8 +1,4 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace WindreamHub.Legacy.Client.Routes
|
||||
{
|
||||
|
||||
@@ -1,6 +1,4 @@
|
||||
using DigitalData.Core.Legacy.Client;
|
||||
using Microsoft.Extensions.Options;
|
||||
using System;
|
||||
using Microsoft.Extensions.Options;
|
||||
using System.Net;
|
||||
using System.Net.Http;
|
||||
using WindreamHub.Legacy.Client.Routes;
|
||||
|
||||
@@ -4,6 +4,7 @@ using System.Net;
|
||||
using System.Net.Http;
|
||||
using System.Threading.Tasks;
|
||||
using WindreamHub.Legacy.Client.Models;
|
||||
using WindreamHub.Legacy.Client.Models.SystemDetails;
|
||||
using WindreamHub.Legacy.Client.Routes;
|
||||
|
||||
namespace WindreamHub.Legacy.Client.Route
|
||||
|
||||
@@ -8,7 +8,8 @@ namespace WindreamHub.Legacy.Client
|
||||
public Dictionary<string, string> Routes = new Dictionary<string, string>()
|
||||
{
|
||||
{ "Subscriptions", "/subscriptions" },
|
||||
{ "SystemDetails", "/systemDetails" }
|
||||
{ "SystemDetails", "/systemDetails" },
|
||||
{ "Authentication", "/authentication" }
|
||||
};
|
||||
}
|
||||
}
|
||||
@@ -2,22 +2,51 @@
|
||||
using Microsoft.Extensions.Options;
|
||||
using System.Net;
|
||||
using System.Net.Http;
|
||||
using System.Net.Http.Headers;
|
||||
using System.Threading.Tasks;
|
||||
using WindreamHub.Legacy.Client.Models.Authentication;
|
||||
using WindreamHub.Legacy.Client.Models;
|
||||
using WindreamHub.Legacy.Client.Route;
|
||||
using WindreamHub.Legacy.Client.Routes;
|
||||
|
||||
namespace WindreamHub.Legacy.Client
|
||||
{
|
||||
public class WindreamClientService : HttpClientService<WindreamClientOptions>
|
||||
{
|
||||
public WindreamClientService(SubscriptionsRouteService subscriptions, SystemDetailsRouteService systemDetails,
|
||||
HttpClient client, CookieContainer cookieContainer, IOptions<WindreamClientOptions> clientOptions) :
|
||||
public WindreamClientService(SubscriptionsRouteService subscriptions, SystemDetailsRouteService systemDetails, AuthenticationRouteService authentication, DocumentsRouteService documents, HttpClient client, CookieContainer cookieContainer, IOptions<WindreamClientOptions> clientOptions) :
|
||||
base(client, cookieContainer, clientOptions)
|
||||
{
|
||||
Subscriptions = subscriptions;
|
||||
SystemDetails = systemDetails;
|
||||
Authentication = authentication;
|
||||
Documents = documents;
|
||||
}
|
||||
|
||||
public SubscriptionsRouteService Subscriptions { get; }
|
||||
|
||||
public SystemDetailsRouteService SystemDetails { get; }
|
||||
|
||||
public AuthenticationRouteService Authentication { get; }
|
||||
|
||||
public DocumentsRouteService Documents { get; }
|
||||
|
||||
public async Task<bool> AuthenticateAsync(ICredential credential)
|
||||
{
|
||||
_client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Basic", credential.AuthorizationHeader);
|
||||
var res = await Authentication.IsValidUser();
|
||||
return res.Ok && res.Data.IsValidUser;
|
||||
}
|
||||
|
||||
public async Task<bool> AuthenticateAsync(string domain, string name, string password)
|
||||
{
|
||||
var uCredential = new UserCredential(domain, name, password);
|
||||
return await AuthenticateAsync(uCredential);
|
||||
}
|
||||
|
||||
public async Task<bool> AuthenticateAsync(string authorizationHeader)
|
||||
{
|
||||
var uCredential = new Base64Credential(authorizationHeader);
|
||||
return await AuthenticateAsync(uCredential);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -83,11 +83,32 @@
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Compile Include="DIExtensions.cs" />
|
||||
<Compile Include="Models\Authentication\ErrorDetails.cs" />
|
||||
<Compile Include="Models\Documents\Response\Error.cs" />
|
||||
<Compile Include="Models\Shared\ErrorItem.cs" />
|
||||
<Compile Include="Models\Authentication\ICredential.cs" />
|
||||
<Compile Include="Models\Authentication\ValidationResponse.cs" />
|
||||
<Compile Include="Models\Authentication\Base64Credential.cs" />
|
||||
<Compile Include="Models\Documents\Request\Attribute.cs" />
|
||||
<Compile Include="Models\Documents\Request\Item.cs" />
|
||||
<Compile Include="Models\Documents\Request\ObjectType.cs" />
|
||||
<Compile Include="Models\Documents\Request\DocCreateBody.cs" />
|
||||
<Compile Include="Models\Documents\Response\Attribute.cs" />
|
||||
<Compile Include="Models\Documents\Response\DocCreatResponse.cs" />
|
||||
<Compile Include="Models\Documents\Response\IndexingDetails.cs" />
|
||||
<Compile Include="Models\Documents\Response\Item.cs" />
|
||||
<Compile Include="Models\Documents\Response\ObjectType.cs" />
|
||||
<Compile Include="Models\Documents\Response\ParentWindreamObject.cs" />
|
||||
<Compile Include="Models\Documents\Response\TypeSpecificDetails.cs" />
|
||||
<Compile Include="Models\Documents\Response\VectorDetails.cs" />
|
||||
<Compile Include="Models\ModelExtensions.cs" />
|
||||
<Compile Include="Models\SimplifiedResponse.cs" />
|
||||
<Compile Include="Models\SystemDetails.cs" />
|
||||
<Compile Include="Models\SystemDetailsResponse.cs" />
|
||||
<Compile Include="Models\SystemDetails\SystemDetails.cs" />
|
||||
<Compile Include="Models\SystemDetails\SystemDetailsResponse.cs" />
|
||||
<Compile Include="Models\Authentication\UserCredential.cs" />
|
||||
<Compile Include="Properties\AssemblyInfo.cs" />
|
||||
<Compile Include="Routes\DocumentsRouteService.cs" />
|
||||
<Compile Include="Routes\AuthenticationRouteService.cs" />
|
||||
<Compile Include="Routes\BaseRouteService.cs" />
|
||||
<Compile Include="Routes\RouteExtensions.cs" />
|
||||
<Compile Include="Routes\SystemDetailsRouteService.cs" />
|
||||
@@ -104,5 +125,6 @@
|
||||
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
|
||||
</Content>
|
||||
</ItemGroup>
|
||||
<ItemGroup />
|
||||
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
|
||||
</Project>
|
||||
Reference in New Issue
Block a user