Compare commits

...

24 Commits

Author SHA1 Message Date
8059ad679e remove nuspec 2025-08-12 13:16:51 +02:00
Developer 02
137579bbcc chore: WindreamHub.Legacy.Client Paketversion auf 1.1.0 erhöht
- Paketversion von 1.0.0 auf 1.1.0 aktualisiert, um die neuen Änderungen widerzuspiegeln.
2024-09-13 15:39:56 +02:00
Developer 02
4aa696410c refactor: Generische Methoden für Rückgabetypen in DocumentsRouteService hinzugefügt
- Refaktorierte CreateAsync-, UploadAsync-, UpdateAsync-, DownloadAsync- und DeleteAsync-Methoden, um generische TData- und TError-Typen zu unterstützen.
- Dynamische Overloads für Create-, Upload-, Update-, Download- und Delete-Methoden hinzugefügt für flexible Anwendungsfälle.
- Methoden-Signaturen aktualisiert, um bessere Typinferenz und Handhabung verschiedener Rückgabetypen zu ermöglichen.
2024-09-13 14:38:09 +02:00
Developer 02
3be920c06a feat: Deserialize- und DeserializeList-Methoden zu ModelExtensions hinzufügen
- Hinzugefügt: Deserialize<T>- und Deserialize-Methoden für JSON-Deserialisierung.
- Hinzugefügt: DeserializeList-Methode zum Deserialisieren von JSON in eine IEnumerable<dynamic>.
2024-09-13 13:48:35 +02:00
Developer 02
4aa4a0add5 feat: DeleteAsync-Methode hinzufügen und Methodennamen mit 'Async'-Suffix refaktorisieren
- Hinzugefügt: DeleteAsync-Methode zur Handhabung der Dokumentenlöschung.
- Bestehende Methoden umbenannt, um 'Async'-Suffix für Konsistenz zu enthalten.
2024-09-13 13:46:17 +02:00
Developer 02
650f2c58d3 refactor: HTTP-Methoden umbenennen, um das Suffix 'Async' für asynchrone Operationen hinzuzufügen 2024-09-13 13:23:14 +02:00
Developer 02
8e367e89c4 feat: Fehler-Modelle für den Dokumentenlöschvorgang hinzugefügt 2024-09-13 13:15:58 +02:00
Developer 02
193c2c41cd chore: Projektdatei aktualisiert, um DeleteItem- und DocDeleteBody-Modelle einzuschließen 2024-09-13 12:08:31 +02:00
Developer 02
6ee87f8b02 feat: DeleteItem- und DocDeleteBody-Modelle für Dokumentenlöschanforderung erstellt 2024-09-13 12:06:57 +02:00
Developer 02
8249c99132 feat: Neue Update- und Download-Methoden zu DocumentsRouteService hinzugefügt 2024-09-13 12:04:35 +02:00
Developer 02
b1834c3417 refactor: DocCreateBody in DocBody umbenannt
- `DocCreateBody` in `DocBody` umbenannt, um den Code einfacher und klarer zu gestalten.
2024-09-13 11:27:27 +02:00
Developer 02
dc0cfd6010 refactor: Dokumenterstellungs-Modelle in den Request-Ordner verschoben
- Modelle von `Models/Documents/Create/Request` nach `Models/Documents/Request` verschoben, um eine bessere Organisation und Konsistenz zu gewährleisten.
2024-09-13 11:25:29 +02:00
Developer 02
18b3a7dfff feat: Flag-Enum für Dokumentoperationen eingeführt
- Ein `Flag`-Enum erstellt, um dokumentbezogene Operationen zu repräsentieren (z.B. `CreateObject`, `CheckIn` usw.).
- Die Verwendung von Integer-Flags in `DocumentsRouteService` durch das neue Enum ersetzt, um die Lesbarkeit und Wartbarkeit des Codes zu verbessern.
- Die `Upload`-Methode aktualisiert, um Flags als Array von `Flag`-Enum-Werten zu verarbeiten.
2024-09-13 11:18:24 +02:00
Developer 02
d9784115ce refactor: Bool-Typen in den Modellen auf bool? geändert 2024-09-13 09:44:20 +02:00
Developer 02
d0ae6c4541 feat: Methode "Upload" zur Dateiübertragung mit Abfrageparametern hinzugefügt
- Methode "Upload" für das Hochladen von Dateien hinzugefügt.
- Unterstützung für Abfrageparameter wie item_id, item_location, item_name, flags und stream_identity hinzugefügt.
- Methode auf MultipartFormDataContent für die Dateiverarbeitung aktualisiert.
2024-09-13 01:28:16 +02:00
Developer 02
e8cffa5fa0 refactor: Dokumenterstellungs-Modelle in den Create-Ordner verschoben 2024-09-13 00:55:06 +02:00
Developer 02
39e78821cf feat: Dokumenterstellungs-Methoden zu DocumentsRouteService hinzugefügt und Modelle aktualisiert
- Zwei `Create`-Methoden in `DocumentsRouteService` hinzugefügt, um die Dokumentenerstellung über HTTP-POST-Anfragen zu ermöglichen.
- `int`-Felder im `DocCreateBody`-Modell in `int?` umgewandelt, um mögliche Nullwerte vom Server zu berücksichtigen.
- Die neue Dokumenterstellungsfunktion in WindreamClientService integriert.
2024-09-13 00:40:06 +02:00
Developer 02
152b4f7cff feat: Modelle für die Antwort auf die Dokumentenerstellung in DocumentsRouteService hinzugefügt 2024-09-12 22:05:59 +02:00
Developer 02
987cecba4c feat: Modelle für Dokumentenerstellungsanfragen in DocumentsRouteService hinzugefügt
- `Attribute`, `DocumentCreationBody`, `Item` und `ObjectType` Modelle für die Dokumentenerstellungsanfrage hinzugefügt.
- Diese Modelle werden zur Erstellung von Dokumentenanfragen mit spezifischen Attributen und Details verwendet.
2024-09-12 21:38:41 +02:00
Developer 02
dcaf510bd3 refactor: SystemDetails-Response-Modelle in den SystemDetails-Ordner verschoben 2024-09-12 21:08:45 +02:00
Developer 02
71f0919bce feat: DocumentsRouteService initialisiert und in WindreamClientService integriert
- `DocumentsRouteService`-Klasse hinzugefügt, um dokumentbezogene Routen zu verwalten, basierend auf `BaseRouteService`.
- `DocumentsRouteService` in `WindreamClientService` für Dokumentoperationen integriert.
- `DocumentsRouteService` als Singleton im Service-Container registriert mit `AddSingleton`.
2024-09-12 20:59:55 +02:00
Developer 02
5062930d5b feat: Benutzer-Authentifizierungsmethoden und Validierungslogik hinzugefügt
- `IsValidUser`-Methode in `AuthenticationRouteService` hinzugefügt, um Benutzer über die `/IsValidUser`-Route zu validieren.
- Drei neue `AuthenticateAsync`-Methoden in `WindreamClientService` implementiert, um verschiedene Benutzerauthentifizierungen zu unterstützen (ICredential, Domain/Name/Passwort und Base64-Authorization-Header).
- HttpClient aktualisiert, um Authorization-Header für die Authentifizierung hinzuzufügen.
2024-09-12 20:20:49 +02:00
Developer 02
c233ab0ed7 feat: AuthenticationRouteService zum WindreamHub-Client hinzugefügt
- `AuthenticationRouteService`-Klasse zur Verwaltung von Authentifizierungsrouten erstellt.
- `AuthenticationRouteService` im DI-Container mit `AddSingleton<AuthenticationRouteService>()` registriert.
- `AuthenticationRouteService` zum `WindreamClientService` hinzugefügt, um die Authentifizierung im Hauptdienst zu verwalten.
2024-09-12 02:09:13 +02:00
Developer 02
0346af5b29 feat: Füge UserCredential-Klasse für die Windream-API-Integration hinzu
- UserCredential-Klasse erstellt, um Benutzerdaten für die Windream-API zu verwalten.
- Konstruktor implementiert, um Domain, Name und Passwort zu initialisieren.
- ConvertToBase64-Methode hinzugefügt, um Anmeldeinformationen für den Autorisierungsheader zu kodieren.
2024-09-11 16:43:57 +02:00
39 changed files with 507 additions and 57 deletions

View File

@@ -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;
}

View File

@@ -0,0 +1,9 @@
namespace WindreamHub.Legacy.Client.Models.Authentication
{
public class Base64Credential : ICredential
{
public Base64Credential(string authorizationHeader) => AuthorizationHeader = authorizationHeader;
public string AuthorizationHeader { get; }
}
}

View File

@@ -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; }
}
}

View File

@@ -0,0 +1,7 @@
namespace WindreamHub.Legacy.Client.Models.Authentication
{
public interface ICredential
{
string AuthorizationHeader { get; }
}
}

View File

@@ -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;
}
}
}

View File

@@ -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; }
}
}

View File

@@ -0,0 +1,13 @@
namespace WindreamHub.Legacy.Client.Models.Documents
{
public enum Flag
{
CreateObject = 1,
CheckIn = 2,
CreateNewVersion = 4,
UseDefaultLocation = 8,
ReturnIndexingDetails = 16,
ForceOverwrite = 32,
CreateTree = 64
}
}

View File

@@ -0,0 +1,8 @@
namespace WindreamHub.Legacy.Client.Models.Documents.Request
{
public class Attribute
{
public string Name { get; set; }
public object Value { get; set; }
}
}

View File

@@ -0,0 +1,9 @@
namespace WindreamHub.Legacy.Client.Models.Documents.Request.Delete
{
public class DeleteItem
{
public int Id { get; set; }
public string Location { get; set; }
public string Name { get; set; }
}
}

View File

@@ -0,0 +1,9 @@
namespace WindreamHub.Legacy.Client.Models.Documents.Request.Delete
{
public class DocDeleteBody
{
public DeleteItem Item { get; set; }
public int Flags { get; set; }
public int ResponseDetails { get; set; }
}
}

View File

@@ -0,0 +1,9 @@
namespace WindreamHub.Legacy.Client.Models.Documents.Request
{
public class DocBody
{
public Item Item { get; set; }
public bool? CreateFolder { get; set; }
public int? ResponseDetails { get; set; }
}
}

View File

@@ -0,0 +1,12 @@
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; }
}
}

View File

@@ -0,0 +1,8 @@
namespace WindreamHub.Legacy.Client.Models.Documents.Request
{
public class ObjectType
{
public int? Id { get; set; }
public string Name { get; set; }
}
}

View File

@@ -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; }
}
}

View File

@@ -0,0 +1,11 @@
using System.Collections.Generic;
namespace WindreamHub.Legacy.Client.Models.Documents.Response.Delete
{
public class DocDelErrorResponse
{
public ErrorDetail Error { get; set; }
public List<Error> Errors { get; set; }
public bool HasErrors { get; set; }
}
}

View File

@@ -0,0 +1,9 @@
namespace WindreamHub.Legacy.Client.Models.Documents.Response.Delete
{
public class ErrorDetail
{
public string Message { get; set; }
public int? ErrorCode { get; set; }
public int? Type { get; set; }
}
}

View File

@@ -0,0 +1,13 @@
using System.Collections.Generic;
namespace WindreamHub.Legacy.Client.Models.Documents.Response
{
public class DocResponse
{
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; }
}
}

View File

@@ -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; }
}
}

View File

@@ -0,0 +1,7 @@
namespace WindreamHub.Legacy.Client.Models.Documents.Response
{
public class IndexingDetails
{
public bool? IndexEventRequired { get; set; }
}
}

View File

@@ -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; }
}
}

View File

@@ -0,0 +1,8 @@
namespace WindreamHub.Legacy.Client.Models.Documents.Response
{
public class ObjectType
{
public int? Id { get; set; }
public string Name { get; set; }
}
}

View File

@@ -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; }
}
}

View File

@@ -0,0 +1,7 @@
namespace WindreamHub.Legacy.Client.Models.Documents.Response
{
public class TypeSpecificDetails
{
public bool? OnceEditable { get; set; }
}
}

View File

@@ -0,0 +1,7 @@
namespace WindreamHub.Legacy.Client.Models.Documents.Response
{
public class VectorDetails
{
public int? EntriesLimit { get; set; }
}
}

View File

@@ -3,6 +3,9 @@ using System;
using System.Net.Http;
using System.Threading;
using System.Threading.Tasks;
using Newtonsoft.Json;
using System.Text;
using System.Collections.Generic;
namespace WindreamHub.Legacy.Client.Models
{
@@ -89,5 +92,19 @@ namespace WindreamHub.Legacy.Client.Models
error?.Invoke(res.Error);
});
}
public static string Serialize(this object model) => JsonConvert.SerializeObject(model);
public static T Deserialize<T>(this string json) => JsonConvert.DeserializeObject<T>(json);
public static dynamic Deserialize(this string json) => JsonConvert.DeserializeObject<dynamic>(json);
public static IEnumerable<dynamic> DeserializeList(this string json) => JsonConvert.DeserializeObject<IEnumerable<dynamic>>(json);
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);
}
}

View 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; }
}
}

View File

@@ -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; }
}
}

View File

@@ -1,4 +1,4 @@
namespace WindreamHub.Legacy.Client.Models
namespace WindreamHub.Legacy.Client.Models.SystemDetails
{
public class SystemDetailsResponse
{
@@ -8,6 +8,6 @@
public object Errors { get; set; }
public bool HasErrors { get; set; }
public bool? HasErrors { get; set; }
}
}

View File

@@ -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>> IsValidUserAsync()
{
return await FetchAsync(route: "/IsValidUser", HttpMethod.Get).ThenAsync(res => res.Simplify<ValidationResponse, object>());
}
}
}

View File

@@ -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;
}

View File

@@ -0,0 +1,122 @@
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;
using System.IO;
using System.Web;
using WindreamHub.Legacy.Client.Models.Documents;
using System.Linq;
using WindreamHub.Legacy.Client.Models.Documents.Response.Delete;
using WindreamHub.Legacy.Client.Models.Documents.Request.Delete;
namespace WindreamHub.Legacy.Client.Routes
{
public class DocumentsRouteService : BaseRouteService
{
public DocumentsRouteService(HttpClient client, CookieContainer cookieContainer, IOptions<WindreamClientOptions> clientOptions) : base(client, cookieContainer, clientOptions)
{
}
//Create
public async Task<SimplifiedResponse<TData, TError>> CreateAsync<TData, TError>(DocBody docCreateBody)
=> await FetchAsync(route: "/Create", method: HttpMethod.Post, body: docCreateBody.Stringify())
.ThenAsync(res => res.Simplify<TData, TError>());
public Task<SimplifiedResponse<dynamic, dynamic>> CreateDynamicAsync(DocBody docCreateBody) => CreateAsync<dynamic, dynamic>(docCreateBody);
public Task<SimplifiedResponse<DocResponse, DocResponse>> CreateAsync(DocBody docCreateBody) => CreateAsync<DocResponse, DocResponse>(docCreateBody);
//Upload
public async Task<SimplifiedResponse<TData, TError>> UploadAsync<TData, TError>(string path, long? item_id = null, string item_location = null, string item_name = null, object stream_identity = null, params Flag[] flags)
{
using (var fileStream = File.OpenRead(path))
{
var fileContent = new StreamContent(fileStream);
var formData = new MultipartFormDataContent
{
{ fileContent, "file" },
};
var query = HttpUtility.ParseQueryString(string.Empty);
if (item_id != null)
query["parameter.item.id"] = item_id.ToString();
if (item_location != null)
query["parameter.item.location"] = item_location;
if (item_name != null)
query["parameter.item.name"] = item_name;
if (flags != null && flags.Length > 0)
query["parameter.flags"] = string.Join(",", flags.Select(flag => (int)flag));
if (stream_identity != null)
query["parameter.stream.__identity"] = stream_identity.ToString();
return await FetchAsync(route: $"/Upload?{query}", method: HttpMethod.Post, body: fileContent).ThenAsync(res => res.Simplify<TData, TError>());
}
}
public Task<SimplifiedResponse<dynamic, dynamic>> UploadDynamicAsync(string path, long? item_id = null, string item_location = null, string item_name = null, object stream_identity = null, params Flag[] flags)
=> UploadAsync<dynamic, dynamic>(path: path, item_id: item_id, item_location: item_location, item_name: item_name, stream_identity: stream_identity, flags: flags);
public Task<SimplifiedResponse<DocResponse, DocResponse>> UploadAsync(string path, long? item_id = null, string item_location = null, string item_name = null, object stream_identity = null, params Flag[] flags)
=> UploadAsync<DocResponse, DocResponse>(path: path, item_id: item_id, item_location: item_location, item_name: item_name, stream_identity: stream_identity, flags: flags);
//Update
public async Task<SimplifiedResponse<TData, TError>> UpdateAsync<TData, TError>(DocBody docUpdateBody)
=> await FetchAsync(route: "/Update", method: HttpMethod.Post, body: docUpdateBody.Stringify())
.ThenAsync(res => res.Simplify<TData, TError>());
public Task<SimplifiedResponse<dynamic, dynamic>> UpdateDynamicAsync(DocBody docUpdateBody)
=> UpdateAsync<dynamic, dynamic>(docUpdateBody);
public Task<SimplifiedResponse<DocResponse, DocResponse>> UpdateAsync(DocBody docUpdateBody)
=> UpdateAsync<DocResponse, DocResponse>(docUpdateBody);
//Download
public async Task<SimplifiedResponse<TData, TError>> DownloadAsync<TData, TError>(long? item_id = null, string item_location = null, string item_name = null, object stream_identity = null, params Flag[] flags)
{
var query = HttpUtility.ParseQueryString(string.Empty);
if (item_id != null)
query["parameter.item.id"] = item_id.ToString();
if (item_location != null)
query["parameter.item.location"] = item_location;
if (item_name != null)
query["parameter.item.name"] = item_name;
if (flags != null && flags.Length > 0)
query["parameter.flags"] = string.Join(",", flags.Select(flag => (int)flag));
if (stream_identity != null)
query["parameter.stream.__identity"] = stream_identity.ToString();
return await FetchAsync(route: $"/Download?{query}", method: HttpMethod.Get).ThenAsync(res => res.Simplify<TData, TError>());
}
public Task<SimplifiedResponse<dynamic, dynamic>> DownloadDynamicAsync(long? item_id = null, string item_location = null, string item_name = null, object stream_identity = null, params Flag[] flags)
=> DownloadAsync<dynamic, dynamic>(item_id: item_id, item_location: item_location, item_name: item_name, stream_identity: stream_identity, flags: flags);
public Task<SimplifiedResponse<DocResponse, DocResponse>> DownloadAsync(long? item_id = null, string item_location = null, string item_name = null, object stream_identity = null, params Flag[] flags)
=> DownloadAsync<DocResponse, DocResponse>(item_id: item_id, item_location: item_location, item_name: item_name, stream_identity: stream_identity, flags: flags);
//Delete
public async Task<SimplifiedResponse<TData, TError>> DeleteAsync<TData, TError>(DocDeleteBody docDeleteBody)
=> await FetchAsync(route: "/Delete", HttpMethod.Post, body: docDeleteBody.Stringify())
.ThenAsync(res => res.Simplify<TData, TError>());
public async Task<SimplifiedResponse<dynamic, dynamic>> DeleteDynamicAsync(DocDeleteBody docDeleteBody)
=> await DeleteAsync<dynamic, dynamic>(docDeleteBody: docDeleteBody);
public async Task<SimplifiedResponse<DocResponse, DocDelErrorResponse>> DeleteAsync(DocDeleteBody docDeleteBody)
=> await DeleteAsync<DocResponse, DocDelErrorResponse>(docDeleteBody: docDeleteBody);
}
}

View File

@@ -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
{

View File

@@ -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;

View File

@@ -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
@@ -15,7 +16,7 @@ namespace WindreamHub.Legacy.Client.Route
{
}
public async Task<SimplifiedResponse<SystemDetailsResponse, object>> GetSystemDetails()
public async Task<SimplifiedResponse<SystemDetailsResponse, object>> GetSystemDetailsAsync()
=> await FetchAsync(route: "/GetSystemDetails")
.ThenAsync(res => res.Simplify<SystemDetailsResponse, object>());
}

View File

@@ -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" }
};
}
}

View File

@@ -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.IsValidUserAsync();
return res.Ok && (res.Data.IsValidUser ?? false);
}
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);
}
}
}

View File

@@ -74,6 +74,7 @@
<Reference Include="System.ValueTuple, Version=4.0.3.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL">
<HintPath>..\..\packages\System.ValueTuple.4.5.0\lib\net461\System.ValueTuple.dll</HintPath>
</Reference>
<Reference Include="System.Web" />
<Reference Include="System.Xml.Linq" />
<Reference Include="System.Data.DataSetExtensions" />
<Reference Include="Microsoft.CSharp" />
@@ -83,11 +84,37 @@
</ItemGroup>
<ItemGroup>
<Compile Include="DIExtensions.cs" />
<Compile Include="Models\Authentication\ErrorDetails.cs" />
<Compile Include="Models\Documents\Flag.cs" />
<Compile Include="Models\Documents\Request\Delete\DeleteItem.cs" />
<Compile Include="Models\Documents\Request\Delete\DocDeleteBody.cs" />
<Compile Include="Models\Documents\Response\Delete\DocDelErrorResponse.cs" />
<Compile Include="Models\Documents\Response\Delete\ErrorDetail.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\DocBody.cs" />
<Compile Include="Models\Documents\Response\Attribute.cs" />
<Compile Include="Models\Documents\Response\DocResponse.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 +131,6 @@
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</Content>
</ItemGroup>
<ItemGroup />
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
</Project>

View File

@@ -1,35 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<package>
<metadata>
<id>WindreamHub.Legacy.Client</id>
<version>1.0.0</version>
<title>WindreamHub.Legacy.Client</title>
<authors>Digital Data GmbH</authors>
<requireLicenseAcceptance>false</requireLicenseAcceptance>
<license type="expression">MIT</license>
<icon>Assets\icon.png</icon>
<projectUrl>http://git.dd:3000/tekh/WindreamHub.git</projectUrl>
<description>This package provides the client library for the Windream. It includes functionality for making HTTP requests to the Windream Webservice API, facilitating integration and communication with Windream document management systems. This version is specifically designed to be compatible with .NET Framework.</description>
<copyright>Copyright 2024</copyright>
<tags>digital data core http windream legacy</tags>
<dependencies>
<dependency id="DigitalData.Core.Client.Legacy" version="1.0.1.2" />
<dependency id="Microsoft.Bcl.AsyncInterfaces" version="8.0.0" />
<dependency id="Microsoft.Extensions.DependencyInjection" version="8.0.0" />
<dependency id="Microsoft.Extensions.DependencyInjection.Abstractions" version="8.0.1" />
<dependency id="Microsoft.Extensions.Options" version="8.0.2" />
<dependency id="Microsoft.Extensions.Primitives" version="8.0.0" />
<dependency id="Newtonsoft.Json" version="13.0.1" />
<dependency id="System.Buffers" version="4.5.1" />
<dependency id="System.Memory" version="4.5.5" />
<dependency id="System.Numerics.Vectors" version="4.5.0" />
<dependency id="System.Runtime.CompilerServices.Unsafe" version="6.0.0" />
<dependency id="System.Threading.Tasks.Extensions" version="4.5.4" />
<dependency id="System.ValueTuple" version="4.5.0" />
</dependencies>
</metadata>
<files>
<file src="bin\Release\WindreamHub.Legacy.Client.dll" target="lib\net462\WindreamHub.Legacy.Client.dll" />
<file src="Assets\icon.png" target="Assets\" />
</files>
</package>

View File

@@ -7,7 +7,7 @@
<package id="Microsoft.Extensions.Options" version="8.0.2" targetFramework="net462" />
<package id="Microsoft.Extensions.Primitives" version="8.0.0" targetFramework="net462" />
<package id="Newtonsoft.Json" version="13.0.1" targetFramework="net462" />
<package id="NuGet.CommandLine" version="6.10.1" targetFramework="net462" developmentDependency="true" />
<package id="NuGet.CommandLine" version="6.11.0" targetFramework="net462" developmentDependency="true" />
<package id="System.Buffers" version="4.5.1" targetFramework="net462" />
<package id="System.Memory" version="4.5.5" targetFramework="net462" />
<package id="System.Numerics.Vectors" version="4.5.0" targetFramework="net462" />