more work on api & rename to Pilz.Net
This commit is contained in:
@@ -1,6 +1,8 @@
|
||||
using Pilz.Networking.CloudProviders.Nextcloud.Client.Apps.FileRetention.Model;
|
||||
using Pilz.Net.CloudProviders.Nextcloud;
|
||||
using Pilz.Net.CloudProviders.Nextcloud.Client;
|
||||
using Pilz.Net.CloudProviders.Nextcloud.Client.Apps.FileRetention.Model;
|
||||
|
||||
namespace Pilz.Networking.CloudProviders.Nextcloud.Client.Apps.FileRetention;
|
||||
namespace Pilz.Net.CloudProviders.Nextcloud.Client.Apps.FileRetention;
|
||||
|
||||
public class FilesRetentionClient : ClientBase
|
||||
{
|
||||
@@ -1,6 +1,6 @@
|
||||
using Pilz.Networking.CloudProviders.Nextcloud.Client.Apps.FileRetention.Ocs;
|
||||
using Pilz.Net.CloudProviders.Nextcloud.Client.Apps.FileRetention.Ocs;
|
||||
|
||||
namespace Pilz.Networking.CloudProviders.Nextcloud.Client.Apps.FileRetention.Model;
|
||||
namespace Pilz.Net.CloudProviders.Nextcloud.Client.Apps.FileRetention.Model;
|
||||
|
||||
public class RetentionRule : RetentionRuleInfo
|
||||
{
|
||||
@@ -1,6 +1,6 @@
|
||||
using Pilz.Networking.CloudProviders.Nextcloud.Client.Apps.FileRetention.Ocs;
|
||||
using Pilz.Net.CloudProviders.Nextcloud.Client.Apps.FileRetention.Ocs;
|
||||
|
||||
namespace Pilz.Networking.CloudProviders.Nextcloud.Client.Apps.FileRetention.Model;
|
||||
namespace Pilz.Net.CloudProviders.Nextcloud.Client.Apps.FileRetention.Model;
|
||||
|
||||
public class RetentionRuleInfo
|
||||
{
|
||||
@@ -0,0 +1,7 @@
|
||||
namespace Pilz.Net.CloudProviders.Nextcloud.Client.Apps.FileRetention.Model;
|
||||
|
||||
public enum RetentionTimeAfter
|
||||
{
|
||||
CreationDate,
|
||||
LastAccess
|
||||
}
|
||||
@@ -0,0 +1,9 @@
|
||||
namespace Pilz.Net.CloudProviders.Nextcloud.Client.Apps.FileRetention.Model;
|
||||
|
||||
public enum RetentionTimeUnit
|
||||
{
|
||||
Day,
|
||||
Week,
|
||||
Month,
|
||||
Year
|
||||
}
|
||||
@@ -1,7 +1,7 @@
|
||||
using Newtonsoft.Json;
|
||||
using Pilz.Networking.CloudProviders.Nextcloud.Ocs;
|
||||
using Pilz.Net.CloudProviders.Nextcloud.OCS;
|
||||
|
||||
namespace Pilz.Networking.CloudProviders.Nextcloud.Client.Apps.FileRetention.Ocs;
|
||||
namespace Pilz.Net.CloudProviders.Nextcloud.Client.Apps.FileRetention.Ocs;
|
||||
|
||||
public class OcsDataRetentionRule : OcsData
|
||||
{
|
||||
@@ -1,7 +1,7 @@
|
||||
using Newtonsoft.Json;
|
||||
using Pilz.Networking.CloudProviders.Nextcloud.Ocs.Responses;
|
||||
using Pilz.Net.CloudProviders.Nextcloud.OCS.Responses;
|
||||
|
||||
namespace Pilz.Networking.CloudProviders.Nextcloud.Client.Apps.FileRetention.Ocs;
|
||||
namespace Pilz.Net.CloudProviders.Nextcloud.Client.Apps.FileRetention.Ocs;
|
||||
|
||||
public class OcsResponseDataEntryRetention : OcsResponseDataEntry
|
||||
{
|
||||
@@ -0,0 +1,7 @@
|
||||
using Pilz.Net.CloudProviders.Nextcloud.OCS.Responses;
|
||||
|
||||
namespace Pilz.Net.CloudProviders.Nextcloud.Client.Apps.FileRetention.Ocs;
|
||||
|
||||
public class OcsResponseRetention : OcsResponse<OcsResponseDataArray<OcsResponseDataEntryRetention>>
|
||||
{
|
||||
}
|
||||
@@ -1,7 +1,8 @@
|
||||
using Pilz.Networking.CloudProviders.Nextcloud.Client.Apps.FileRetention.Ocs;
|
||||
using Pilz.Networking.CloudProviders.Nextcloud.Ocs;
|
||||
using Pilz.Net.CloudProviders.Nextcloud;
|
||||
using Pilz.Net.CloudProviders.Nextcloud.Client.Apps.FileRetention.Ocs;
|
||||
using Pilz.Net.CloudProviders.Nextcloud.OCS;
|
||||
|
||||
namespace Pilz.Networking.CloudProviders.Nextcloud.Client.Apps.FileRetention;
|
||||
namespace Pilz.Net.CloudProviders.Nextcloud.Client.Apps.FileRetention;
|
||||
|
||||
public class OcsApiFilesRetention : OcsApiBase
|
||||
{
|
||||
@@ -1,6 +1,6 @@
|
||||
using Newtonsoft.Json;
|
||||
|
||||
namespace Pilz.Networking.CloudProviders.Nextcloud.Client.Apps.Tables.Model;
|
||||
namespace Pilz.Net.CloudProviders.Nextcloud.Client.Apps.Tables.Model;
|
||||
|
||||
public class Column
|
||||
{
|
||||
@@ -1,6 +1,6 @@
|
||||
using Newtonsoft.Json;
|
||||
|
||||
namespace Pilz.Networking.CloudProviders.Nextcloud.Client.Apps.Tables.Model;
|
||||
namespace Pilz.Net.CloudProviders.Nextcloud.Client.Apps.Tables.Model;
|
||||
|
||||
public class ColumnSelectionOption
|
||||
{
|
||||
@@ -0,0 +1,8 @@
|
||||
namespace Pilz.Net.CloudProviders.Nextcloud.Client.Apps.Tables.Model;
|
||||
|
||||
public enum ColumnSubtype
|
||||
{
|
||||
None,
|
||||
Unknown,
|
||||
Line
|
||||
}
|
||||
@@ -0,0 +1,9 @@
|
||||
namespace Pilz.Net.CloudProviders.Nextcloud.Client.Apps.Tables.Model;
|
||||
|
||||
public enum ColumnType
|
||||
{
|
||||
Unknown,
|
||||
Text,
|
||||
Selection,
|
||||
DateTime
|
||||
}
|
||||
@@ -0,0 +1,5 @@
|
||||
namespace Pilz.Net.CloudProviders.Nextcloud.Client.Apps.Tables.Model;
|
||||
|
||||
public class Columns : List<Column>
|
||||
{
|
||||
}
|
||||
@@ -1,6 +1,6 @@
|
||||
using Newtonsoft.Json;
|
||||
|
||||
namespace Pilz.Networking.CloudProviders.Nextcloud.Client.Apps.Tables.Model;
|
||||
namespace Pilz.Net.CloudProviders.Nextcloud.Client.Apps.Tables.Model;
|
||||
|
||||
public class Row
|
||||
{
|
||||
@@ -1,6 +1,6 @@
|
||||
using Newtonsoft.Json;
|
||||
|
||||
namespace Pilz.Networking.CloudProviders.Nextcloud.Client.Apps.Tables.Model;
|
||||
namespace Pilz.Net.CloudProviders.Nextcloud.Client.Apps.Tables.Model;
|
||||
|
||||
public class RowData
|
||||
{
|
||||
@@ -0,0 +1,5 @@
|
||||
namespace Pilz.Net.CloudProviders.Nextcloud.Client.Apps.Tables.Model;
|
||||
|
||||
public class RowSimple : List<object>
|
||||
{
|
||||
}
|
||||
@@ -1,6 +1,6 @@
|
||||
using Newtonsoft.Json;
|
||||
|
||||
namespace Pilz.Networking.CloudProviders.Nextcloud.Client.Apps.Tables.Model;
|
||||
namespace Pilz.Net.CloudProviders.Nextcloud.Client.Apps.Tables.Model;
|
||||
|
||||
public class RowUpdate
|
||||
{
|
||||
@@ -0,0 +1,5 @@
|
||||
namespace Pilz.Net.CloudProviders.Nextcloud.Client.Apps.Tables.Model;
|
||||
|
||||
public class Rows : List<Row>
|
||||
{
|
||||
}
|
||||
@@ -0,0 +1,5 @@
|
||||
namespace Pilz.Net.CloudProviders.Nextcloud.Client.Apps.Tables.Model;
|
||||
|
||||
public class RowsSimple : List<RowSimple>
|
||||
{
|
||||
}
|
||||
@@ -1,7 +1,8 @@
|
||||
using Pilz.Networking.CloudProviders.Nextcloud.Client.Apps.Tables.Model;
|
||||
using Pilz.Networking.CloudProviders.Nextcloud.Ocs;
|
||||
using Pilz.Net.CloudProviders.Nextcloud;
|
||||
using Pilz.Net.CloudProviders.Nextcloud.Client.Apps.Tables.Model;
|
||||
using Pilz.Net.CloudProviders.Nextcloud.OCS;
|
||||
|
||||
namespace Pilz.Networking.CloudProviders.Nextcloud.Client.Apps.Tables;
|
||||
namespace Pilz.Net.CloudProviders.Nextcloud.Client.Apps.Tables;
|
||||
|
||||
public class OcsApiTables : OcsApiBase
|
||||
{
|
||||
@@ -1,6 +1,8 @@
|
||||
using Pilz.Networking.CloudProviders.Nextcloud.Client.Apps.Tables.Model;
|
||||
using Pilz.Net.CloudProviders.Nextcloud;
|
||||
using Pilz.Net.CloudProviders.Nextcloud.Client;
|
||||
using Pilz.Net.CloudProviders.Nextcloud.Client.Apps.Tables.Model;
|
||||
|
||||
namespace Pilz.Networking.CloudProviders.Nextcloud.Client.Apps.Tables;
|
||||
namespace Pilz.Net.CloudProviders.Nextcloud.Client.Apps.Tables;
|
||||
|
||||
public class TablesClient : ClientBase
|
||||
{
|
||||
@@ -1,4 +1,4 @@
|
||||
namespace Pilz.Networking.CloudProviders.Nextcloud.Client;
|
||||
namespace Pilz.Net.CloudProviders.Nextcloud.Client;
|
||||
|
||||
|
||||
/* Nicht gemergte Änderung aus Projekt "Pilz.Networking.CloudProviders.Nextcloud (net6.0)"
|
||||
@@ -1,6 +1,7 @@
|
||||
using Pilz.Networking.CloudProviders.Nextcloud.Client.Cloud.Model;
|
||||
using Pilz.Net.CloudProviders.Nextcloud.Client;
|
||||
using Pilz.Net.CloudProviders.Nextcloud.Client.Cloud.Model;
|
||||
|
||||
namespace Pilz.Networking.CloudProviders.Nextcloud.Client.Cloud;
|
||||
namespace Pilz.Net.CloudProviders.Nextcloud.Client.Cloud;
|
||||
|
||||
public class CloudClient : ClientBase
|
||||
{
|
||||
@@ -1,4 +1,4 @@
|
||||
namespace Pilz.Networking.CloudProviders.Nextcloud.Client.Cloud.Model;
|
||||
namespace Pilz.Net.CloudProviders.Nextcloud.Client.Cloud.Model;
|
||||
|
||||
public class UserBackendCapabilities
|
||||
{
|
||||
@@ -1,6 +1,7 @@
|
||||
using Pilz.Networking.CloudProviders.Nextcloud.Client.Cloud.Ocs;
|
||||
using Pilz.Net.CloudProviders.Nextcloud;
|
||||
using Pilz.Net.CloudProviders.Nextcloud.Client.Cloud.Ocs;
|
||||
|
||||
namespace Pilz.Networking.CloudProviders.Nextcloud.Client.Cloud.Model;
|
||||
namespace Pilz.Net.CloudProviders.Nextcloud.Client.Cloud.Model;
|
||||
|
||||
public class UserInfo
|
||||
{
|
||||
@@ -1,4 +1,4 @@
|
||||
namespace Pilz.Networking.CloudProviders.Nextcloud.Client.Cloud.Model;
|
||||
namespace Pilz.Net.CloudProviders.Nextcloud.Client.Cloud.Model;
|
||||
|
||||
public class UserQuota
|
||||
{
|
||||
@@ -1,7 +1,7 @@
|
||||
using Newtonsoft.Json;
|
||||
using Pilz.Networking.CloudProviders.Nextcloud.Ocs.Responses;
|
||||
using Pilz.Net.CloudProviders.Nextcloud.OCS.Responses;
|
||||
|
||||
namespace Pilz.Networking.CloudProviders.Nextcloud.Client.Cloud.Ocs;
|
||||
namespace Pilz.Net.CloudProviders.Nextcloud.Client.Cloud.Ocs;
|
||||
|
||||
public class OcsResponseDataUser : OcsResponseData
|
||||
{
|
||||
@@ -0,0 +1,7 @@
|
||||
using Pilz.Net.CloudProviders.Nextcloud.OCS.Responses;
|
||||
|
||||
namespace Pilz.Net.CloudProviders.Nextcloud.Client.Cloud.Ocs;
|
||||
|
||||
public class OcsResponseUser : OcsResponse<OcsResponseDataUser>
|
||||
{
|
||||
}
|
||||
@@ -1,7 +1,8 @@
|
||||
using Pilz.Networking.CloudProviders.Nextcloud.Client.Cloud.Ocs;
|
||||
using Pilz.Networking.CloudProviders.Nextcloud.Ocs;
|
||||
using Pilz.Net.CloudProviders.Nextcloud;
|
||||
using Pilz.Net.CloudProviders.Nextcloud.Client.Cloud.Ocs;
|
||||
using Pilz.Net.CloudProviders.Nextcloud.OCS;
|
||||
|
||||
namespace Pilz.Networking.CloudProviders.Nextcloud.Client.Cloud;
|
||||
namespace Pilz.Net.CloudProviders.Nextcloud.Client.Cloud;
|
||||
|
||||
public class OcsApiCloud : OcsApiBase
|
||||
{
|
||||
@@ -6,17 +6,9 @@ Nach:
|
||||
using Pilz.Networking.CloudProviders.Nextcloud.Ocs;
|
||||
using System;
|
||||
*/
|
||||
using
|
||||
/* Nicht gemergte Änderung aus Projekt "Pilz.Networking.CloudProviders.Nextcloud (net6.0)"
|
||||
Vor:
|
||||
using System.Threading.Tasks;
|
||||
using Pilz.Networking.CloudProviders.Nextcloud.Ocs;
|
||||
Nach:
|
||||
using System.Threading.Tasks;
|
||||
*/
|
||||
Pilz.Networking.CloudProviders.Nextcloud.Ocs;
|
||||
using Pilz.Net.CloudProviders.Nextcloud.OCS;
|
||||
|
||||
namespace Pilz.Networking.CloudProviders.Nextcloud.Client.Core;
|
||||
namespace Pilz.Net.CloudProviders.Nextcloud.Client.Core;
|
||||
|
||||
public class OcsApiCore : OcsApiBase
|
||||
{
|
||||
@@ -1,6 +1,6 @@
|
||||
using Newtonsoft.Json;
|
||||
|
||||
namespace Pilz.Networking.CloudProviders.Nextcloud.Client.LoginFlowV2.Ocs;
|
||||
namespace Pilz.Net.CloudProviders.Nextcloud.Client.LoginFlowV2.Ocs;
|
||||
|
||||
public class OcsResponseLoginFlowV2
|
||||
{
|
||||
@@ -1,6 +1,6 @@
|
||||
using Newtonsoft.Json;
|
||||
|
||||
namespace Pilz.Networking.CloudProviders.Nextcloud.Client.LoginFlowV2.Ocs;
|
||||
namespace Pilz.Net.CloudProviders.Nextcloud.Client.LoginFlowV2.Ocs;
|
||||
|
||||
public class OcsResponseLoginFlowV2Credentials
|
||||
{
|
||||
@@ -1,7 +1,7 @@
|
||||
using Pilz.Networking.CloudProviders.Nextcloud.Client.LoginFlowV2.Ocs;
|
||||
using Pilz.Networking.CloudProviders.Nextcloud.Ocs;
|
||||
using Pilz.Net.CloudProviders.Nextcloud.Client.LoginFlowV2.Ocs;
|
||||
using Pilz.Net.CloudProviders.Nextcloud.OCS;
|
||||
|
||||
namespace Pilz.Networking.CloudProviders.Nextcloud.Client.LoginFlowV2;
|
||||
namespace Pilz.Net.CloudProviders.Nextcloud.Client.LoginFlowV2;
|
||||
|
||||
public class OcsApiLoginFlowV2 : OcsApiBase
|
||||
{
|
||||
@@ -1,7 +1,7 @@
|
||||
using Pilz.Networking.CloudProviders.Nextcloud.Ocs;
|
||||
using Pilz.Net.CloudProviders.Nextcloud.OCS;
|
||||
using System.Text;
|
||||
|
||||
namespace Pilz.Networking.CloudProviders.Nextcloud;
|
||||
namespace Pilz.Net.CloudProviders.Nextcloud;
|
||||
|
||||
public static class Extensions
|
||||
{
|
||||
@@ -1,7 +1,8 @@
|
||||
using Pilz.Networking.CloudProviders.Nextcloud.Client;
|
||||
using Pilz.Networking.CloudProviders.Nextcloud.Client.Cloud;
|
||||
using Pilz.Networking.CloudProviders.Nextcloud.Client.Cloud.Model;
|
||||
using Pilz.Networking.CloudProviders.Nextcloud.Client.LoginFlowV2.Ocs;
|
||||
using Pilz.Net.CloudProviders.Nextcloud.Client;
|
||||
using Pilz.Net.CloudProviders.Nextcloud.Client.Cloud;
|
||||
using Pilz.Net.CloudProviders.Nextcloud.Client.Cloud.Model;
|
||||
using Pilz.Net.CloudProviders.Nextcloud.Client.LoginFlowV2.Ocs;
|
||||
using Pilz.Net.CloudProviders.Nextcloud.OCS;
|
||||
|
||||
/* Nicht gemergte Änderung aus Projekt "Pilz.Networking.CloudProviders.Nextcloud (net6.0)"
|
||||
Vor:
|
||||
@@ -17,10 +18,9 @@ using System.Reflection;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
*/
|
||||
using Pilz.Networking.CloudProviders.Nextcloud.Ocs;
|
||||
using System.Diagnostics;
|
||||
|
||||
namespace Pilz.Networking.CloudProviders.Nextcloud;
|
||||
namespace Pilz.Net.CloudProviders.Nextcloud;
|
||||
|
||||
public class NextcloudClient : IDisposable
|
||||
{
|
||||
@@ -1,6 +1,6 @@
|
||||
using Pilz.Networking.CloudProviders.Nextcloud.Client.LoginFlowV2.Ocs;
|
||||
using Pilz.Net.CloudProviders.Nextcloud.Client.LoginFlowV2.Ocs;
|
||||
|
||||
namespace Pilz.Networking.CloudProviders.Nextcloud;
|
||||
namespace Pilz.Net.CloudProviders.Nextcloud;
|
||||
|
||||
public class NextcloudLogin
|
||||
{
|
||||
@@ -1,4 +1,4 @@
|
||||
namespace Pilz.Networking.CloudProviders.Nextcloud.Ocs;
|
||||
namespace Pilz.Net.CloudProviders.Nextcloud.OCS;
|
||||
|
||||
public delegate void GetOcsApiAuthCredentailsEventHandler(object sender, GetOcsApiAuthCredentailsEventArgs eventArgs);
|
||||
|
||||
@@ -23,7 +23,9 @@ using
|
||||
Nach:
|
||||
using
|
||||
*/
|
||||
namespace Pilz.Networking.CloudProviders.Nextcloud.Ocs;
|
||||
using Pilz.Net.CloudProviders.Nextcloud;
|
||||
|
||||
namespace Pilz.Net.CloudProviders.Nextcloud.OCS;
|
||||
|
||||
public class OcsApi : IDisposable
|
||||
{
|
||||
@@ -1,4 +1,4 @@
|
||||
namespace Pilz.Networking.CloudProviders.Nextcloud.Ocs;
|
||||
namespace Pilz.Net.CloudProviders.Nextcloud.OCS;
|
||||
|
||||
public struct OcsApiAuthCredentials
|
||||
{
|
||||
@@ -1,4 +1,4 @@
|
||||
namespace Pilz.Networking.CloudProviders.Nextcloud.Ocs;
|
||||
namespace Pilz.Net.CloudProviders.Nextcloud.OCS;
|
||||
|
||||
public abstract class OcsApiBase
|
||||
{
|
||||
@@ -1,7 +1,7 @@
|
||||
using Newtonsoft.Json;
|
||||
using Pilz.Networking.CloudProviders.Nextcloud.Ocs.Responses;
|
||||
using Pilz.Net.CloudProviders.Nextcloud.OCS.Responses;
|
||||
|
||||
namespace Pilz.Networking.CloudProviders.Nextcloud.Ocs;
|
||||
namespace Pilz.Net.CloudProviders.Nextcloud.OCS;
|
||||
|
||||
public class OcsApiResponse<TOcsResponse> where TOcsResponse : IOcsResponse
|
||||
{
|
||||
@@ -1,4 +1,4 @@
|
||||
namespace Pilz.Networking.CloudProviders.Nextcloud.Ocs;
|
||||
namespace Pilz.Net.CloudProviders.Nextcloud.OCS;
|
||||
|
||||
public readonly struct OcsApiUrlPath
|
||||
{
|
||||
5
Pilz.Net.CloudProviders.Nextcloud/OCS/OcsData.cs
Normal file
5
Pilz.Net.CloudProviders.Nextcloud/OCS/OcsData.cs
Normal file
@@ -0,0 +1,5 @@
|
||||
namespace Pilz.Net.CloudProviders.Nextcloud.OCS;
|
||||
|
||||
public class OcsData
|
||||
{
|
||||
}
|
||||
@@ -0,0 +1,5 @@
|
||||
namespace Pilz.Net.CloudProviders.Nextcloud.OCS.Responses;
|
||||
|
||||
public interface IOcsResponse
|
||||
{
|
||||
}
|
||||
@@ -0,0 +1,5 @@
|
||||
namespace Pilz.Net.CloudProviders.Nextcloud.OCS.Responses;
|
||||
|
||||
public interface IOcsResponseData
|
||||
{
|
||||
}
|
||||
@@ -0,0 +1,5 @@
|
||||
namespace Pilz.Net.CloudProviders.Nextcloud.OCS.Responses;
|
||||
|
||||
public interface IOcsResponseMeta
|
||||
{
|
||||
}
|
||||
@@ -1,6 +1,6 @@
|
||||
using Newtonsoft.Json;
|
||||
|
||||
namespace Pilz.Networking.CloudProviders.Nextcloud.Ocs.Responses;
|
||||
namespace Pilz.Net.CloudProviders.Nextcloud.OCS.Responses;
|
||||
|
||||
public class OcsResponse<TMeta, TData> : IOcsResponse where TMeta : IOcsResponseMeta where TData : IOcsResponseData
|
||||
{
|
||||
@@ -0,0 +1,5 @@
|
||||
namespace Pilz.Net.CloudProviders.Nextcloud.OCS.Responses;
|
||||
|
||||
public class OcsResponseData : IOcsResponseData
|
||||
{
|
||||
}
|
||||
@@ -1,4 +1,4 @@
|
||||
namespace Pilz.Networking.CloudProviders.Nextcloud.Ocs.Responses;
|
||||
namespace Pilz.Net.CloudProviders.Nextcloud.OCS.Responses;
|
||||
|
||||
public class OcsResponseDataArray<TEntry> : List<TEntry>, IOcsResponseData where TEntry : OcsResponseDataEntry
|
||||
{
|
||||
@@ -0,0 +1,5 @@
|
||||
namespace Pilz.Net.CloudProviders.Nextcloud.OCS.Responses;
|
||||
|
||||
public class OcsResponseDataEntry
|
||||
{
|
||||
}
|
||||
@@ -1,6 +1,6 @@
|
||||
using Newtonsoft.Json;
|
||||
|
||||
namespace Pilz.Networking.CloudProviders.Nextcloud.Ocs.Responses;
|
||||
namespace Pilz.Net.CloudProviders.Nextcloud.OCS.Responses;
|
||||
|
||||
public class OcsResponseMeta : IOcsResponseMeta
|
||||
{
|
||||
20
Pilz.Net/Api/ApiAuthCheckEventArgs.cs
Normal file
20
Pilz.Net/Api/ApiAuthCheckEventArgs.cs
Normal file
@@ -0,0 +1,20 @@
|
||||
namespace Pilz.Net.Api;
|
||||
|
||||
public record class ApiAuthCheckEventArgs(string AuthKey)
|
||||
{
|
||||
private bool hasDenyed;
|
||||
|
||||
public bool Valid { get; set; }
|
||||
|
||||
public void Deny()
|
||||
{
|
||||
Valid = false;
|
||||
hasDenyed = true;
|
||||
}
|
||||
|
||||
public void Permit()
|
||||
{
|
||||
if (!hasDenyed)
|
||||
Valid = true;
|
||||
}
|
||||
}
|
||||
@@ -1,17 +1,18 @@
|
||||
namespace Pilz.Networking.Api;
|
||||
namespace Pilz.Net.Api;
|
||||
|
||||
public class ApiClient(string apiUrl) : IApiClient
|
||||
{
|
||||
protected readonly HttpClient httpClient = new();
|
||||
|
||||
public string ApiUrl { get; } = apiUrl;
|
||||
public virtual string ApiUrl { get; } = apiUrl;
|
||||
|
||||
public IMessageSerializer Serializer { get; set; } = new DefaultMessageSerializer();
|
||||
public string? AuthKey { get; set; }
|
||||
|
||||
public virtual IMessageSerializer Serializer { get; set; } = new DefaultMessageSerializer();
|
||||
|
||||
public virtual async Task<ApiResponse> SendMessage<TResponse>(string url, ApiMessage message, IMessageSerializer? serializer)
|
||||
{
|
||||
serializer ??= Serializer;
|
||||
//message.AuthSecret = AuthSecret;
|
||||
|
||||
var res = await Send(url, message, serializer);
|
||||
|
||||
@@ -21,7 +22,6 @@ public class ApiClient(string apiUrl) : IApiClient
|
||||
public virtual async Task<ApiResponse<TResponse>> SendRequest<TResponse>(string url, ApiMessage message, IMessageSerializer? serializer) where TResponse : ApiMessage
|
||||
{
|
||||
serializer ??= Serializer;
|
||||
//message.AuthSecret = AuthSecret;
|
||||
|
||||
var res = await Send(url, message, serializer);
|
||||
TResponse? result = null;
|
||||
@@ -36,6 +36,7 @@ public class ApiClient(string apiUrl) : IApiClient
|
||||
{
|
||||
var fullRequestUrl = ApiUrl + url;
|
||||
var content = new StringContent(serializer.Serialize(message)!, null, "application/json");
|
||||
content.Headers.Add("API-AUTH-KEY", AuthKey);
|
||||
return await httpClient.PostAsync(fullRequestUrl, content);
|
||||
}
|
||||
}
|
||||
5
Pilz.Net/Api/ApiMessage.cs
Normal file
5
Pilz.Net/Api/ApiMessage.cs
Normal file
@@ -0,0 +1,5 @@
|
||||
namespace Pilz.Net.Api;
|
||||
|
||||
public abstract class ApiMessage
|
||||
{
|
||||
}
|
||||
@@ -1,6 +1,6 @@
|
||||
using System.Net;
|
||||
|
||||
namespace Pilz.Networking.Api;
|
||||
namespace Pilz.Net.Api;
|
||||
|
||||
public record class ApiResponse(
|
||||
HttpStatusCode StatusCode)
|
||||
@@ -1,6 +1,6 @@
|
||||
using System.Net;
|
||||
|
||||
namespace Pilz.Networking.Api;
|
||||
namespace Pilz.Net.Api;
|
||||
|
||||
public record class ApiResponse<T>(
|
||||
HttpStatusCode StatusCode,
|
||||
@@ -1,6 +1,6 @@
|
||||
using System.Net;
|
||||
|
||||
namespace Pilz.Networking.Api;
|
||||
namespace Pilz.Net.Api;
|
||||
|
||||
public record class ApiResult(
|
||||
HttpStatusCode StatusCode,
|
||||
@@ -1,19 +1,24 @@
|
||||
using Pilz.Extensions.Reflection;
|
||||
using System.Net;
|
||||
using System.Reflection;
|
||||
using static Pilz.Net.Api.IApiServer;
|
||||
|
||||
namespace Pilz.Networking.Api;
|
||||
namespace Pilz.Net.Api;
|
||||
|
||||
public class ApiServer(string apiUrl) : ApiClient, IApiServer
|
||||
public class ApiServer(string apiUrl) : IApiServer
|
||||
{
|
||||
protected readonly Dictionary<string, Delegate> handlers = [];
|
||||
protected readonly Dictionary<Type, IMessageSerializer> serializers = [];
|
||||
protected readonly HttpListener httpListener = new();
|
||||
|
||||
public event OnCheckAuthenticationEventHandler? OnCheckAuthentication;
|
||||
|
||||
protected record PrivateApiResult(ApiResult Original, string? ResultJson);
|
||||
|
||||
public string ApiUrl { get; } = apiUrl;
|
||||
|
||||
public virtual bool EnableAuth { get; set; }
|
||||
|
||||
public IMessageSerializer Serializer { get; set; } = new DefaultMessageSerializer();
|
||||
|
||||
public virtual void Start()
|
||||
@@ -22,6 +27,11 @@ public class ApiServer(string apiUrl) : ApiClient, IApiServer
|
||||
Listen();
|
||||
}
|
||||
|
||||
public virtual void Stop()
|
||||
{
|
||||
httpListener.Stop();
|
||||
}
|
||||
|
||||
public virtual void RegisterHandler<T>(T instance) where T : class
|
||||
{
|
||||
// Get all public instance methods
|
||||
@@ -44,7 +54,7 @@ public class ApiServer(string apiUrl) : ApiClient, IApiServer
|
||||
throw new NotSupportedException("The first parameter needs to be of type ApiMessage and must return an ApiResult object and the method must have the MessageHandlerAttribute.");
|
||||
|
||||
// Add handler
|
||||
handlers.Add(ApiUrl + attribute.Url, handler);
|
||||
handlers.Add(ApiUrl + attribute.Route, handler);
|
||||
}
|
||||
|
||||
protected virtual void Listen()
|
||||
@@ -78,8 +88,12 @@ public class ApiServer(string apiUrl) : ApiClient, IApiServer
|
||||
using StreamReader input = new(context.Request.InputStream);
|
||||
var contentJson = input.ReadToEnd();
|
||||
|
||||
// Get auth key
|
||||
if (context.Request.Headers.Get("API-AUTH-KEY") is not string authKey)
|
||||
authKey = null!;
|
||||
|
||||
// Handle message
|
||||
if (HandleMessage(path, contentJson) is not PrivateApiResult result)
|
||||
if (HandleMessage(path, contentJson, authKey) is not PrivateApiResult result)
|
||||
{
|
||||
close();
|
||||
return;
|
||||
@@ -87,8 +101,6 @@ public class ApiServer(string apiUrl) : ApiClient, IApiServer
|
||||
|
||||
// Set response parameters
|
||||
context.Response.StatusCode = (int)result.Original.StatusCode;
|
||||
if (result.Original.StatusDescription is not null)
|
||||
context.Response.StatusDescription = result.Original.StatusDescription;
|
||||
|
||||
// Write response content
|
||||
if (result.ResultJson is not null)
|
||||
@@ -101,13 +113,17 @@ public class ApiServer(string apiUrl) : ApiClient, IApiServer
|
||||
close();
|
||||
}
|
||||
|
||||
protected virtual PrivateApiResult? HandleMessage(string url, string json)
|
||||
protected virtual PrivateApiResult? HandleMessage(string url, string json, string? authKey)
|
||||
{
|
||||
// Get handler
|
||||
if (!handlers.TryGetValue(url, out var handler)
|
||||
|| handler.Method.GetCustomAttribute<MessageHandlerAttribute>() is not MessageHandlerAttribute attribute)
|
||||
return null;
|
||||
|
||||
// Check authentication
|
||||
if (attribute.RequiesAuth && (string.IsNullOrWhiteSpace(authKey) || !CheckAuthentication(authKey)))
|
||||
return null;
|
||||
|
||||
// Get required infos
|
||||
var targetType = handler.Method.GetParameters().First().ParameterType;
|
||||
var serializer = GetSerializer(attribute.Serializer);
|
||||
@@ -146,4 +162,15 @@ public class ApiServer(string apiUrl) : ApiClient, IApiServer
|
||||
}
|
||||
return Serializer;
|
||||
}
|
||||
|
||||
protected virtual bool CheckAuthentication(string authKey)
|
||||
{
|
||||
if (OnCheckAuthentication != null)
|
||||
{
|
||||
var args = new ApiAuthCheckEventArgs(authKey);
|
||||
OnCheckAuthentication?.Invoke(this, args);
|
||||
return args.Valid;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
}
|
||||
@@ -1,6 +1,6 @@
|
||||
using Newtonsoft.Json;
|
||||
|
||||
namespace Pilz.Networking.Api;
|
||||
namespace Pilz.Net.Api;
|
||||
|
||||
public class DefaultMessageSerializer : IMessageSerializer
|
||||
{
|
||||
@@ -1,7 +1,14 @@
|
||||
namespace Pilz.Networking.Api;
|
||||
namespace Pilz.Net.Api;
|
||||
|
||||
public interface IApiClient
|
||||
{
|
||||
string ApiUrl { get; }
|
||||
|
||||
string? AuthKey { get; set; }
|
||||
|
||||
IMessageSerializer Serializer { get; }
|
||||
|
||||
Task<ApiResponse> SendMessage<TResponse>(string url, ApiMessage message, IMessageSerializer? serializer = null);
|
||||
|
||||
Task<ApiResponse<TResponse>> SendRequest<TResponse>(string url, ApiMessage message, IMessageSerializer? serializer = null) where TResponse : ApiMessage;
|
||||
}
|
||||
22
Pilz.Net/Api/IApiServer.cs
Normal file
22
Pilz.Net/Api/IApiServer.cs
Normal file
@@ -0,0 +1,22 @@
|
||||
namespace Pilz.Net.Api;
|
||||
|
||||
public interface IApiServer
|
||||
{
|
||||
public delegate void OnCheckAuthenticationEventHandler(object sender, ApiAuthCheckEventArgs e);
|
||||
|
||||
event OnCheckAuthenticationEventHandler? OnCheckAuthentication;
|
||||
|
||||
string ApiUrl { get; }
|
||||
|
||||
bool EnableAuth { get; set; }
|
||||
|
||||
IMessageSerializer Serializer { get; }
|
||||
|
||||
void Start();
|
||||
|
||||
void Stop();
|
||||
|
||||
void RegisterHandler<T>(T instance) where T : class;
|
||||
|
||||
void RegisterHandler(Delegate handler);
|
||||
}
|
||||
@@ -1,4 +1,4 @@
|
||||
namespace Pilz.Networking.Api;
|
||||
namespace Pilz.Net.Api;
|
||||
|
||||
public interface IMessageSerializer
|
||||
{
|
||||
9
Pilz.Net/Api/MessageHandlerAttribute.cs
Normal file
9
Pilz.Net/Api/MessageHandlerAttribute.cs
Normal file
@@ -0,0 +1,9 @@
|
||||
namespace Pilz.Net.Api;
|
||||
|
||||
[AttributeUsage(AttributeTargets.Method)]
|
||||
public class MessageHandlerAttribute(string route) : Attribute
|
||||
{
|
||||
public string Route { get; set; } = route;
|
||||
public Type? Serializer { get; set; }
|
||||
public bool RequiesAuth { get; set; }
|
||||
}
|
||||
@@ -2,7 +2,7 @@
|
||||
using System.Data;
|
||||
using System.Net;
|
||||
|
||||
namespace Pilz.Networking;
|
||||
namespace Pilz.Net;
|
||||
|
||||
public abstract class ConnectionManagerBase(int port)
|
||||
{
|
||||
@@ -14,7 +14,7 @@ public abstract class ConnectionManagerBase(int port)
|
||||
public int Port { get; private set; } = port;
|
||||
public bool UseAssemblyQualifiedName { get; set; } = false;
|
||||
|
||||
public event RetriveDataEventHandler RetriveData;
|
||||
public event RetriveDataEventHandler? RetriveData;
|
||||
|
||||
public delegate void RetriveDataEventHandler(ConnectionManagerBase manager, string senderIP, string cmd, object content);
|
||||
|
||||
@@ -2,23 +2,23 @@
|
||||
using System.Net.NetworkInformation;
|
||||
using System.Net.Sockets;
|
||||
|
||||
namespace Pilz.Networking;
|
||||
namespace Pilz.Net;
|
||||
|
||||
public static class NetworkFeatures
|
||||
{
|
||||
public static IPAddress GetIPFromHost(string hostName)
|
||||
public static IPAddress? GetIPFromHost(string hostName)
|
||||
{
|
||||
return Dns.GetHostAddresses(hostName).FirstOrDefault(n => n.AddressFamily == AddressFamily.InterNetwork);
|
||||
}
|
||||
|
||||
public static object GetHostFromIP(string ip)
|
||||
public static object? GetHostFromIP(string ip)
|
||||
{
|
||||
return Dns.GetHostEntry(ip)?.HostName;
|
||||
}
|
||||
|
||||
public static UnicastIPAddressInformation GetLocalIPInformations()
|
||||
public static UnicastIPAddressInformation? GetLocalIPInformations()
|
||||
{
|
||||
UnicastIPAddressInformation addr = null;
|
||||
UnicastIPAddressInformation? addr = null;
|
||||
|
||||
foreach (NetworkInterface adapter in NetworkInterface.GetAllNetworkInterfaces())
|
||||
{
|
||||
@@ -35,19 +35,19 @@ public static class NetworkFeatures
|
||||
return addr;
|
||||
}
|
||||
|
||||
public static IPAddress GetLocalIPAddress()
|
||||
public static IPAddress? GetLocalIPAddress()
|
||||
{
|
||||
return GetLocalIPInformations()?.Address;
|
||||
}
|
||||
|
||||
public static IPAddress GetLocalIPv4Mask()
|
||||
public static IPAddress? GetLocalIPv4Mask()
|
||||
{
|
||||
return GetLocalIPInformations()?.IPv4Mask;
|
||||
}
|
||||
|
||||
public static IPAddress GetLocalBoradcastIP(UnicastIPAddressInformation ipInfo)
|
||||
{
|
||||
IPAddress ip = null;
|
||||
IPAddress? ip = null;
|
||||
byte[] myIPBytes = ipInfo.Address.GetAddressBytes();
|
||||
byte[] subnetBytes = ipInfo.IPv4Mask.GetAddressBytes();
|
||||
byte[] broadcastBytes = new byte[myIPBytes.Length];
|
||||
@@ -1,9 +1,7 @@
|
||||
<Project Sdk="Microsoft.NET.Sdk">
|
||||
|
||||
<PropertyGroup>
|
||||
<MyType>Windows</MyType>
|
||||
<TargetFrameworks>net8.0-windows</TargetFrameworks>
|
||||
<LangVersion>latest</LangVersion>
|
||||
<TargetFrameworks>net8.0</TargetFrameworks>
|
||||
<ImplicitUsings>enable</ImplicitUsings>
|
||||
<Nullable>enable</Nullable>
|
||||
</PropertyGroup>
|
||||
@@ -1,18 +1,13 @@
|
||||
using System.Net;
|
||||
using System.Net.Sockets;
|
||||
|
||||
namespace Pilz.Networking;
|
||||
namespace Pilz.Net;
|
||||
|
||||
public class TCPManager : ConnectionManagerBase
|
||||
public class TCPManager(int port) : ConnectionManagerBase(port)
|
||||
{
|
||||
private readonly TcpListener listener;
|
||||
private readonly TcpListener listener = new TcpListener(IPAddress.Any, port);
|
||||
public int BufferSize { get; set; } = 10240;
|
||||
|
||||
public TCPManager(int port) : base(port)
|
||||
{
|
||||
listener = new TcpListener(IPAddress.Any, port);
|
||||
}
|
||||
|
||||
public override void Start()
|
||||
{
|
||||
if (!IsListening)
|
||||
@@ -44,7 +39,7 @@ public class TCPManager : ConnectionManagerBase
|
||||
if (listener.Pending())
|
||||
{
|
||||
var tcp = listener.AcceptTcpClient();
|
||||
string ip = ((IPEndPoint)tcp.Client.RemoteEndPoint).Address.ToString();
|
||||
string ip = ((IPEndPoint)tcp.Client.RemoteEndPoint!).Address.ToString();
|
||||
var Stream = tcp.GetStream();
|
||||
byte[] buf = new byte[BufferSize];
|
||||
|
||||
@@ -1,12 +1,12 @@
|
||||
using System.Net;
|
||||
using System.Net.Sockets;
|
||||
|
||||
namespace Pilz.Networking;
|
||||
namespace Pilz.Net;
|
||||
|
||||
public class UDPManager : ConnectionManagerBase
|
||||
{
|
||||
private readonly UdpClient client;
|
||||
private Task listenTask = null;
|
||||
private Task? listenTask = null;
|
||||
private readonly CancellationTokenSource cancelTokenSource = new();
|
||||
private readonly CancellationToken cancelToken;
|
||||
public int MaxBufferSize { get; private set; } = 8192;
|
||||
@@ -43,7 +43,7 @@ public class UDPManager : ConnectionManagerBase
|
||||
{
|
||||
IsListening = false;
|
||||
cancelTokenSource.Cancel();
|
||||
listenTask.Wait();
|
||||
listenTask?.Wait();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,7 +0,0 @@
|
||||
namespace Pilz.Networking.CloudProviders.Nextcloud.Client.Apps.FileRetention.Model;
|
||||
|
||||
public enum RetentionTimeAfter
|
||||
{
|
||||
CreationDate,
|
||||
LastAccess
|
||||
}
|
||||
@@ -1,9 +0,0 @@
|
||||
namespace Pilz.Networking.CloudProviders.Nextcloud.Client.Apps.FileRetention.Model;
|
||||
|
||||
public enum RetentionTimeUnit
|
||||
{
|
||||
Day,
|
||||
Week,
|
||||
Month,
|
||||
Year
|
||||
}
|
||||
@@ -1,7 +0,0 @@
|
||||
using Pilz.Networking.CloudProviders.Nextcloud.Ocs.Responses;
|
||||
|
||||
namespace Pilz.Networking.CloudProviders.Nextcloud.Client.Apps.FileRetention.Ocs;
|
||||
|
||||
public class OcsResponseRetention : OcsResponse<OcsResponseDataArray<OcsResponseDataEntryRetention>>
|
||||
{
|
||||
}
|
||||
@@ -1,8 +0,0 @@
|
||||
namespace Pilz.Networking.CloudProviders.Nextcloud.Client.Apps.Tables.Model;
|
||||
|
||||
public enum ColumnSubtype
|
||||
{
|
||||
None,
|
||||
Unknown,
|
||||
Line
|
||||
}
|
||||
@@ -1,9 +0,0 @@
|
||||
namespace Pilz.Networking.CloudProviders.Nextcloud.Client.Apps.Tables.Model;
|
||||
|
||||
public enum ColumnType
|
||||
{
|
||||
Unknown,
|
||||
Text,
|
||||
Selection,
|
||||
DateTime
|
||||
}
|
||||
@@ -1,5 +0,0 @@
|
||||
namespace Pilz.Networking.CloudProviders.Nextcloud.Client.Apps.Tables.Model;
|
||||
|
||||
public class Columns : List<Column>
|
||||
{
|
||||
}
|
||||
@@ -1,5 +0,0 @@
|
||||
namespace Pilz.Networking.CloudProviders.Nextcloud.Client.Apps.Tables.Model;
|
||||
|
||||
public class RowSimple : List<object>
|
||||
{
|
||||
}
|
||||
@@ -1,5 +0,0 @@
|
||||
namespace Pilz.Networking.CloudProviders.Nextcloud.Client.Apps.Tables.Model;
|
||||
|
||||
public class Rows : List<Row>
|
||||
{
|
||||
}
|
||||
@@ -1,5 +0,0 @@
|
||||
namespace Pilz.Networking.CloudProviders.Nextcloud.Client.Apps.Tables.Model;
|
||||
|
||||
public class RowsSimple : List<RowSimple>
|
||||
{
|
||||
}
|
||||
@@ -1,7 +0,0 @@
|
||||
using Pilz.Networking.CloudProviders.Nextcloud.Ocs.Responses;
|
||||
|
||||
namespace Pilz.Networking.CloudProviders.Nextcloud.Client.Cloud.Ocs;
|
||||
|
||||
public class OcsResponseUser : OcsResponse<OcsResponseDataUser>
|
||||
{
|
||||
}
|
||||
@@ -1,5 +0,0 @@
|
||||
namespace Pilz.Networking.CloudProviders.Nextcloud.Ocs;
|
||||
|
||||
public class OcsData
|
||||
{
|
||||
}
|
||||
@@ -1,5 +0,0 @@
|
||||
namespace Pilz.Networking.CloudProviders.Nextcloud.Ocs.Responses;
|
||||
|
||||
public interface IOcsResponse
|
||||
{
|
||||
}
|
||||
@@ -1,5 +0,0 @@
|
||||
namespace Pilz.Networking.CloudProviders.Nextcloud.Ocs.Responses;
|
||||
|
||||
public interface IOcsResponseData
|
||||
{
|
||||
}
|
||||
@@ -1,5 +0,0 @@
|
||||
namespace Pilz.Networking.CloudProviders.Nextcloud.Ocs.Responses;
|
||||
|
||||
public interface IOcsResponseMeta
|
||||
{
|
||||
}
|
||||
@@ -1,5 +0,0 @@
|
||||
namespace Pilz.Networking.CloudProviders.Nextcloud.Ocs.Responses;
|
||||
|
||||
public class OcsResponseData : IOcsResponseData
|
||||
{
|
||||
}
|
||||
@@ -1,5 +0,0 @@
|
||||
namespace Pilz.Networking.CloudProviders.Nextcloud.Ocs.Responses;
|
||||
|
||||
public class OcsResponseDataEntry
|
||||
{
|
||||
}
|
||||
@@ -1,14 +0,0 @@
|
||||
namespace Pilz.Networking.Api;
|
||||
|
||||
public abstract class ApiMessage
|
||||
{
|
||||
internal protected virtual string? Serialize(ApiMessage message)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
internal protected virtual ApiMessage? Deserialize(string json)
|
||||
{
|
||||
|
||||
}
|
||||
}
|
||||
@@ -1,7 +0,0 @@
|
||||
namespace Pilz.Networking.Api;
|
||||
|
||||
public interface IApiServer : IApiClient
|
||||
{
|
||||
void RegisterHandler<T>(T instance) where T : class;
|
||||
void RegisterHandler(Delegate handler);
|
||||
}
|
||||
@@ -1,8 +0,0 @@
|
||||
namespace Pilz.Networking.Api;
|
||||
|
||||
[AttributeUsage(AttributeTargets.Method)]
|
||||
public class MessageHandlerAttribute(string url) : Attribute
|
||||
{
|
||||
public string Url { get; set; } = url;
|
||||
public Type? Serializer { get; set; }
|
||||
}
|
||||
4
Pilz.sln
4
Pilz.sln
@@ -25,13 +25,13 @@ Project("{778DAE3C-4631-46EA-AA77-85C1314464D9}") = "Pilz.Simple3DFileParser", "
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Pilz.LicenseHelper", "Pilz.LicenseHelper\Pilz.LicenseHelper.csproj", "{67593FF7-C1D1-4529-98C4-61CBD0615F08}"
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Pilz.Networking", "Pilz.Networking\Pilz.Networking.csproj", "{F7A0304A-C59E-0F5D-06C3-B43F63B2DBC6}"
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Pilz.Net", "Pilz.Net\Pilz.Net.csproj", "{F7A0304A-C59E-0F5D-06C3-B43F63B2DBC6}"
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Pilz.Cryptography", "Pilz.Cryptography\Pilz.Cryptography.csproj", "{3F5988E6-439E-4A9D-B2C6-47EFFB161AC6}"
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Pilz.UI.Telerik", "Pilz.UI.Telerik\Pilz.UI.Telerik.csproj", "{DF674119-CC28-40AA-968F-1E23D184A491}"
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Pilz.Networking.CloudProviders.Nextcloud", "Pilz.Networking.CloudProviders.Nextcloud\Pilz.Networking.CloudProviders.Nextcloud.csproj", "{A91E966B-3A82-4F32-A703-2FC1C7654FD1}"
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Pilz.Net.CloudProviders.Nextcloud", "Pilz.Net.CloudProviders.Nextcloud\Pilz.Net.CloudProviders.Nextcloud.csproj", "{A91E966B-3A82-4F32-A703-2FC1C7654FD1}"
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Pilz.Plugins", "Pilz.Plugins\Pilz.Plugins.csproj", "{1170FCA6-192D-42FE-A79F-49EE03035554}"
|
||||
EndProject
|
||||
|
||||
Reference in New Issue
Block a user