From e39d416aa60f3c9826509543738fae5f4562f2dc Mon Sep 17 00:00:00 2001 From: Aliwoto Date: Thu, 30 Sep 2021 15:40:28 +0000 Subject: [PATCH] Implement AuthenticateUser and CreateSession methods on class SocialvoidClient Signed-off-by: Aliwoto --- Socialvoid.png | Bin 0 -> 143538 bytes Socialvoid.sln | 22 + Socialvoid/Client/HttpClientMessageHandler.cs | 214 +++++++ Socialvoid/Client/SocialvoidClient.cs | 561 ++++++++++++++++++ Socialvoid/Client/SvClient.cs | 84 +++ .../AlreadyAuthenticatedException.cs | 85 +++ .../AuthenticationFailureException.cs | 88 +++ .../AuthenticationNotApplicableException.cs | 87 +++ .../BadSessionChallengeAnswerException.cs | 85 +++ .../IncorrectLoginCredentialsException.cs | 84 +++ ...ectTwoFactorAuthenticationCodeException.cs | 86 +++ .../NotAuthenticatedException.cs | 85 +++ .../PrivateAccessTokenRequiredException.cs | 88 +++ .../Errors/AuthenticationErrors/README.md | 19 + .../SessionExpiredException.cs | 85 +++ .../SessionNotFoundException.cs | 85 +++ ...woFactorAuthenticationRequiredException.cs | 87 +++ Socialvoid/Errors/ErrorCodes.cs | 328 ++++++++++ Socialvoid/Errors/GeneralException.cs | 227 +++++++ Socialvoid/Errors/MediaErrors/README.md | 3 + .../NetworkErrors/AlreadyRepostedException.cs | 85 +++ .../NetworkErrors/FileUploadErrorException.cs | 85 +++ .../NetworkErrors/PeerNotFoundException.cs | 85 +++ .../NetworkErrors/PostDeletedException.cs | 85 +++ .../NetworkErrors/PostNotFoundException.cs | 85 +++ Socialvoid/Errors/NetworkErrors/README.md | 12 + Socialvoid/Errors/README.md | 61 ++ .../RPCErrors/InternalErrorException.cs | 84 +++ .../RPCErrors/InvalidParamsException.cs | 85 +++ .../RPCErrors/InvalidRequestException.cs | 85 +++ .../RPCErrors/InvocationErrorException.cs | 85 +++ .../InvocationErrorWithExException.cs | 85 +++ .../RPCErrors/MethodNotFoundException.cs | 85 +++ .../NoMarshaledObjectFoundException.cs | 85 +++ .../Errors/RPCErrors/ParseErrorException.cs | 85 +++ .../RPCErrors/RequestCanceledException.cs | 85 +++ .../ResponseSerializationFailureException.cs | 85 +++ .../InternalServerErrorException.cs | 85 +++ Socialvoid/Errors/ServerErrors/README.md | 8 + .../InvalidBiographyException.cs | 87 +++ .../InvalidClientNameException.cs | 87 +++ .../InvalidClientPrivateHashException.cs | 86 +++ .../InvalidClientPublicHashException.cs | 85 +++ .../InvalidFirstNameException.cs | 87 +++ .../InvalidLastNameException.cs | 87 +++ .../InvalidPasswordException.cs | 85 +++ .../InvalidPeerInputException.cs | 85 +++ .../InvalidPlatformException.cs | 87 +++ .../InvalidPostTextException.cs | 87 +++ .../InvalidSessionIdentificationException.cs | 88 +++ .../InvalidUsernameException.cs | 85 +++ .../InvalidVersionException.cs | 85 +++ Socialvoid/Errors/ValidationErrors/README.md | 21 + .../UsernameAlreadyExistsException.cs | 86 +++ Socialvoid/Icon.ico | Bin 0 -> 67646 bytes Socialvoid/Icon.png | Bin 0 -> 143538 bytes Socialvoid/JObjects/JArgs.cs | 81 +++ Socialvoid/JObjects/JError.cs | 94 +++ Socialvoid/JObjects/JRequest.cs | 122 ++++ Socialvoid/JObjects/JResponse.cs | 145 +++++ Socialvoid/Methods/CreateSession.cs | 10 + Socialvoid/Security/SessionEstablished.cs | 136 +++++ Socialvoid/Security/SessionIdentification.cs | 106 ++++ Socialvoid/Socialvoid.csproj | 161 +++++ Tests/Client/AuthenticateUser.cs | 71 +++ Tests/Client/client_info.json | 8 + Tests/Tests.csproj | 1 + 67 files changed, 6006 insertions(+) create mode 100644 Socialvoid.png create mode 100644 Socialvoid.sln create mode 100644 Socialvoid/Client/HttpClientMessageHandler.cs create mode 100644 Socialvoid/Client/SocialvoidClient.cs create mode 100644 Socialvoid/Client/SvClient.cs create mode 100644 Socialvoid/Errors/AuthenticationErrors/AlreadyAuthenticatedException.cs create mode 100644 Socialvoid/Errors/AuthenticationErrors/AuthenticationFailureException.cs create mode 100644 Socialvoid/Errors/AuthenticationErrors/AuthenticationNotApplicableException.cs create mode 100644 Socialvoid/Errors/AuthenticationErrors/BadSessionChallengeAnswerException.cs create mode 100644 Socialvoid/Errors/AuthenticationErrors/IncorrectLoginCredentialsException.cs create mode 100644 Socialvoid/Errors/AuthenticationErrors/IncorrectTwoFactorAuthenticationCodeException.cs create mode 100644 Socialvoid/Errors/AuthenticationErrors/NotAuthenticatedException.cs create mode 100644 Socialvoid/Errors/AuthenticationErrors/PrivateAccessTokenRequiredException.cs create mode 100644 Socialvoid/Errors/AuthenticationErrors/README.md create mode 100644 Socialvoid/Errors/AuthenticationErrors/SessionExpiredException.cs create mode 100644 Socialvoid/Errors/AuthenticationErrors/SessionNotFoundException.cs create mode 100644 Socialvoid/Errors/AuthenticationErrors/TwoFactorAuthenticationRequiredException.cs create mode 100644 Socialvoid/Errors/ErrorCodes.cs create mode 100644 Socialvoid/Errors/GeneralException.cs create mode 100644 Socialvoid/Errors/MediaErrors/README.md create mode 100644 Socialvoid/Errors/NetworkErrors/AlreadyRepostedException.cs create mode 100644 Socialvoid/Errors/NetworkErrors/FileUploadErrorException.cs create mode 100644 Socialvoid/Errors/NetworkErrors/PeerNotFoundException.cs create mode 100644 Socialvoid/Errors/NetworkErrors/PostDeletedException.cs create mode 100644 Socialvoid/Errors/NetworkErrors/PostNotFoundException.cs create mode 100644 Socialvoid/Errors/NetworkErrors/README.md create mode 100644 Socialvoid/Errors/README.md create mode 100644 Socialvoid/Errors/RPCErrors/InternalErrorException.cs create mode 100644 Socialvoid/Errors/RPCErrors/InvalidParamsException.cs create mode 100644 Socialvoid/Errors/RPCErrors/InvalidRequestException.cs create mode 100644 Socialvoid/Errors/RPCErrors/InvocationErrorException.cs create mode 100644 Socialvoid/Errors/RPCErrors/InvocationErrorWithExException.cs create mode 100644 Socialvoid/Errors/RPCErrors/MethodNotFoundException.cs create mode 100644 Socialvoid/Errors/RPCErrors/NoMarshaledObjectFoundException.cs create mode 100644 Socialvoid/Errors/RPCErrors/ParseErrorException.cs create mode 100644 Socialvoid/Errors/RPCErrors/RequestCanceledException.cs create mode 100644 Socialvoid/Errors/RPCErrors/ResponseSerializationFailureException.cs create mode 100644 Socialvoid/Errors/ServerErrors/InternalServerErrorException.cs create mode 100644 Socialvoid/Errors/ServerErrors/README.md create mode 100644 Socialvoid/Errors/ValidationErrors/InvalidBiographyException.cs create mode 100644 Socialvoid/Errors/ValidationErrors/InvalidClientNameException.cs create mode 100644 Socialvoid/Errors/ValidationErrors/InvalidClientPrivateHashException.cs create mode 100644 Socialvoid/Errors/ValidationErrors/InvalidClientPublicHashException.cs create mode 100644 Socialvoid/Errors/ValidationErrors/InvalidFirstNameException.cs create mode 100644 Socialvoid/Errors/ValidationErrors/InvalidLastNameException.cs create mode 100644 Socialvoid/Errors/ValidationErrors/InvalidPasswordException.cs create mode 100644 Socialvoid/Errors/ValidationErrors/InvalidPeerInputException.cs create mode 100644 Socialvoid/Errors/ValidationErrors/InvalidPlatformException.cs create mode 100644 Socialvoid/Errors/ValidationErrors/InvalidPostTextException.cs create mode 100644 Socialvoid/Errors/ValidationErrors/InvalidSessionIdentificationException.cs create mode 100644 Socialvoid/Errors/ValidationErrors/InvalidUsernameException.cs create mode 100644 Socialvoid/Errors/ValidationErrors/InvalidVersionException.cs create mode 100644 Socialvoid/Errors/ValidationErrors/README.md create mode 100644 Socialvoid/Errors/ValidationErrors/UsernameAlreadyExistsException.cs create mode 100644 Socialvoid/Icon.ico create mode 100644 Socialvoid/Icon.png create mode 100644 Socialvoid/JObjects/JArgs.cs create mode 100644 Socialvoid/JObjects/JError.cs create mode 100644 Socialvoid/JObjects/JRequest.cs create mode 100644 Socialvoid/JObjects/JResponse.cs create mode 100644 Socialvoid/Methods/CreateSession.cs create mode 100644 Socialvoid/Security/SessionEstablished.cs create mode 100644 Socialvoid/Security/SessionIdentification.cs create mode 100644 Socialvoid/Socialvoid.csproj create mode 100644 Tests/Client/AuthenticateUser.cs create mode 100644 Tests/Client/client_info.json diff --git a/Socialvoid.png b/Socialvoid.png new file mode 100644 index 0000000000000000000000000000000000000000..7bfa7cd6790512f60c08984792097add65724cf9 GIT binary patch literal 143538 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 u +/// A that sends requests and receives responses over HTTP using . +/// +/// +/// See the spec for JSON-RPC over HTTP here: https://www.jsonrpc.org/historical/json-rpc-over-http.html. +/// Only the POST method is supported. +/// +public class HttpClientMessageHandler : IJsonRpcMessageHandler +{ + #nullable enable + private static readonly ReadOnlyCollection AllowedContentTypes = new ReadOnlyCollection(new string[] + { + "application/json-rpc", + "application/json", + "application/jsonrequest", + }); + + /// + /// The Content-Type header to use in requests. + /// + private static readonly MediaTypeHeaderValue ContentTypeHeader = new MediaTypeHeaderValue(AllowedContentTypes[0]); + + /// + /// The Accept header to use in requests. + /// + private static readonly MediaTypeWithQualityHeaderValue AcceptHeader = new MediaTypeWithQualityHeaderValue(AllowedContentTypes[0]); + + private readonly HttpClient httpClient; + private readonly Uri requestUri; + private readonly AsyncQueue incomingMessages = new AsyncQueue(); + + /// + /// Backing field for the property. + /// + private TraceSource traceSource = new TraceSource(nameof(JsonRpc)); + + /// + /// Initializes a new instance of the class + /// with the default . + /// + /// The to use for transmitting JSON-RPC requests. + /// The URI to POST to where the entity will be the JSON-RPC message. + public HttpClientMessageHandler(HttpClient httpClient, Uri requestUri) + : this(httpClient, requestUri, new JsonMessageFormatter()) + { + } + + /// + /// Initializes a new instance of the class. + /// + /// The to use for transmitting JSON-RPC requests. + /// The URI to POST to where the entity will be the JSON-RPC message. + /// The message formatter. + public HttpClientMessageHandler(HttpClient httpClient, Uri requestUri, IJsonRpcMessageFormatter formatter) + { + this.httpClient = httpClient ?? throw new ArgumentNullException(nameof(httpClient)); + this.requestUri = requestUri ?? throw new ArgumentNullException(nameof(requestUri)); + this.Formatter = formatter ?? throw new ArgumentNullException(nameof(formatter)); + } + + /// + /// Event IDs raised to our . + /// + public enum TraceEvent + { + /// + /// An HTTP response with an error status code was received. + /// + HttpErrorStatusCodeReceived, + } + + /// + /// Gets or sets the used to trace details about the HTTP transport operations. + /// + /// The value can never be null. + /// Thrown by the setter if a null value is provided. + public TraceSource TraceSource + { + get => this.traceSource; + set + { + Requires.NotNull(value, nameof(value)); + this.traceSource = value; + } + } + + /// + public bool CanRead => true; + + /// + public bool CanWrite => true; + + /// + public IJsonRpcMessageFormatter Formatter { get; } + + /// + public async ValueTask ReadAsync(CancellationToken cancellationToken) + { + var response = await this.incomingMessages.DequeueAsync(cancellationToken).ConfigureAwait(false); + + var responseStream = await response.Content.ReadAsStreamAsync().ConfigureAwait(false); + using (var sequence = new Sequence()) + { +#if NETCOREAPP2_1 + int bytesRead; + do + { + var memory = sequence.GetMemory(4096); + bytesRead = await responseStream.ReadAsync(memory, cancellationToken).ConfigureAwait(false); + sequence.Advance(bytesRead); + } + while (bytesRead > 0); +#else + var buffer = ArrayPool.Shared.Rent(4096); + try + { + int bytesRead; + while (true) + { + bytesRead = await responseStream.ReadAsync(buffer, 0, buffer.Length).ConfigureAwait(false); + if (bytesRead == 0) + { + break; + } + + var memory = sequence.GetMemory(bytesRead); + buffer.AsMemory(0, bytesRead).CopyTo(memory); + sequence.Advance(bytesRead); + } + } + finally + { + ArrayPool.Shared.Return(buffer); + } +#endif + + return this.Formatter.Deserialize(sequence); + } + } + + /// + public async ValueTask WriteAsync(JsonRpcMessage content, CancellationToken cancellationToken) + { + // Cast here because we only support transmitting requests anyway. + var contentAsRequest = (JsonRpcRequest)content; + + // The JSON-RPC over HTTP spec requires that we supply a Content-Length header, so we have to serialize up front + // in order to measure its length. + using (var sequence = new Sequence()) + { + this.Formatter.Serialize(sequence, content); + + var requestMessage = new HttpRequestMessage(HttpMethod.Post, this.requestUri); + requestMessage.Headers.Accept.Add(AcceptHeader); + requestMessage.Content = new StreamContent(sequence.AsReadOnlySequence.AsStream()); + requestMessage.Content.Headers.ContentType = ContentTypeHeader; + requestMessage.Content.Headers.ContentLength = sequence.Length; + + var response = await this.httpClient.SendAsync(requestMessage, cancellationToken).ConfigureAwait(false); + if (response.IsSuccessStatusCode) + { + VerifyThrowStatusCode(contentAsRequest.IsResponseExpected ? HttpStatusCode.OK : HttpStatusCode.NoContent, response.StatusCode); + } + else + { + this.TraceSource.TraceEvent(TraceEventType.Error, (int)TraceEvent.HttpErrorStatusCodeReceived, "Received HTTP {0} {1} response to JSON-RPC request for method \"{2}\".", (int)response.StatusCode, response.StatusCode, contentAsRequest.Method); + } + + // The response is expected to be a success code, or an error code with a content-type that we can deserialize. + if (response.IsSuccessStatusCode || (response.Content?.Headers.ContentType?.MediaType is string mediaType && AllowedContentTypes.Contains(mediaType))) + { + // Some requests don't merit response messages, such as notifications in JSON-RPC. + // Servers may communicate this with 202 or 204 HTTPS status codes in the response. + // Others may (poorly?) send a 200 response but with an empty entity. + if (response.Content?.Headers.ContentLength > 0) + { + // Make the response available for receiving. + this.incomingMessages.Enqueue(response); + } + } + else + { + // Throw an exception because of the unexpected failure from the server without a JSON-RPC message attached. + response.EnsureSuccessStatusCode(); + } + } + } + + private static void VerifyThrowStatusCode(HttpStatusCode expected, HttpStatusCode actual) + { + if (expected != actual) + { + throw new BadRpcHeaderException($"Expected \"{(int)expected} {expected}\" response but received \"{(int)actual} {actual}\" instead."); + } + } +} \ No newline at end of file diff --git a/Socialvoid/Client/SocialvoidClient.cs b/Socialvoid/Client/SocialvoidClient.cs new file mode 100644 index 0000000..07a04a8 --- /dev/null +++ b/Socialvoid/Client/SocialvoidClient.cs @@ -0,0 +1,561 @@ +using System; +using System.Text.Encodings; +using System.Text; +using System.Net.Http; +using System.Collections.Generic; +using System.IO; +using StreamJsonRpc; +using StreamJsonRpc.Protocol; +using Socialvoid.Security; +using Socialvoid.JObjects; +using Socialvoid.Errors.ServerErrors; +using Socialvoid.Errors.AuthenticationErrors; +using Socialvoid.Errors.ValidationErrors; +using MType = System.Net.Http.Headers.MediaTypeHeaderValue; + +namespace Socialvoid.Client +{ + /// + /// Socialvoid client. + /// since: v0.0.0 + /// + public abstract class SocialvoidClient + { + //------------------------------------------------- + #region Constant's Region + /// + /// the content type of all of our http requests. + /// since: v0.0.0 + /// + protected internal const string ContentType = "application/json-rpc"; + /// + /// the username key in jsonrpc request params. + /// since: v0.0.0 + /// + protected const string UsernameKey = "username"; + /// + /// the password key in jsonrpc request params. + /// since: v0.0.0 + /// + protected const string PasswordKey = "password"; + /// + /// the otp key in jsonrpc request params. + /// since: v0.0.0 + /// + protected const string OtpKey = "otp"; + /// + /// the public hash key in jsonrpc request params. + /// since: v0.0.0 + /// + protected const string PublicHashKey = "public_hash"; + /// + /// the private hash key in jsonrpc request params. + /// since: v0.0.0 + /// + protected const string PrivateHashKey = "private_hash"; + /// + /// the platform key in jsonrpc request params. + /// since: v0.0.0 + /// + protected const string PlatformKey = "platform"; + /// + /// the name key in jsonrpc request params. + /// since: v0.0.0 + /// + protected const string NameKey = "name"; + /// + /// the version key in jsonrpc request params. + /// since: v0.0.0 + /// + protected const string VersionKey = "version"; + /// + /// authenticate_user method value. + /// since: v0.0.0 + /// + protected const string AuthenticateUserMethod = "session.authenticate_user"; + /// + /// authenticate_user method value. + /// since: v0.0.0 + /// + protected const string CreateSessionMethod = "session.create"; + /// + /// authenticate_user method value. + /// since: v0.0.0 + /// + protected const string SessionIDKey = "session_identification"; + #endregion + //------------------------------------------------- + #region static Properties Region + // some members here + #endregion + //------------------------------------------------- + #region Properties Region + /// + /// The public hash of the client. + /// since: v0.0.0 + /// + public string PublicHash { get; protected set; } + /// + /// The private hash of the client. + /// since: v0.0.0 + /// + public string PrivateHash { get; protected set; } + /// + /// The platform of the client. + /// since: v0.0.0 + /// + public string Platform { get; protected set; } + /// + /// The name of the client. + /// since: v0.0.0 + /// + public string ClientName { get; protected set; } + /// + /// The version of the client. + /// since: v0.0.0 + /// + public string Version { get; protected set; } + /// + /// + /// since: v0.0.0 + /// + public HttpClient HttpClient { get; protected set; } + #endregion + //------------------------------------------------- + #region static field's Region + // some members here + #endregion + //------------------------------------------------- + #region field's Region + /// + /// since: v0.0.0 + /// + protected JsonMessageFormatter _formatter = new(Encoding.UTF8); + /// + /// the endpoint url of socialvoid servers. + /// since: v0.0.0 + /// + protected internal string _endpoint = "http://socialvoid.qlg1.com:5601/"; + /// + /// Session object of this client. + /// since: v0.0.0 + /// + protected internal SessionEstablished _session; + /// + /// if the client should send an otp answer in the next request, + /// this field should be set to true. + /// since: v0.0.0 + /// + protected bool _should_otp; + /// + /// the last otp value of the client which should be sent in the + /// next jsonrpc request. + /// since: v0.0.0 + /// + protected string _otp; + /// + /// since: v0.0.0 + /// + protected readonly MType _contentTypeValue = MType.Parse(ContentType); + #endregion + //------------------------------------------------- + #region static event field's Region + // some members here + #endregion + //------------------------------------------------- + #region event field's Region + // some members here + #endregion + //------------------------------------------------- + #region Constructor's Region + /// + /// Creates a new instance of the class. + /// since: v0.0.0 + /// + /// + /// the public hash of the client. + /// + /// + /// the private hash of the client. + /// + /// + /// the platform of the client. + /// + /// + /// the client name. + /// + /// + /// the version of the client. + /// + protected SocialvoidClient(string publicHash, string privateHash, + string platform, string name, string version) + { + PublicHash = publicHash; + PrivateHash = privateHash; + Platform = platform; + ClientName = name; + Version = version; + HttpClient = new(); + } + + + #endregion + //------------------------------------------------- + #region Destructor's Region + // some members here + #endregion + //------------------------------------------------- + #region Initialize Method's Region + // some methods here + #endregion + //------------------------------------------------- + #region Graphical Method's Region + // some methods here + #endregion + //------------------------------------------------- + #region event Method's Region + // some methods here + #endregion + //------------------------------------------------- + #region overrided Method's Region + // some methods here + #endregion + //------------------------------------------------- + #region ordinary Method's Region + + /// + /// CreateSession method (session.create), establishes a new session + /// to the network. + /// Please do notice that new and unauthenticated sessions + /// expires after 10 minutes of inactivity, authenticating to the session + /// will increase the expiration time to 72 hours of inactivity. This timer + /// is reset whenever the session is used in one way or another. + /// since: v0.0.0 + /// + /// + /// Thrown if the server encounters an internal error. + /// + /// + /// Thrown if the parameter passed as client name is not valid. + /// + /// + /// Thrown if the parameter passed as public hash is not valid. + /// + /// + /// Thrown if the parameter passed as private hash is not valid. + /// + /// + /// Thrown if the parameter passed as platform is not valid. + /// + /// + /// Thrown if the parameter passed as version is not valid. + /// + public virtual SessionEstablished CreateSession() + { + JArgs args = new(){ + {PublicHashKey, PublicHash}, + {PrivateHashKey, PrivateHash}, + {PlatformKey, Platform}, + //{NameKey, ClientName}, + {VersionKey, Version}, + }; + + + var request = GetRpcRequest(CreateSessionMethod, args); + + var message = new HttpRequestMessage(HttpMethod.Post, _endpoint); + message.Content = SerializeContent(request); + message.Content.Headers.ContentType = _contentTypeValue; + var jresp = ParseContent(message); + + return null; + } + /// + /// AuthenticateUser method (session.authenticate_user), + /// Authenticates a user via a Username and Password combination. + /// Optionally two-factor authentication if the account has enabled it. + /// Once authenticated, the session will be able to access methods that + /// requires authentication and preform operations as the authenticated + /// user. + /// since: v0.0.0 + /// + /// + /// The Session Identification object. + /// + /// + /// The username of the user to authenticate to. + /// + /// + /// The password used to authenticate to this account. + /// + /// + /// The optional one-time password used to authenticate to this account. + /// It will be ignored by server if empty or larger than 64 characters. + /// + /// + /// Thrown if the server encounters an internal error. + /// + /// + /// Thrown if the authentication fails. + /// + /// + /// Thrown if the user is already authenticated. + /// + /// + /// Thrown if the user is not able to authenticate. + /// + /// + /// Thrown if the session challenge answer is invalid. + /// + /// + /// Thrown if the username or password is incorrect. + /// + /// + /// Thrown if the two-factor authentication code is incorrect. + /// + /// + /// Thrown if the user is not authenticated and the private access token is required. + /// + /// + /// Thrown if the session has expired. + /// + /// + /// Thrown if two-factor authentication is required. + /// + public virtual void AuthenticateUser(SessionIdentification sessionID, + string username, string password, string otp = null) + { + JArgs args = new(){ + {UsernameKey, username}, + {PasswordKey, password}, + {SessionIDKey, sessionID}, + }; + + // check if the passed-by otp argument is valid or not. + // if yes, ignore _otp field and use user's specified otp value. + // otherwise check for _should_otp and see if we should send an + // otp answer or not. + if (IsOtpValid(otp)) + { + args.Add(OtpKey, otp); + } + else if (_should_otp && IsOtpValid(otp)) + { + // after adding otp answer to args, don't forget to set + // _should_otp to false (and _otp to null). + args.Add(OtpKey, _otp); + _should_otp = false; + _otp = null; + } + + var request = GetRpcRequest(AuthenticateUserMethod, args); + + var message = new HttpRequestMessage(HttpMethod.Post, _endpoint); + message.Content = SerializeContent(request); + message.Content.Headers.ContentType = _contentTypeValue; + var resp = HttpClient.Send(message); + var contentStr = ReadFromContent(resp.Content); + + Console.WriteLine(contentStr); + } + + + #endregion + //------------------------------------------------- + #region Get Method's Region + /// + /// Gets the session of this if and only + /// if you have already established a session (or has loaded it from a file); + /// oterwise it will just return a null object instead of throwing an exception. + /// since: v0.0.0 + /// + public virtual SessionEstablished GetSession() + { + return _session; + } + /// + /// since: v0.0.0 + /// + /// + /// the method. + /// + /// + /// the arguments. + /// + /// + /// the request ID. + /// + /// + /// set it to `true` if you want this request to have requestID parameter + /// set. (if the passed-by id paramater is null, this method will generate + /// a new id itself.) + /// + protected internal JRequest GetRpcRequest(string method, + JArgs args = null, + Nullable id = null, + bool useID = true) + { + if (string.IsNullOrWhiteSpace(method)) + { + throw new ArgumentException( + "method name in a rpc request cannot be null or empty", + nameof(method)); + } + if (useID && (id == null)) + { + id = DateTime.Now.Ticks; + } + + return useID && id != null && id.HasValue ? + new() + { + Method = method, + Arguments = args, + ID = id.Value, + } : + new() + { + Method = method, + Arguments = args, + }; + } + + /// + /// since: v0.0.0 + /// + protected StringContent SerializeContent(JRequest request) + { + return new(request.Serialize()); + } + /// + /// Parses the content of a as a + /// . + /// + /// + /// + protected internal JResponse ParseContent( + HttpRequestMessage message, + bool ex = true) + where VType : class + { + if (HttpClient == null) + { + throw new InvalidOperationException("HttpClient wasn't initialized"); + } + var resp = HttpClient.Send(message); + if (resp == null) + { + throw new InvalidOperationException("HttpClient.Send returned null"); + } + + return ParseContent(resp.Content, ex); + } + #endregion + //------------------------------------------------- + #region Set Method's Region + // some methods here + #endregion + //------------------------------------------------- + #region static Method's Region + /// + /// Creates a new instance of the class. + /// since: v0.0.0 + /// + /// + /// the public hash of the client. + /// + /// + /// the private hash of the client. + /// + /// + /// the platform of the client. + /// + /// + /// the client name. + /// + /// + /// the version of the client. + /// + public static SocialvoidClient GetClient(string publicHash, string privateHash, + string platform, string name, string version) + { + if (string.IsNullOrWhiteSpace(publicHash) || publicHash.Length != 64) + { + throw new ArgumentException( + "publicHash parameter is invalid", + nameof(publicHash)); + } + if (string.IsNullOrWhiteSpace(privateHash) || privateHash.Length != 64) + { + throw new ArgumentException( + "privateHash parameter is invalid", + nameof(privateHash)); + } + if (string.IsNullOrWhiteSpace(platform)) + { + throw new ArgumentException( + "platform cannot be null or empty", + nameof(platform)); + } + if (string.IsNullOrWhiteSpace(version)) + { + throw new ArgumentException( + "version cannot be null or empty", + nameof(version)); + } + return new SvClient(publicHash, privateHash, platform, name, version); + } + + /// + /// Checks if a string can be sent as a TOTOP answer or not. + /// since: v0.0.0 + /// + /// + /// the otp string to check. + /// + /// + /// true if the otp string is valid; otherwise false. + /// + protected internal static bool IsOtpValid(string otp) + { + return !(string.IsNullOrWhiteSpace(otp) || otp.Length > 64); + } + /// + /// reads the content of a as a string. + /// returns null if the stream cannot be read. + /// + /// + /// + protected internal static string ReadFromContent(HttpContent content) + { + var stream = content.ReadAsStream(); + if (stream == null || !stream.CanRead) + { + return null; + } + + return new StreamReader(stream).ReadToEnd(); + } + /// + /// Parses the content of a as a + /// . + /// + /// + /// + protected internal static JResponse ParseContent( + HttpContent content, + bool ex = true) + where VType : class + { + var jresp = JResponse.Deserialize(ReadFromContent(content)); + if (ex && jresp.HasError()) + { + throw jresp.GetException(); + } + + return jresp; + } + #endregion + //------------------------------------------------- + } +} diff --git a/Socialvoid/Client/SvClient.cs b/Socialvoid/Client/SvClient.cs new file mode 100644 index 0000000..59a8071 --- /dev/null +++ b/Socialvoid/Client/SvClient.cs @@ -0,0 +1,84 @@ +using System; + +namespace Socialvoid.Client +{ + internal sealed class SvClient : SocialvoidClient + { + //------------------------------------------------- + #region Constant's Region + // some members here + #endregion + //------------------------------------------------- + #region static Properties Region + // some members here + #endregion + //------------------------------------------------- + #region Properties Region + // some members here + #endregion + //------------------------------------------------- + #region static field's Region + // some members here + #endregion + //------------------------------------------------- + #region field's Region + // some members here + #endregion + //------------------------------------------------- + #region static event field's Region + // some members here + #endregion + //------------------------------------------------- + #region event field's Region + // some members here + #endregion + //------------------------------------------------- + #region Constructor's Region + public SvClient(string publicHash, string privateHash, + string platform, string name, string version) : + base(publicHash, privateHash, platform, name, version) + { + ; + } + + + #endregion + //------------------------------------------------- + #region Destructor's Region + // some members here + #endregion + //------------------------------------------------- + #region Initialize Method's Region + // some methods here + #endregion + //------------------------------------------------- + #region Graphical Method's Region + // some methods here + #endregion + //------------------------------------------------- + #region event Method's Region + // some methods here + #endregion + //------------------------------------------------- + #region overrided Method's Region + // some methods here + #endregion + //------------------------------------------------- + #region ordinary Method's Region + // some methods here + #endregion + //------------------------------------------------- + #region Get Method's Region + // some methods here + #endregion + //------------------------------------------------- + #region Set Method's Region + // some methods here + #endregion + //------------------------------------------------- + #region static Method's Region + // some methods here + #endregion + //------------------------------------------------- + } +} \ No newline at end of file diff --git a/Socialvoid/Errors/AuthenticationErrors/AlreadyAuthenticatedException.cs b/Socialvoid/Errors/AuthenticationErrors/AlreadyAuthenticatedException.cs new file mode 100644 index 0000000..1295340 --- /dev/null +++ b/Socialvoid/Errors/AuthenticationErrors/AlreadyAuthenticatedException.cs @@ -0,0 +1,85 @@ +/* + * This file is part of Socialvoid.NET Project (https://github.com/Intellivoid/Socialvoid.NET). + * Copyright (c) 2021 Socialvoid.NET Authors. + * + * This library is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, version 3. + * + * This library is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this source code of library. + * If not, see . + */ + +namespace Socialvoid.Errors.AuthenticationErrors +{ + /// + /// This exception will be raised when the client is attempting + /// to authenticate when already authenticated. + /// Since: v0.0.0 + /// + public sealed class AlreadyAuthenticatedException : GeneralException + { + //------------------------------------------------- + #region Constant's Region + // some members here + #endregion + //------------------------------------------------- + #region static Properties Region + // some members here + #endregion + //------------------------------------------------- + #region Properties Region + /// + /// The error code + /// will be returned because the client is attempting to + /// authenticate while it's already authenticated. + /// Since: v0.0.0 + /// + public override ErrorCodes ErrorCode + { + get + { + return ErrorCodes.AlreadyAuthenticated; + } + } + #endregion + //------------------------------------------------- + #region static field's Region + // some members here + #endregion + //------------------------------------------------- + #region field's Region + // some members here + #endregion + //------------------------------------------------- + #region static event field's Region + // some members here + #endregion + //------------------------------------------------- + #region event field's Region + // some members here + #endregion + //------------------------------------------------- + #region Constructor's Region + /// + /// Creates a new instance of . + /// Since: v0.0.0 + /// + internal AlreadyAuthenticatedException(string message) : base(message) + { + ; + } + #endregion + //------------------------------------------------- + #region Destructor's Region + // some members here + #endregion + //------------------------------------------------- + } +} diff --git a/Socialvoid/Errors/AuthenticationErrors/AuthenticationFailureException.cs b/Socialvoid/Errors/AuthenticationErrors/AuthenticationFailureException.cs new file mode 100644 index 0000000..8344b02 --- /dev/null +++ b/Socialvoid/Errors/AuthenticationErrors/AuthenticationFailureException.cs @@ -0,0 +1,88 @@ +/* + * This file is part of Socialvoid.NET Project (https://github.com/Intellivoid/Socialvoid.NET). + * Copyright (c) 2021 Socialvoid.NET Authors. + * + * This library is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, version 3. + * + * This library is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this source code of library. + * If not, see . + */ + +namespace Socialvoid.Errors.AuthenticationErrors +{ + /// + /// This exception will be raised when the authentication process failed + /// for some unexpected reason; you need to see the exception message + /// for further details. + /// Since: v0.0.0 + /// + public sealed class AuthenticationFailureException : GeneralException + { + //------------------------------------------------- + #region Constant's Region + // some members here + #endregion + //------------------------------------------------- + #region static Properties Region + // some members here + #endregion + //------------------------------------------------- + #region Properties Region + /// + /// The error code + /// will be returned because the authentication process failed + /// for some unexpected reason; + /// please see the message for further details. + /// Since: v0.0.0 + /// + public override ErrorCodes ErrorCode + { + get + { + return ErrorCodes.AuthenticationFailure; + } + } + #endregion + //------------------------------------------------- + #region static field's Region + // some members here + #endregion + //------------------------------------------------- + #region field's Region + // some members here + #endregion + //------------------------------------------------- + #region static event field's Region + // some members here + #endregion + //------------------------------------------------- + #region event field's Region + // some members here + #endregion + //------------------------------------------------- + #region Constructor's Region + /// + /// Creates a new instance of + /// . + /// Since: v0.0.0 + /// + internal AuthenticationFailureException(string message) : base(message) + { + ; + } + #endregion + //------------------------------------------------- + #region Destructor's Region + // some members here + #endregion + //------------------------------------------------- + } +} diff --git a/Socialvoid/Errors/AuthenticationErrors/AuthenticationNotApplicableException.cs b/Socialvoid/Errors/AuthenticationErrors/AuthenticationNotApplicableException.cs new file mode 100644 index 0000000..5d72633 --- /dev/null +++ b/Socialvoid/Errors/AuthenticationErrors/AuthenticationNotApplicableException.cs @@ -0,0 +1,87 @@ +/* + * This file is part of Socialvoid.NET Project (https://github.com/Intellivoid/Socialvoid.NET). + * Copyright (c) 2021 Socialvoid.NET Authors. + * + * This library is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, version 3. + * + * This library is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this source code of library. + * If not, see . + */ + +namespace Socialvoid.Errors.AuthenticationErrors +{ + /// + /// This exception will be raised when the user does not support + /// this method of authentication; + /// please see the message for further details. + /// Since: v0.0.0 + /// + public sealed class AuthenticationNotApplicableException : GeneralException + { + //------------------------------------------------- + #region Constant's Region + // some members here + #endregion + //------------------------------------------------- + #region static Properties Region + // some members here + #endregion + //------------------------------------------------- + #region Properties Region + /// + /// The error code + /// will be returned because the user does not support this method + /// of authentication; please see the message for further details. + /// Since: v0.0.0 + /// + public override ErrorCodes ErrorCode + { + get + { + return ErrorCodes.AuthenticationNotApplicable; + } + } + #endregion + //------------------------------------------------- + #region static field's Region + // some members here + #endregion + //------------------------------------------------- + #region field's Region + // some members here + #endregion + //------------------------------------------------- + #region static event field's Region + // some members here + #endregion + //------------------------------------------------- + #region event field's Region + // some members here + #endregion + //------------------------------------------------- + #region Constructor's Region + /// + /// Creates a new instance of + /// . + /// Since: v0.0.0 + /// + internal AuthenticationNotApplicableException(string message) : base(message) + { + ; + } + #endregion + //------------------------------------------------- + #region Destructor's Region + // some members here + #endregion + //------------------------------------------------- + } +} diff --git a/Socialvoid/Errors/AuthenticationErrors/BadSessionChallengeAnswerException.cs b/Socialvoid/Errors/AuthenticationErrors/BadSessionChallengeAnswerException.cs new file mode 100644 index 0000000..d446888 --- /dev/null +++ b/Socialvoid/Errors/AuthenticationErrors/BadSessionChallengeAnswerException.cs @@ -0,0 +1,85 @@ +/* + * This file is part of Socialvoid.NET Project (https://github.com/Intellivoid/Socialvoid.NET). + * Copyright (c) 2021 Socialvoid.NET Authors. + * + * This library is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, version 3. + * + * This library is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this source code of library. + * If not, see . + */ + +namespace Socialvoid.Errors.AuthenticationErrors +{ + /// + /// This exception will be raised when the given session challenge answer + /// is incorrect or out of sync. + /// Since: v0.0.0 + /// + public sealed class BadSessionChallengeAnswerException : GeneralException + { + //------------------------------------------------- + #region Constant's Region + // some members here + #endregion + //------------------------------------------------- + #region static Properties Region + // some members here + #endregion + //------------------------------------------------- + #region Properties Region + /// + /// The error code + /// will be returned because the given session challenge answer + /// is incorrect or out of sync. + /// Since: v0.0.0 + /// + public override ErrorCodes ErrorCode + { + get + { + return ErrorCodes.BadSessionChallengeAnswer; + } + } + #endregion + //------------------------------------------------- + #region static field's Region + // some members here + #endregion + //------------------------------------------------- + #region field's Region + // some members here + #endregion + //------------------------------------------------- + #region static event field's Region + // some members here + #endregion + //------------------------------------------------- + #region event field's Region + // some members here + #endregion + //------------------------------------------------- + #region Constructor's Region + /// + /// Creates a new instance of . + /// Since: v0.0.0 + /// + internal BadSessionChallengeAnswerException(string message) : base(message) + { + ; + } + #endregion + //------------------------------------------------- + #region Destructor's Region + // some members here + #endregion + //------------------------------------------------- + } +} diff --git a/Socialvoid/Errors/AuthenticationErrors/IncorrectLoginCredentialsException.cs b/Socialvoid/Errors/AuthenticationErrors/IncorrectLoginCredentialsException.cs new file mode 100644 index 0000000..e9832dd --- /dev/null +++ b/Socialvoid/Errors/AuthenticationErrors/IncorrectLoginCredentialsException.cs @@ -0,0 +1,84 @@ +/* + * This file is part of Socialvoid.NET Project (https://github.com/Intellivoid/Socialvoid.NET). + * Copyright (c) 2021 Socialvoid.NET Authors. + * + * This library is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, version 3. + * + * This library is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this source code of library. + * If not, see . + */ + +namespace Socialvoid.Errors.AuthenticationErrors +{ + /// + /// This exception will be raised when the given login credentials + /// are incorrect. + /// Since: v0.0.0 + /// + public sealed class IncorrectLoginCredentialsException : GeneralException + { + //------------------------------------------------- + #region Constant's Region + // some members here + #endregion + //------------------------------------------------- + #region static Properties Region + // some members here + #endregion + //------------------------------------------------- + #region Properties Region + /// + /// The error code + /// will be returned because the given login credentials are incorrect. + /// Since: v0.0.0 + /// + public override ErrorCodes ErrorCode + { + get + { + return ErrorCodes.IncorrectLoginCredentials; + } + } + #endregion + //------------------------------------------------- + #region static field's Region + // some members here + #endregion + //------------------------------------------------- + #region field's Region + // some members here + #endregion + //------------------------------------------------- + #region static event field's Region + // some members here + #endregion + //------------------------------------------------- + #region event field's Region + // some members here + #endregion + //------------------------------------------------- + #region Constructor's Region + /// + /// Creates a new instance of . + /// Since: v0.0.0 + /// + internal IncorrectLoginCredentialsException(string message) : base(message) + { + ; + } + #endregion + //------------------------------------------------- + #region Destructor's Region + // some members here + #endregion + //------------------------------------------------- + } +} diff --git a/Socialvoid/Errors/AuthenticationErrors/IncorrectTwoFactorAuthenticationCodeException.cs b/Socialvoid/Errors/AuthenticationErrors/IncorrectTwoFactorAuthenticationCodeException.cs new file mode 100644 index 0000000..dd028ac --- /dev/null +++ b/Socialvoid/Errors/AuthenticationErrors/IncorrectTwoFactorAuthenticationCodeException.cs @@ -0,0 +1,86 @@ +/* + * This file is part of Socialvoid.NET Project (https://github.com/Intellivoid/Socialvoid.NET). + * Copyright (c) 2021 Socialvoid.NET Authors. + * + * This library is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, version 3. + * + * This library is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this source code of library. + * If not, see . + */ + +namespace Socialvoid.Errors.AuthenticationErrors +{ + /// + /// This exception will be raised when the given two-factor + /// authentication code is incorrect. + /// Since: v0.0.0 + /// + public sealed class IncorrectTwoFactorAuthenticationCodeException : GeneralException + { + //------------------------------------------------- + #region Constant's Region + // some members here + #endregion + //------------------------------------------------- + #region static Properties Region + // some members here + #endregion + //------------------------------------------------- + #region Properties Region + /// + /// The error code + /// will be returned because the given two-factor authentication code + /// is incorrect. + /// Since: v0.0.0 + /// + public override ErrorCodes ErrorCode + { + get + { + return ErrorCodes.IncorrectTwoFactorAuthenticationCode; + } + } + #endregion + //------------------------------------------------- + #region static field's Region + // some members here + #endregion + //------------------------------------------------- + #region field's Region + // some members here + #endregion + //------------------------------------------------- + #region static event field's Region + // some members here + #endregion + //------------------------------------------------- + #region event field's Region + // some members here + #endregion + //------------------------------------------------- + #region Constructor's Region + /// + /// Creates a new instance of + /// . + /// Since: v0.0.0 + /// + internal IncorrectTwoFactorAuthenticationCodeException(string message) : base(message) + { + ; + } + #endregion + //------------------------------------------------- + #region Destructor's Region + // some members here + #endregion + //------------------------------------------------- + } +} diff --git a/Socialvoid/Errors/AuthenticationErrors/NotAuthenticatedException.cs b/Socialvoid/Errors/AuthenticationErrors/NotAuthenticatedException.cs new file mode 100644 index 0000000..46d4ba9 --- /dev/null +++ b/Socialvoid/Errors/AuthenticationErrors/NotAuthenticatedException.cs @@ -0,0 +1,85 @@ +/* + * This file is part of Socialvoid.NET Project (https://github.com/Intellivoid/Socialvoid.NET). + * Copyright (c) 2021 Socialvoid.NET Authors. + * + * This library is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, version 3. + * + * This library is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this source code of library. + * If not, see . + */ + +namespace Socialvoid.Errors.AuthenticationErrors +{ + /// + /// This exception will be raised when the client attempts to + /// invoke a method that requires authentication. + /// Since: v0.0.0 + /// + public sealed class NotAuthenticatedException : GeneralException + { + //------------------------------------------------- + #region Constant's Region + // some members here + #endregion + //------------------------------------------------- + #region static Properties Region + // some members here + #endregion + //------------------------------------------------- + #region Properties Region + /// + /// The error code + /// will be returned because the client attempts + /// to invoke a method that requires authentication. + /// Since: v0.0.0 + /// + public override ErrorCodes ErrorCode + { + get + { + return ErrorCodes.NotAuthenticated; + } + } + #endregion + //------------------------------------------------- + #region static field's Region + // some members here + #endregion + //------------------------------------------------- + #region field's Region + // some members here + #endregion + //------------------------------------------------- + #region static event field's Region + // some members here + #endregion + //------------------------------------------------- + #region event field's Region + // some members here + #endregion + //------------------------------------------------- + #region Constructor's Region + /// + /// Creates a new instance of . + /// Since: v0.0.0 + /// + internal NotAuthenticatedException(string message) : base(message) + { + ; + } + #endregion + //------------------------------------------------- + #region Destructor's Region + // some members here + #endregion + //------------------------------------------------- + } +} diff --git a/Socialvoid/Errors/AuthenticationErrors/PrivateAccessTokenRequiredException.cs b/Socialvoid/Errors/AuthenticationErrors/PrivateAccessTokenRequiredException.cs new file mode 100644 index 0000000..b15675d --- /dev/null +++ b/Socialvoid/Errors/AuthenticationErrors/PrivateAccessTokenRequiredException.cs @@ -0,0 +1,88 @@ +/* + * This file is part of Socialvoid.NET Project (https://github.com/Intellivoid/Socialvoid.NET). + * Copyright (c) 2021 Socialvoid.NET Authors. + * + * This library is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, version 3. + * + * This library is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this source code of library. + * If not, see . + */ + +namespace Socialvoid.Errors.AuthenticationErrors +{ + /// + /// This exception will be raised when the user/entity uses a + /// Private Access Token to authenticate and the client attempted + /// to authenticate in another way. + /// Since: v0.0.0 + /// + public sealed class PrivateAccessTokenRequiredException : GeneralException + { + //------------------------------------------------- + #region Constant's Region + // some members here + #endregion + //------------------------------------------------- + #region static Properties Region + // some members here + #endregion + //------------------------------------------------- + #region Properties Region + /// + /// The error code + /// will be returned because the user/entity uses a + /// Private Access Token to authenticate and the client attempted + /// to authenticate in another way. + /// Since: v0.0.0 + /// + public override ErrorCodes ErrorCode + { + get + { + return ErrorCodes.PrivateAccessTokenRequired; + } + } + #endregion + //------------------------------------------------- + #region static field's Region + // some members here + #endregion + //------------------------------------------------- + #region field's Region + // some members here + #endregion + //------------------------------------------------- + #region static event field's Region + // some members here + #endregion + //------------------------------------------------- + #region event field's Region + // some members here + #endregion + //------------------------------------------------- + #region Constructor's Region + /// + /// Creates a new instance of + /// . + /// Since: v0.0.0 + /// + internal PrivateAccessTokenRequiredException(string message) : base(message) + { + ; + } + #endregion + //------------------------------------------------- + #region Destructor's Region + // some members here + #endregion + //------------------------------------------------- + } +} diff --git a/Socialvoid/Errors/AuthenticationErrors/README.md b/Socialvoid/Errors/AuthenticationErrors/README.md new file mode 100644 index 0000000..4241c35 --- /dev/null +++ b/Socialvoid/Errors/AuthenticationErrors/README.md @@ -0,0 +1,19 @@ +# Authentication Errors + +These errors are raised when anything related to authentication has failed, +this can include things from when trying to authenticate to session +challenge errors. + +| Name | Code | Hex Code | Deprecated | Versions | Description | +|--------------------------------------|------|----------|------------|----------|--------------------------------------------------------------------------------------------------------------------------------------| +| IncorrectLoginCredentials | 8704 | 0x02200 | No | 1.0 | The given login credentials are incorrect | +| IncorrectTwoFactorAuthenticationCode | 8705 | 0x02201 | No | 1.0 | The given two-factor authentication code is incorrect | +| AuthenticationNotApplicable | 8706 | 0x02202 | No | 1.0 | Raised when the user does not support this method of authentication, see the message for further details | +| SessionNotFound | 8707 | 0x02203 | No | 1.0 | Raised when the requested session was not found in the network | +| NotAuthenticated | 8708 | 0x02204 | No | 1.0 | Raised when the client attempts to invoke a method that requires authentication | +| PrivateAccessTokenRequired | 8709 | 0x02205 | No | 1.0 | Raised when the user/entity uses a Private Access Token to authenticate and the client attempted to authenticate in another way. | +| AuthenticationFailure | 8710 | 0x02206 | No | 1.0 | The authentication process failed for some unexpected reason, see the message for further details. | +| BadSessionChallengeAnswer | 8711 | 0x02207 | No | 1.0 | The given session challenge answer is incorrect or out of sync. | +| TwoFactorAuthenticationRequired | 8712 | 0x02208 | No | 1.0 | Two-Factor Authentication is required, the client must repeat the same request but provide a Two-Factor authentication code as well. | +| AlreadyAuthenticated | 8713 | 0x02209 | No | 1.0 | The client is attempting to authenticate when already authenticated | +| SessionExpired | 8714 | 0x0220a | No | 1.0 | Raised when trying to use a session that has expired | \ No newline at end of file diff --git a/Socialvoid/Errors/AuthenticationErrors/SessionExpiredException.cs b/Socialvoid/Errors/AuthenticationErrors/SessionExpiredException.cs new file mode 100644 index 0000000..422518f --- /dev/null +++ b/Socialvoid/Errors/AuthenticationErrors/SessionExpiredException.cs @@ -0,0 +1,85 @@ +/* + * This file is part of Socialvoid.NET Project (https://github.com/Intellivoid/Socialvoid.NET). + * Copyright (c) 2021 Socialvoid.NET Authors. + * + * This library is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, version 3. + * + * This library is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this source code of library. + * If not, see . + */ + +namespace Socialvoid.Errors.AuthenticationErrors +{ + /// + /// This exception will be raised when the client tried to use a session + /// that has been expired. + /// Since: v0.0.0 + /// + public sealed class SessionExpiredException : GeneralException + { + //------------------------------------------------- + #region Constant's Region + // some members here + #endregion + //------------------------------------------------- + #region static Properties Region + // some members here + #endregion + //------------------------------------------------- + #region Properties Region + /// + /// The error code + /// will be returned because the client tried to use a session + /// that has been expired. + /// Since: v0.0.0 + /// + public override ErrorCodes ErrorCode + { + get + { + return ErrorCodes.SessionExpired; + } + } + #endregion + //------------------------------------------------- + #region static field's Region + // some members here + #endregion + //------------------------------------------------- + #region field's Region + // some members here + #endregion + //------------------------------------------------- + #region static event field's Region + // some members here + #endregion + //------------------------------------------------- + #region event field's Region + // some members here + #endregion + //------------------------------------------------- + #region Constructor's Region + /// + /// Creates a new instance of . + /// Since: v0.0.0 + /// + internal SessionExpiredException(string message) : base(message) + { + ; + } + #endregion + //------------------------------------------------- + #region Destructor's Region + // some members here + #endregion + //------------------------------------------------- + } +} diff --git a/Socialvoid/Errors/AuthenticationErrors/SessionNotFoundException.cs b/Socialvoid/Errors/AuthenticationErrors/SessionNotFoundException.cs new file mode 100644 index 0000000..855c9e2 --- /dev/null +++ b/Socialvoid/Errors/AuthenticationErrors/SessionNotFoundException.cs @@ -0,0 +1,85 @@ +/* + * This file is part of Socialvoid.NET Project (https://github.com/Intellivoid/Socialvoid.NET). + * Copyright (c) 2021 Socialvoid.NET Authors. + * + * This library is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, version 3. + * + * This library is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this source code of library. + * If not, see . + */ + +namespace Socialvoid.Errors.AuthenticationErrors +{ + /// + /// This exception will be raised when the requested session can + /// not be found in the database on server-side. + /// Since: v0.0.0 + /// + public sealed class SessionNotFoundException : GeneralException + { + //------------------------------------------------- + #region Constant's Region + // some members here + #endregion + //------------------------------------------------- + #region static Properties Region + // some members here + #endregion + //------------------------------------------------- + #region Properties Region + /// + /// The error code + /// will be returned because the requested session was + /// not found in the database on server-side. + /// Since: v0.0.0 + /// + public override ErrorCodes ErrorCode + { + get + { + return ErrorCodes.SessionNotFound; + } + } + #endregion + //------------------------------------------------- + #region static field's Region + // some members here + #endregion + //------------------------------------------------- + #region field's Region + // some members here + #endregion + //------------------------------------------------- + #region static event field's Region + // some members here + #endregion + //------------------------------------------------- + #region event field's Region + // some members here + #endregion + //------------------------------------------------- + #region Constructor's Region + /// + /// Creates a new instance of . + /// Since: v0.0.0 + /// + internal SessionNotFoundException(string message) : base(message) + { + ; + } + #endregion + //------------------------------------------------- + #region Destructor's Region + // some members here + #endregion + //------------------------------------------------- + } +} diff --git a/Socialvoid/Errors/AuthenticationErrors/TwoFactorAuthenticationRequiredException.cs b/Socialvoid/Errors/AuthenticationErrors/TwoFactorAuthenticationRequiredException.cs new file mode 100644 index 0000000..e6252d5 --- /dev/null +++ b/Socialvoid/Errors/AuthenticationErrors/TwoFactorAuthenticationRequiredException.cs @@ -0,0 +1,87 @@ +/* + * This file is part of Socialvoid.NET Project (https://github.com/Intellivoid/Socialvoid.NET). + * Copyright (c) 2021 Socialvoid.NET Authors. + * + * This library is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, version 3. + * + * This library is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this source code of library. + * If not, see . + */ + +namespace Socialvoid.Errors.AuthenticationErrors +{ + /// + /// This exception will be raised when the Two-Factor Authentication + /// is required and so the client must repeat the same request + /// but provide a Two-Factor authentication code as well. + /// Since: v0.0.0 + /// + public sealed class TwoFactorAuthenticationRequiredException : GeneralException + { + //------------------------------------------------- + #region Constant's Region + // some members here + #endregion + //------------------------------------------------- + #region static Properties Region + // some members here + #endregion + //------------------------------------------------- + #region Properties Region + /// + /// The + /// error code will be returned because the Two-Factor Authentication + /// is required and so the client must repeat the same request + /// but provide a Two-Factor authentication code as well. + /// Since: v0.0.0 + /// + public override ErrorCodes ErrorCode + { + get + { + return ErrorCodes.TwoFactorAuthenticationRequired; + } + } + #endregion + //------------------------------------------------- + #region static field's Region + // some members here + #endregion + //------------------------------------------------- + #region field's Region + // some members here + #endregion + //------------------------------------------------- + #region static event field's Region + // some members here + #endregion + //------------------------------------------------- + #region event field's Region + // some members here + #endregion + //------------------------------------------------- + #region Constructor's Region + /// + /// Creates a new instance of . + /// Since: v0.0.0 + /// + internal TwoFactorAuthenticationRequiredException(string message) : base(message) + { + ; + } + #endregion + //------------------------------------------------- + #region Destructor's Region + // some members here + #endregion + //------------------------------------------------- + } +} diff --git a/Socialvoid/Errors/ErrorCodes.cs b/Socialvoid/Errors/ErrorCodes.cs new file mode 100644 index 0000000..99374d9 --- /dev/null +++ b/Socialvoid/Errors/ErrorCodes.cs @@ -0,0 +1,328 @@ +/* + * This file is part of Socialvoid.NET Project (https://github.com/Intellivoid/Socialvoid.NET). + * Copyright (c) 2021 Socialvoid.NET Authors. + * + * This library is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, version 3. + * + * This library is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this source code of library. + * If not, see . + */ + +namespace Socialvoid.Errors +{ + /// + /// All error codes received from the Socialvoid servers. + /// Since: v0.0.0 + /// + public enum ErrorCodes + { + //------------------------------------------------- + #region Unknown Error + /// + /// This error code will be returned when the error is not + /// implimented on client-side at all. + /// Since: v0.0.0 + /// + UnknownError = 0, + #endregion + //------------------------------------------------- + #region Validation Errors + /// + /// This error code will be returned when the given username + /// is invalid and does not meet the specification. + /// Since: v0.0.0 + /// + /// + InvalidUsername = 8448, + /// + /// This error code will be returned when the given password is + /// invalid and/or insecure and does not meet the specification. + /// Since: v0.0.0 + /// + InvalidPassword = 8449, + /// + /// This error code will be returned when the First Name provided + /// contains invalid characters and or is too long; + /// please see the message for further details. + /// Since: v0.0.0 + /// + InvalidFirstName = 8450, + /// + /// This error code will be returned when the Last Name provided + /// contains invalid characters and or is too long; + /// please see the message for further details. + /// Since: v0.0.0 + /// + InvalidLastName = 8451, + /// + /// This error code will be returned when the Biography is too long or + /// contains invalid characters; + /// please see the message for further details. + /// Since: v0.0.0 + /// + InvalidBiography = 8452, + /// + /// This error code will be returned when the given username + /// is already registered in the server and cannot be used. + /// Since: v0.0.0 + /// + UsernameAlreadyExists = 8453, + /// + /// This error code will be returned when the client provided + /// an invalid peer identification as input. + /// Since: v0.0.0 + /// + InvalidPeerInput = 8454, + /// + /// This error code will be returned when the post contains + /// invalid characters or is too long; + /// please see the message for further details. + /// Since: v0.0.0 + /// + InvalidPostText = 8455, + /// + /// This error code will be returned when the client's public hash + /// is invalid and cannot be identified as a sha256. + /// Since: v0.0.0 + /// + InvalidClientPublicHash = 8456, + /// + /// This error code will be returned when the client's private hash + /// is invalid and cannot be identified as a sha256. + /// Since: v0.0.0 + /// + InvalidClientPrivateHash = 8457, + /// + /// This error code will be returned when the version is invalid + /// or is too long; + /// please see the message for further details. + /// Since: v0.0.0 + /// + InvalidVersion = 8459, + /// + /// This error code will be returned when the client name contains + /// invalid characters or is too long; + /// please see the message for further details. + /// Since: v0.0.0 + /// + InvalidClientName = 8460, + /// + /// This error code will be returned when the session identification + /// object is invalid; + /// please see the message for further details. + /// Since: v0.0.0 + /// + InvalidSessionIdentification = 8461, + + /// + /// This error code will be returned when the platform name contains + /// invalid characters or is too long; + /// please see the message for further details. + /// Since: v0.0.0 + /// + InvalidPlatform = 8464, + #endregion + //------------------------------------------------- + #region Authentication Errors + /// + /// This error code will be returned when the given login credentials + /// are incorrect. + /// Since: v0.0.0 + /// + /// + IncorrectLoginCredentials = 8704, + /// + /// This error code will be returned when the given two-factor + /// authentication code is incorrect. + /// Since: v0.0.0 + /// + IncorrectTwoFactorAuthenticationCode = 8705, + /// + /// This error code will be returned when the user does not support + /// this method of authentication; + /// please see the message for further details. + /// Since: v0.0.0 + /// + AuthenticationNotApplicable = 8706, + /// + /// This error code will be returned when the requested session + /// was not found in the database on server-side. + /// Since: v0.0.0 + /// + SessionNotFound = 8707, + /// + /// This error code will be returned when the client attempts + /// to invoke a method that requires authentication. + /// Since: v0.0.0 + /// + NotAuthenticated = 8708, + /// + /// This error code will be returned when the user/entity uses + /// a Private Access Token to authenticate and the client + /// attempted to authenticate in another way. + /// Since: v0.0.0 + /// + PrivateAccessTokenRequired = 8709, + /// + /// This error code will be returned when the authentication process + /// failed for some unexpected reason; + /// please see the message for further details. + /// Since: v0.0.0 + /// + AuthenticationFailure = 8710, + /// + /// This error code will be returned when the given session + /// challenge answer is incorrect or out of sync. + /// Since: v0.0.0 + /// + BadSessionChallengeAnswer = 8711, + /// + /// This error code will be returned when the Two-Factor + /// Authentication is required and so the client must repeat + /// the same request but provide a Two-Factor authentication + /// code as well. + /// Since: v0.0.0 + /// + TwoFactorAuthenticationRequired = 8712, + /// + /// This error code will be returned when the client is attempting + /// to authenticate when already authenticated. + /// Since: v0.0.0 + /// + AlreadyAuthenticated = 8713, + /// + /// This error code will be returned when trying to use a + /// session that has been expired. + /// Since: v0.0.0 + /// + SessionExpired = 8714, + #endregion + //------------------------------------------------- + #region Media Errors + // TODO: This part is a work in progress, + // media has yet to be implemented on the server-side. + #endregion + //------------------------------------------------- + #region Network Errors + /// + /// This error code will be returned when the requested user entity + /// was not found on the server-side. + /// Since: v0.0.0 + /// + /// + PeerNotFound = 12544, + /// + /// This error code will be returned when the client requested + /// a post that isn't found (or does not exist on the server-side). + /// Since: v0.0.0 + /// + PostNotFound = 12545, + /// + /// This error code will be returned when the client requested a post + /// that was deleted. + /// Since: v0.0.0 + /// + PostDeleted = 12546, + /// + /// This error code will be returned when the client attempts to + /// repost a post that has already been reposted (by the same user). + /// Since: v0.0.0 + /// + AlreadyReposted = 12547, + /// + /// This error code will be returned when there was an error while + /// trying to upload one or more files to the server. + /// Since: v0.0.0 + /// + FileUploadError = 12548, + #endregion + //------------------------------------------------- + #region Server Errors + /// + /// This error code will be returned when there was an unexpected + /// error while trying to process your request. + /// Since: v0.0.0 + /// + /// + InternalServerError = 16384, + #endregion + //------------------------------------------------- + #region RPC Errors + /// + /// Execution of the server method was aborted due to a cancellation request from + /// the client. + /// Since: v0.0.0 + /// + RequestCanceled = -32800, + /// + /// Invalid JSON was received by the server. An error occurred on the server while + /// parsing the JSON text. + /// Since: v0.0.0 + /// + ParseError = -32700, + /// + /// Internal JSON-RPC error. + /// Since: v0.0.0 + /// + InternalError = -32603, + /// + /// Invalid method parameter(s). + /// Since: v0.0.0 + /// + InvalidParams = -32602, + /// + /// The method does not exist / is not available. + /// Since: v0.0.0 + /// + MethodNotFound = -32601, + /// + /// The JSON object sent is not a valid Request object. + /// Since: v0.0.0 + /// + InvalidRequest = -32600, + /// + /// Indicates the RPC call was made but the target threw an exception. + /// Since: v0.0.0 + /// + InvocationErrorWithException = -32004, + /// + /// Indicates a response could not be serialized as the application intended. + /// Since: v0.0.0 + /// + ResponseSerializationFailure = -32003, + /// + /// Indicates a request was made to a remotely marshaled object that never existed + /// or has already been disposed of. + /// Since: v0.0.0 + /// + NoMarshaledObjectFound = -32001, + /// + /// Indicates the RPC call was made but the target threw an exception. + /// Since: v0.0.0 + /// + InvocationError = -32000 + #endregion + } +} + diff --git a/Socialvoid/Errors/GeneralException.cs b/Socialvoid/Errors/GeneralException.cs new file mode 100644 index 0000000..ab76174 --- /dev/null +++ b/Socialvoid/Errors/GeneralException.cs @@ -0,0 +1,227 @@ +using System; +using Socialvoid.Errors.RPCErrors; +using Socialvoid.Errors.ServerErrors; +using Socialvoid.Errors.NetworkErrors; +using Socialvoid.Errors.ValidationErrors; +using Socialvoid.Errors.AuthenticationErrors; + +namespace Socialvoid.Errors +{ + /// + /// + /// Since: v0.0.0 + /// + [Serializable] + public class GeneralException : Exception + { + //------------------------------------------------- + #region Constant's Region + // some members here + #endregion + //------------------------------------------------- + #region static Properties Region + // some members here + #endregion + //------------------------------------------------- + #region Properties Region + /// + /// The error code of this exception which is received from + /// the server. + /// + /// This property needs to be overrided in specific exception + /// classes of this library. + /// + /// Since: v0.0.0 + /// + public virtual ErrorCodes ErrorCode { get; } + #endregion + //------------------------------------------------- + #region static field's Region + // some members here + #endregion + //------------------------------------------------- + #region field's Region + // some members here + #endregion + //------------------------------------------------- + #region static event field's Region + // some members here + #endregion + //------------------------------------------------- + #region event field's Region + // some members here + #endregion + //------------------------------------------------- + #region Constructor's Region + /// + /// Creates a new instance of . + /// Since: v0.0.0 + /// + /// + /// the error message received from the server. + /// + + internal GeneralException(string message) : base(message) + { + + } + /// + /// Creates a new instance of using + /// the specified error message and erro code. + /// Since: v0.0.0 + /// + /// + /// the error message received from the server. + /// + /// + /// the error code received from the server. + /// + private GeneralException(string message, ErrorCodes code) : base(message) + { + ErrorCode = code; + } + + #endregion + //------------------------------------------------- + #region Destructor's Region + // some members here + #endregion + //------------------------------------------------- + #region Initialize Method's Region + // some methods here + #endregion + //------------------------------------------------- + #region Graphical Method's Region + // some methods here + #endregion + //------------------------------------------------- + #region event Method's Region + // some methods here + #endregion + //------------------------------------------------- + #region overrided Method's Region + // some methods here + #endregion + //------------------------------------------------- + #region ordinary Method's Region + // some methods here + #endregion + //------------------------------------------------- + #region Get Method's Region + // some methods here + #endregion + //------------------------------------------------- + #region Set Method's Region + // some methods here + #endregion + //------------------------------------------------- + #region static Method's Region + /// + /// GetException will return a new exception based on the + /// error code received from the server with the specified + /// error message. + /// Since: v0.0.0 + /// + public static GeneralException GetException(string m, ErrorCodes err) + { + return err switch + { + // Unknown Error + ErrorCodes.UnknownError => new(m), + // Validation Errors + ErrorCodes.InvalidUsername => + new InvalidUsernameException(m), + ErrorCodes.InvalidPassword => + new InvalidPasswordException(m), + ErrorCodes.InvalidFirstName => + new InvalidFirstNameException(m), + ErrorCodes.InvalidLastName => + new InvalidLastNameException(m), + ErrorCodes.InvalidBiography => + new InvalidBiographyException(m), + ErrorCodes.UsernameAlreadyExists => + new UsernameAlreadyExistsException(m), + ErrorCodes.InvalidPeerInput => + new InvalidPeerInputException(m), + ErrorCodes.InvalidPostText => + new InvalidPostTextException(m), + ErrorCodes.InvalidClientPublicHash => + new InvalidClientPublicHashException(m), + ErrorCodes.InvalidClientPrivateHash => + new InvalidClientPrivateHashException(m), + ErrorCodes.InvalidVersion => + new InvalidVersionException(m), + ErrorCodes.InvalidClientName => + new InvalidClientNameException(m), + ErrorCodes.InvalidSessionIdentification => + new InvalidSessionIdentificationException(m), + ErrorCodes.InvalidPlatform => + new InvalidPlatformException(m), + // Authentication Errors + ErrorCodes.IncorrectLoginCredentials => + new IncorrectLoginCredentialsException(m), + ErrorCodes.IncorrectTwoFactorAuthenticationCode => + new IncorrectTwoFactorAuthenticationCodeException(m), + ErrorCodes.AuthenticationNotApplicable => + new AuthenticationNotApplicableException(m), + ErrorCodes.SessionNotFound => + new SessionNotFoundException(m), + ErrorCodes.NotAuthenticated => + new NotAuthenticatedException(m), + ErrorCodes.PrivateAccessTokenRequired => + new PrivateAccessTokenRequiredException(m), + ErrorCodes.AuthenticationFailure => + new AuthenticationFailureException(m), + ErrorCodes.BadSessionChallengeAnswer => + new BadSessionChallengeAnswerException(m), + ErrorCodes.TwoFactorAuthenticationRequired => + new TwoFactorAuthenticationRequiredException(m), + ErrorCodes.AlreadyAuthenticated => + new AlreadyAuthenticatedException(m), + ErrorCodes.SessionExpired => + new SessionExpiredException(m), + // Media Errors + // Network Errors + ErrorCodes.PeerNotFound => + new PeerNotFoundException(m), + ErrorCodes.PostNotFound => + new PostNotFoundException(m), + ErrorCodes.PostDeleted => + new PostDeletedException(m), + ErrorCodes.AlreadyReposted => + new AlreadyRepostedException(m), + ErrorCodes.FileUploadError => + new FileUploadErrorException(m), + // Server Errors + ErrorCodes.InternalServerError => + new InternalServerErrorException(m), + // RPC Errors + ErrorCodes.RequestCanceled => + new RequestCanceledException(m), + ErrorCodes.ParseError => + new ParseErrorException(m), + ErrorCodes.InternalError => + new InternalErrorException(m), + ErrorCodes.InvalidParams => + new InvalidParamsException(m), + ErrorCodes.MethodNotFound => + new MethodNotFoundException(m), + ErrorCodes.InvalidRequest => + new InvalidRequestException(m), + ErrorCodes.InvocationErrorWithException => + new InvocationErrorWithExException(m), + ErrorCodes.ResponseSerializationFailure => + new ResponseSerializationFailureException(m), + ErrorCodes.NoMarshaledObjectFound => + new NoMarshaledObjectFound(m), + ErrorCodes.InvocationError => + new InvocationErrorException(m), + + // an unknown error code? + _ => new(m, err) + }; + } + #endregion + //------------------------------------------------- + } +} diff --git a/Socialvoid/Errors/MediaErrors/README.md b/Socialvoid/Errors/MediaErrors/README.md new file mode 100644 index 0000000..884a654 --- /dev/null +++ b/Socialvoid/Errors/MediaErrors/README.md @@ -0,0 +1,3 @@ +# MediaErrors + +This part is a work in progress, media has yet to be implemented. \ No newline at end of file diff --git a/Socialvoid/Errors/NetworkErrors/AlreadyRepostedException.cs b/Socialvoid/Errors/NetworkErrors/AlreadyRepostedException.cs new file mode 100644 index 0000000..c2ee1dd --- /dev/null +++ b/Socialvoid/Errors/NetworkErrors/AlreadyRepostedException.cs @@ -0,0 +1,85 @@ +/* + * This file is part of Socialvoid.NET Project (https://github.com/Intellivoid/Socialvoid.NET). + * Copyright (c) 2021 Socialvoid.NET Authors. + * + * This library is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, version 3. + * + * This library is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this source code of library. + * If not, see . + */ + +namespace Socialvoid.Errors.NetworkErrors +{ + /// + /// This exception will be raised when the client attempts to repost a + /// post that has already been reposted (by the same user). + /// Since: v0.0.0 + /// + public sealed class AlreadyRepostedException : GeneralException + { + //------------------------------------------------- + #region Constant's Region + // some members here + #endregion + //------------------------------------------------- + #region static Properties Region + // some members here + #endregion + //------------------------------------------------- + #region Properties Region + /// + /// The error code + /// will be returned because the client attempted to repost a + /// post that has already been reposted (by the same user). + /// Since: v0.0.0 + /// + public override ErrorCodes ErrorCode + { + get + { + return ErrorCodes.AlreadyReposted; + } + } + #endregion + //------------------------------------------------- + #region static field's Region + // some members here + #endregion + //------------------------------------------------- + #region field's Region + // some members here + #endregion + //------------------------------------------------- + #region static event field's Region + // some members here + #endregion + //------------------------------------------------- + #region event field's Region + // some members here + #endregion + //------------------------------------------------- + #region Constructor's Region + /// + /// Creates a new instance of . + /// Since: v0.0.0 + /// + internal AlreadyRepostedException(string message) : base(message) + { + ; + } + #endregion + //------------------------------------------------- + #region Destructor's Region + // some members here + #endregion + //------------------------------------------------- + } +} \ No newline at end of file diff --git a/Socialvoid/Errors/NetworkErrors/FileUploadErrorException.cs b/Socialvoid/Errors/NetworkErrors/FileUploadErrorException.cs new file mode 100644 index 0000000..6d5297d --- /dev/null +++ b/Socialvoid/Errors/NetworkErrors/FileUploadErrorException.cs @@ -0,0 +1,85 @@ +/* + * This file is part of Socialvoid.NET Project (https://github.com/Intellivoid/Socialvoid.NET). + * Copyright (c) 2021 Socialvoid.NET Authors. + * + * This library is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, version 3. + * + * This library is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this source code of library. + * If not, see . + */ + +namespace Socialvoid.Errors.NetworkErrors +{ + /// + /// This exception will be raised when there was an error while trying to + /// upload one or more files to the server. + /// Since: v0.0.0 + /// + public sealed class FileUploadErrorException : GeneralException + { + //------------------------------------------------- + #region Constant's Region + // some members here + #endregion + //------------------------------------------------- + #region static Properties Region + // some members here + #endregion + //------------------------------------------------- + #region Properties Region + /// + /// The error code + /// will be returned because there was an error while trying to + /// upload one or more files to the server. + /// Since: v0.0.0 + /// + public override ErrorCodes ErrorCode + { + get + { + return ErrorCodes.FileUploadError; + } + } + #endregion + //------------------------------------------------- + #region static field's Region + // some members here + #endregion + //------------------------------------------------- + #region field's Region + // some members here + #endregion + //------------------------------------------------- + #region static event field's Region + // some members here + #endregion + //------------------------------------------------- + #region event field's Region + // some members here + #endregion + //------------------------------------------------- + #region Constructor's Region + /// + /// Creates a new instance of . + /// Since: v0.0.0 + /// + internal FileUploadErrorException(string message) : base(message) + { + ; + } + #endregion + //------------------------------------------------- + #region Destructor's Region + // some members here + #endregion + //------------------------------------------------- + } +} diff --git a/Socialvoid/Errors/NetworkErrors/PeerNotFoundException.cs b/Socialvoid/Errors/NetworkErrors/PeerNotFoundException.cs new file mode 100644 index 0000000..4c86ded --- /dev/null +++ b/Socialvoid/Errors/NetworkErrors/PeerNotFoundException.cs @@ -0,0 +1,85 @@ +/* + * This file is part of Socialvoid.NET Project (https://github.com/Intellivoid/Socialvoid.NET). + * Copyright (c) 2021 Socialvoid.NET Authors. + * + * This library is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, version 3. + * + * This library is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this source code of library. + * If not, see . + */ + +namespace Socialvoid.Errors.NetworkErrors +{ + /// + /// This exception will be raised when the requested user entity + /// can not be not found on the server-side. + /// Since: v0.0.0 + /// + public sealed class PeerNotFoundException : GeneralException + { + //------------------------------------------------- + #region Constant's Region + // some members here + #endregion + //------------------------------------------------- + #region static Properties Region + // some members here + #endregion + //------------------------------------------------- + #region Properties Region + /// + /// The error code + /// will be returned because the requested user entity was not found + /// on the server-side. + /// Since: v0.0.0 + /// + public override ErrorCodes ErrorCode + { + get + { + return ErrorCodes.PeerNotFound; + } + } + #endregion + //------------------------------------------------- + #region static field's Region + // some members here + #endregion + //------------------------------------------------- + #region field's Region + // some members here + #endregion + //------------------------------------------------- + #region static event field's Region + // some members here + #endregion + //------------------------------------------------- + #region event field's Region + // some members here + #endregion + //------------------------------------------------- + #region Constructor's Region + /// + /// Creates a new instance of . + /// Since: v0.0.0 + /// + internal PeerNotFoundException(string message) : base(message) + { + ; + } + #endregion + //------------------------------------------------- + #region Destructor's Region + // some members here + #endregion + //------------------------------------------------- + } +} diff --git a/Socialvoid/Errors/NetworkErrors/PostDeletedException.cs b/Socialvoid/Errors/NetworkErrors/PostDeletedException.cs new file mode 100644 index 0000000..54b0984 --- /dev/null +++ b/Socialvoid/Errors/NetworkErrors/PostDeletedException.cs @@ -0,0 +1,85 @@ +/* + * This file is part of Socialvoid.NET Project (https://github.com/Intellivoid/Socialvoid.NET). + * Copyright (c) 2021 Socialvoid.NET Authors. + * + * This library is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, version 3. + * + * This library is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this source code of library. + * If not, see . + */ + +namespace Socialvoid.Errors.NetworkErrors +{ + /// + /// This exception will be raised when the client requests a post that + /// is deleted. + /// Since: v0.0.0 + /// + public sealed class PostDeletedException : GeneralException + { + //------------------------------------------------- + #region Constant's Region + // some members here + #endregion + //------------------------------------------------- + #region static Properties Region + // some members here + #endregion + //------------------------------------------------- + #region Properties Region + /// + /// The error code + /// will be returned because the client requested a post that + /// was deleted. + /// Since: v0.0.0 + /// + public override ErrorCodes ErrorCode + { + get + { + return ErrorCodes.PostDeleted; + } + } + #endregion + //------------------------------------------------- + #region static field's Region + // some members here + #endregion + //------------------------------------------------- + #region field's Region + // some members here + #endregion + //------------------------------------------------- + #region static event field's Region + // some members here + #endregion + //------------------------------------------------- + #region event field's Region + // some members here + #endregion + //------------------------------------------------- + #region Constructor's Region + /// + /// Creates a new instance of . + /// Since: v0.0.0 + /// + internal PostDeletedException(string message) : base(message) + { + ; + } + #endregion + //------------------------------------------------- + #region Destructor's Region + // some members here + #endregion + //------------------------------------------------- + } +} \ No newline at end of file diff --git a/Socialvoid/Errors/NetworkErrors/PostNotFoundException.cs b/Socialvoid/Errors/NetworkErrors/PostNotFoundException.cs new file mode 100644 index 0000000..6399f74 --- /dev/null +++ b/Socialvoid/Errors/NetworkErrors/PostNotFoundException.cs @@ -0,0 +1,85 @@ +/* + * This file is part of Socialvoid.NET Project (https://github.com/Intellivoid/Socialvoid.NET). + * Copyright (c) 2021 Socialvoid.NET Authors. + * + * This library is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, version 3. + * + * This library is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this source code of library. + * If not, see . + */ + +namespace Socialvoid.Errors.NetworkErrors +{ + /// + /// This exception will be raised when the client requests a post that + /// isn't found (or does not exist on the server-side). + /// Since: v0.0.0 + /// + public sealed class PostNotFoundException : GeneralException + { + //------------------------------------------------- + #region Constant's Region + // some members here + #endregion + //------------------------------------------------- + #region static Properties Region + // some members here + #endregion + //------------------------------------------------- + #region Properties Region + /// + /// The error code + /// will be returned because the client requested a post that + /// isn't found (or does not exist on the server-side). + /// Since: v0.0.0 + /// + public override ErrorCodes ErrorCode + { + get + { + return ErrorCodes.PostNotFound; + } + } + #endregion + //------------------------------------------------- + #region static field's Region + // some members here + #endregion + //------------------------------------------------- + #region field's Region + // some members here + #endregion + //------------------------------------------------- + #region static event field's Region + // some members here + #endregion + //------------------------------------------------- + #region event field's Region + // some members here + #endregion + //------------------------------------------------- + #region Constructor's Region + /// + /// Creates a new instance of . + /// Since: v0.0.0 + /// + internal PostNotFoundException(string message) : base(message) + { + ; + } + #endregion + //------------------------------------------------- + #region Destructor's Region + // some members here + #endregion + //------------------------------------------------- + } +} \ No newline at end of file diff --git a/Socialvoid/Errors/NetworkErrors/README.md b/Socialvoid/Errors/NetworkErrors/README.md new file mode 100644 index 0000000..7b0e3bb --- /dev/null +++ b/Socialvoid/Errors/NetworkErrors/README.md @@ -0,0 +1,12 @@ +# NetworkErrors + +These are the catch-all errors when dealing with the network, from +finding peers, following them, posting, etc. + +| Name | Code | Hex Code | Deprecated | Versions | Description | +|-----------------|-------|----------|------------|----------|----------------------------------------------------------------------------------------| +| PeerNotFound | 12544 | 0x03100 | No | 1.0 | The requested user entity was not found in the network | +| PostNotFound | 12545 | 0x03101 | No | 1.0 | Raised when the client requested a post that isn't found | +| PostDeleted | 12546 | 0x03102 | No | 1.0 | Raised when the client requested a post that was deleted | +| AlreadyReposted | 12547 | 0x03103 | No | 1.0 | Raised when the client attempts to repost a post that has already been reposted | +| FileUploadError | 12548 | 0x03104 | No | 1.0 | Raised when there was an error while trying to upload one or more files to the network | \ No newline at end of file diff --git a/Socialvoid/Errors/README.md b/Socialvoid/Errors/README.md new file mode 100644 index 0000000..763c913 --- /dev/null +++ b/Socialvoid/Errors/README.md @@ -0,0 +1,61 @@ +# Errors + +Socialvoid has it's own unique set of error codes aside from the ones +used by the standard of the RCP server. while your client should handle +standard error codes of the RCP protcol; if you are building a Socialvoid +client then it's important that your client can handle and represent these +errors returned by the Socialvoid Server. + +These errors are designed to explain what the issue is to the client or +user, in cases the client use these errors to automatically correct their +request but some errors may be caused by users as well. so it's important +that your client can understand and catch these errors accordingly. + + +## Error Codes + +Errors come in three components. + + - Name + - Code + - Message + +### Name +The name is the name of the error, it can be anything from `PeerNotFound` +to `InternalServerError`, this makes it easier for programming languages +to use a try catch statement to catch specific errors. + +### Code +The error code is an alternative way to identify the error when the +name is not available or trying to catch a wide range of specific errors. +These are usually represented in integers. + +### Message +A message explains more details about the error, while the same error +can occur for Situation A and B; Situation B may have a different reason +for the same error. This should not be used as a way to identify the error +and usually serves the purpose of troubleshooting or displaying the error +to the user. + +-------------------------------------------------------------------------- + +## Error Types + +Errors are split into sections to make it more easier to manage, you can +either identify errors indivdually by their error code or by range. + +| Section | Set | Range | Description | +|-----------------------|-----|---------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| Validation Errors | 21 | 8448 - 8703 | Errors that returns when the given parameters or data is invalid in some way or another | +| Authentication Errors | 22 | 8704 - 8979 | Errors related to authentication/session management, these errors are usually returned when there was an error while trying to authenticate or there are session errors such as the session being expired. | +| Media Errors | 23 | 8960 - 12543 | Errors related to the media on the network, errors are usually returned if your client uploads bad media files or for some reason there is an error related to the media content on the network. | +| Network Errors | 31 | 12544 - 16383 | Errors related to actions on the network, peers not being found, posts not being found, incorrect permissions, rate limits, etc. | +| Server Errors | 40 | 16384 - *(?) | Errors related to the server, unexpected errors, servers related to administrators/moderators performing administrative tasks on the server | + +## Error Codes + + - [Validation Errors](ValidationErrors.md) 8448 - 8703 + - [Authentication Errors](AuthenticationErrors.md) 8704 - 8979 + - [Media Errors](MediaErrors.md) 8960 - 12543 + - [Network Errors](NetworkErrors.md) 12544 - 16383 + - [Server Errors](ServerErrors.md) 16384 - *(?) \ No newline at end of file diff --git a/Socialvoid/Errors/RPCErrors/InternalErrorException.cs b/Socialvoid/Errors/RPCErrors/InternalErrorException.cs new file mode 100644 index 0000000..352490f --- /dev/null +++ b/Socialvoid/Errors/RPCErrors/InternalErrorException.cs @@ -0,0 +1,84 @@ +/* + * This file is part of Socialvoid.NET Project (https://github.com/Intellivoid/Socialvoid.NET). + * Copyright (c) 2021 Socialvoid.NET Authors. + * + * This library is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, version 3. + * + * This library is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this source code of library. + * If not, see . + */ + +namespace Socialvoid.Errors.RPCErrors +{ + /// + /// This exception will be raised when an internal JSON-RPC error + /// happens at the server-side. + /// Since: v0.0.0 + /// + public sealed class InternalErrorException : GeneralException + { + //------------------------------------------------- + #region Constant's Region + // some members here + #endregion + //------------------------------------------------- + #region static Properties Region + // some members here + #endregion + //------------------------------------------------- + #region Properties Region + /// + /// The error code + /// will be returned because of an internal JSON-RPC error. + /// Since: v0.0.0 + /// + public override ErrorCodes ErrorCode + { + get + { + return ErrorCodes.InternalError; + } + } + #endregion + //------------------------------------------------- + #region static field's Region + // some members here + #endregion + //------------------------------------------------- + #region field's Region + // some members here + #endregion + //------------------------------------------------- + #region static event field's Region + // some members here + #endregion + //------------------------------------------------- + #region event field's Region + // some members here + #endregion + //------------------------------------------------- + #region Constructor's Region + /// + /// Creates a new instance of . + /// Since: v0.0.0 + /// + internal InternalErrorException(string message) : base(message) + { + ; + } + #endregion + //------------------------------------------------- + #region Destructor's Region + // some members here + #endregion + //------------------------------------------------- + } +} \ No newline at end of file diff --git a/Socialvoid/Errors/RPCErrors/InvalidParamsException.cs b/Socialvoid/Errors/RPCErrors/InvalidParamsException.cs new file mode 100644 index 0000000..168379e --- /dev/null +++ b/Socialvoid/Errors/RPCErrors/InvalidParamsException.cs @@ -0,0 +1,85 @@ +/* + * This file is part of Socialvoid.NET Project (https://github.com/Intellivoid/Socialvoid.NET). + * Copyright (c) 2021 Socialvoid.NET Authors. + * + * This library is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, version 3. + * + * This library is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this source code of library. + * If not, see . + */ + +namespace Socialvoid.Errors.RPCErrors +{ + /// + /// This exception will be raised when invalid method parameter(s) is + /// received by socialvoid's servers. + /// Since: v0.0.0 + /// + public sealed class InvalidParamsException : GeneralException + { + //------------------------------------------------- + #region Constant's Region + // some members here + #endregion + //------------------------------------------------- + #region static Properties Region + // some members here + #endregion + //------------------------------------------------- + #region Properties Region + /// + /// The error code + /// will be returned because invalid method parameter(s) is + /// received by socialvoid's servers. + /// Since: v0.0.0 + /// + public override ErrorCodes ErrorCode + { + get + { + return ErrorCodes.InvalidParams; + } + } + #endregion + //------------------------------------------------- + #region static field's Region + // some members here + #endregion + //------------------------------------------------- + #region field's Region + // some members here + #endregion + //------------------------------------------------- + #region static event field's Region + // some members here + #endregion + //------------------------------------------------- + #region event field's Region + // some members here + #endregion + //------------------------------------------------- + #region Constructor's Region + /// + /// Creates a new instance of . + /// Since: v0.0.0 + /// + internal InvalidParamsException(string message) : base(message) + { + ; + } + #endregion + //------------------------------------------------- + #region Destructor's Region + // some members here + #endregion + //------------------------------------------------- + } +} \ No newline at end of file diff --git a/Socialvoid/Errors/RPCErrors/InvalidRequestException.cs b/Socialvoid/Errors/RPCErrors/InvalidRequestException.cs new file mode 100644 index 0000000..b11474a --- /dev/null +++ b/Socialvoid/Errors/RPCErrors/InvalidRequestException.cs @@ -0,0 +1,85 @@ +/* + * This file is part of Socialvoid.NET Project (https://github.com/Intellivoid/Socialvoid.NET). + * Copyright (c) 2021 Socialvoid.NET Authors. + * + * This library is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, version 3. + * + * This library is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this source code of library. + * If not, see . + */ + +namespace Socialvoid.Errors.RPCErrors +{ + /// + /// This exception will be raised when the JSON object sent to + /// the socialvoid's server is not a valid Request object. + /// Since: v0.0.0 + /// + public sealed class InvalidRequestException : GeneralException + { + //------------------------------------------------- + #region Constant's Region + // some members here + #endregion + //------------------------------------------------- + #region static Properties Region + // some members here + #endregion + //------------------------------------------------- + #region Properties Region + /// + /// The error code + /// will be returned because the JSON object sent is not a + /// valid Request object. + /// Since: v0.0.0 + /// + public override ErrorCodes ErrorCode + { + get + { + return ErrorCodes.InvalidRequest; + } + } + #endregion + //------------------------------------------------- + #region static field's Region + // some members here + #endregion + //------------------------------------------------- + #region field's Region + // some members here + #endregion + //------------------------------------------------- + #region static event field's Region + // some members here + #endregion + //------------------------------------------------- + #region event field's Region + // some members here + #endregion + //------------------------------------------------- + #region Constructor's Region + /// + /// Creates a new instance of . + /// Since: v0.0.0 + /// + internal InvalidRequestException(string message) : base(message) + { + ; + } + #endregion + //------------------------------------------------- + #region Destructor's Region + // some members here + #endregion + //------------------------------------------------- + } +} \ No newline at end of file diff --git a/Socialvoid/Errors/RPCErrors/InvocationErrorException.cs b/Socialvoid/Errors/RPCErrors/InvocationErrorException.cs new file mode 100644 index 0000000..5ff32b2 --- /dev/null +++ b/Socialvoid/Errors/RPCErrors/InvocationErrorException.cs @@ -0,0 +1,85 @@ +/* + * This file is part of Socialvoid.NET Project (https://github.com/Intellivoid/Socialvoid.NET). + * Copyright (c) 2021 Socialvoid.NET Authors. + * + * This library is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, version 3. + * + * This library is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this source code of library. + * If not, see . + */ + +namespace Socialvoid.Errors.RPCErrors +{ + /// + /// This exception will be raised when the RPC call was made but the target + /// threw an exception. + /// Since: v0.0.0 + /// + public sealed class InvocationErrorException : GeneralException + { + //------------------------------------------------- + #region Constant's Region + // some members here + #endregion + //------------------------------------------------- + #region static Properties Region + // some members here + #endregion + //------------------------------------------------- + #region Properties Region + /// + /// The error code + /// will be returned because the RPC call was made but the target + /// threw an exception. + /// Since: v0.0.0 + /// + public override ErrorCodes ErrorCode + { + get + { + return ErrorCodes.InvocationError; + } + } + #endregion + //------------------------------------------------- + #region static field's Region + // some members here + #endregion + //------------------------------------------------- + #region field's Region + // some members here + #endregion + //------------------------------------------------- + #region static event field's Region + // some members here + #endregion + //------------------------------------------------- + #region event field's Region + // some members here + #endregion + //------------------------------------------------- + #region Constructor's Region + /// + /// Creates a new instance of . + /// Since: v0.0.0 + /// + internal InvocationErrorException(string message) : base(message) + { + ; + } + #endregion + //------------------------------------------------- + #region Destructor's Region + // some members here + #endregion + //------------------------------------------------- + } +} \ No newline at end of file diff --git a/Socialvoid/Errors/RPCErrors/InvocationErrorWithExException.cs b/Socialvoid/Errors/RPCErrors/InvocationErrorWithExException.cs new file mode 100644 index 0000000..f10a036 --- /dev/null +++ b/Socialvoid/Errors/RPCErrors/InvocationErrorWithExException.cs @@ -0,0 +1,85 @@ +/* + * This file is part of Socialvoid.NET Project (https://github.com/Intellivoid/Socialvoid.NET). + * Copyright (c) 2021 Socialvoid.NET Authors. + * + * This library is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, version 3. + * + * This library is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this source code of library. + * If not, see . + */ + +namespace Socialvoid.Errors.RPCErrors +{ + /// + /// This exception will be raised when the RPC call was made but + /// the target threw an exception. + /// Since: v0.0.0 + /// + public sealed class InvocationErrorWithExException : GeneralException + { + //------------------------------------------------- + #region Constant's Region + // some members here + #endregion + //------------------------------------------------- + #region static Properties Region + // some members here + #endregion + //------------------------------------------------- + #region Properties Region + /// + /// The error code + /// will be returned because the RPC call was made but + /// the target threw an exception. + /// Since: v0.0.0 + /// + public override ErrorCodes ErrorCode + { + get + { + return ErrorCodes.InvocationErrorWithException; + } + } + #endregion + //------------------------------------------------- + #region static field's Region + // some members here + #endregion + //------------------------------------------------- + #region field's Region + // some members here + #endregion + //------------------------------------------------- + #region static event field's Region + // some members here + #endregion + //------------------------------------------------- + #region event field's Region + // some members here + #endregion + //------------------------------------------------- + #region Constructor's Region + /// + /// Creates a new instance of . + /// Since: v0.0.0 + /// + internal InvocationErrorWithExException(string message) : base(message) + { + ; + } + #endregion + //------------------------------------------------- + #region Destructor's Region + // some members here + #endregion + //------------------------------------------------- + } +} \ No newline at end of file diff --git a/Socialvoid/Errors/RPCErrors/MethodNotFoundException.cs b/Socialvoid/Errors/RPCErrors/MethodNotFoundException.cs new file mode 100644 index 0000000..ca5a07f --- /dev/null +++ b/Socialvoid/Errors/RPCErrors/MethodNotFoundException.cs @@ -0,0 +1,85 @@ +/* + * This file is part of Socialvoid.NET Project (https://github.com/Intellivoid/Socialvoid.NET). + * Copyright (c) 2021 Socialvoid.NET Authors. + * + * This library is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, version 3. + * + * This library is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this source code of library. + * If not, see . + */ + +namespace Socialvoid.Errors.RPCErrors +{ + /// + /// This exception will be raised when the method does not exist / is + /// not available. + /// Since: v0.0.0 + /// + public sealed class MethodNotFoundException : GeneralException + { + //------------------------------------------------- + #region Constant's Region + // some members here + #endregion + //------------------------------------------------- + #region static Properties Region + // some members here + #endregion + //------------------------------------------------- + #region Properties Region + /// + /// The error code + /// will be returned because the method does not exist / is + /// not available. + /// Since: v0.0.0 + /// + public override ErrorCodes ErrorCode + { + get + { + return ErrorCodes.MethodNotFound; + } + } + #endregion + //------------------------------------------------- + #region static field's Region + // some members here + #endregion + //------------------------------------------------- + #region field's Region + // some members here + #endregion + //------------------------------------------------- + #region static event field's Region + // some members here + #endregion + //------------------------------------------------- + #region event field's Region + // some members here + #endregion + //------------------------------------------------- + #region Constructor's Region + /// + /// Creates a new instance of . + /// Since: v0.0.0 + /// + internal MethodNotFoundException(string message) : base(message) + { + ; + } + #endregion + //------------------------------------------------- + #region Destructor's Region + // some members here + #endregion + //------------------------------------------------- + } +} \ No newline at end of file diff --git a/Socialvoid/Errors/RPCErrors/NoMarshaledObjectFoundException.cs b/Socialvoid/Errors/RPCErrors/NoMarshaledObjectFoundException.cs new file mode 100644 index 0000000..26911b4 --- /dev/null +++ b/Socialvoid/Errors/RPCErrors/NoMarshaledObjectFoundException.cs @@ -0,0 +1,85 @@ +/* + * This file is part of Socialvoid.NET Project (https://github.com/Intellivoid/Socialvoid.NET). + * Copyright (c) 2021 Socialvoid.NET Authors. + * + * This library is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, version 3. + * + * This library is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this source code of library. + * If not, see . + */ + +namespace Socialvoid.Errors.RPCErrors +{ + /// + /// This exception will be raised when a request is made to a remotely + /// marshaled object that never existed or has already been disposed of. + /// Since: v0.0.0 + /// + public sealed class NoMarshaledObjectFound : GeneralException + { + //------------------------------------------------- + #region Constant's Region + // some members here + #endregion + //------------------------------------------------- + #region static Properties Region + // some members here + #endregion + //------------------------------------------------- + #region Properties Region + /// + /// The error code + /// will be returned because a request was made to a remotely marshaled object + /// that never existed or has already been disposed of. + /// Since: v0.0.0 + /// + public override ErrorCodes ErrorCode + { + get + { + return ErrorCodes.NoMarshaledObjectFound; + } + } + #endregion + //------------------------------------------------- + #region static field's Region + // some members here + #endregion + //------------------------------------------------- + #region field's Region + // some members here + #endregion + //------------------------------------------------- + #region static event field's Region + // some members here + #endregion + //------------------------------------------------- + #region event field's Region + // some members here + #endregion + //------------------------------------------------- + #region Constructor's Region + /// + /// Creates a new instance of . + /// Since: v0.0.0 + /// + internal NoMarshaledObjectFound(string message) : base(message) + { + ; + } + #endregion + //------------------------------------------------- + #region Destructor's Region + // some members here + #endregion + //------------------------------------------------- + } +} \ No newline at end of file diff --git a/Socialvoid/Errors/RPCErrors/ParseErrorException.cs b/Socialvoid/Errors/RPCErrors/ParseErrorException.cs new file mode 100644 index 0000000..994a506 --- /dev/null +++ b/Socialvoid/Errors/RPCErrors/ParseErrorException.cs @@ -0,0 +1,85 @@ +/* + * This file is part of Socialvoid.NET Project (https://github.com/Intellivoid/Socialvoid.NET). + * Copyright (c) 2021 Socialvoid.NET Authors. + * + * This library is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, version 3. + * + * This library is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this source code of library. + * If not, see . + */ + +namespace Socialvoid.Errors.RPCErrors +{ + /// + /// This exception will be raised when invalid JSON is received by the server. + /// An error occurred on the server while parsing the JSON text. + /// Since: v0.0.0 + /// + public sealed class ParseErrorException : GeneralException + { + //------------------------------------------------- + #region Constant's Region + // some members here + #endregion + //------------------------------------------------- + #region static Properties Region + // some members here + #endregion + //------------------------------------------------- + #region Properties Region + /// + /// The error code + /// will be returned because invalid JSON was received by the server. + /// An error occurred on the server while parsing the JSON text. + /// Since: v0.0.0 + /// + public override ErrorCodes ErrorCode + { + get + { + return ErrorCodes.ParseError; + } + } + #endregion + //------------------------------------------------- + #region static field's Region + // some members here + #endregion + //------------------------------------------------- + #region field's Region + // some members here + #endregion + //------------------------------------------------- + #region static event field's Region + // some members here + #endregion + //------------------------------------------------- + #region event field's Region + // some members here + #endregion + //------------------------------------------------- + #region Constructor's Region + /// + /// Creates a new instance of . + /// Since: v0.0.0 + /// + internal ParseErrorException(string message) : base(message) + { + ; + } + #endregion + //------------------------------------------------- + #region Destructor's Region + // some members here + #endregion + //------------------------------------------------- + } +} \ No newline at end of file diff --git a/Socialvoid/Errors/RPCErrors/RequestCanceledException.cs b/Socialvoid/Errors/RPCErrors/RequestCanceledException.cs new file mode 100644 index 0000000..27485e7 --- /dev/null +++ b/Socialvoid/Errors/RPCErrors/RequestCanceledException.cs @@ -0,0 +1,85 @@ +/* + * This file is part of Socialvoid.NET Project (https://github.com/Intellivoid/Socialvoid.NET). + * Copyright (c) 2021 Socialvoid.NET Authors. + * + * This library is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, version 3. + * + * This library is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this source code of library. + * If not, see . + */ + +namespace Socialvoid.Errors.RPCErrors +{ + /// + /// This exception will be raised when execution of the server method is + /// aborted due to a cancellation request from the client. + /// Since: v0.0.0 + /// + public sealed class RequestCanceledException : GeneralException + { + //------------------------------------------------- + #region Constant's Region + // some members here + #endregion + //------------------------------------------------- + #region static Properties Region + // some members here + #endregion + //------------------------------------------------- + #region Properties Region + /// + /// The error code + /// will be returned because execution of the server method was aborted + /// due to a cancellation request from the client. + /// Since: v0.0.0 + /// + public override ErrorCodes ErrorCode + { + get + { + return ErrorCodes.RequestCanceled; + } + } + #endregion + //------------------------------------------------- + #region static field's Region + // some members here + #endregion + //------------------------------------------------- + #region field's Region + // some members here + #endregion + //------------------------------------------------- + #region static event field's Region + // some members here + #endregion + //------------------------------------------------- + #region event field's Region + // some members here + #endregion + //------------------------------------------------- + #region Constructor's Region + /// + /// Creates a new instance of . + /// Since: v0.0.0 + /// + internal RequestCanceledException(string message) : base(message) + { + ; + } + #endregion + //------------------------------------------------- + #region Destructor's Region + // some members here + #endregion + //------------------------------------------------- + } +} \ No newline at end of file diff --git a/Socialvoid/Errors/RPCErrors/ResponseSerializationFailureException.cs b/Socialvoid/Errors/RPCErrors/ResponseSerializationFailureException.cs new file mode 100644 index 0000000..7a7734b --- /dev/null +++ b/Socialvoid/Errors/RPCErrors/ResponseSerializationFailureException.cs @@ -0,0 +1,85 @@ +/* + * This file is part of Socialvoid.NET Project (https://github.com/Intellivoid/Socialvoid.NET). + * Copyright (c) 2021 Socialvoid.NET Authors. + * + * This library is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, version 3. + * + * This library is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this source code of library. + * If not, see . + */ + +namespace Socialvoid.Errors.RPCErrors +{ + /// + /// This exception will be raised when a response cannot not be serialized + /// as the application intended. + /// Since: v0.0.0 + /// + public sealed class ResponseSerializationFailureException : GeneralException + { + //------------------------------------------------- + #region Constant's Region + // some members here + #endregion + //------------------------------------------------- + #region static Properties Region + // some members here + #endregion + //------------------------------------------------- + #region Properties Region + /// + /// The error code + /// will be returned because a response could not be serialized + /// as the application intended. + /// Since: v0.0.0 + /// + public override ErrorCodes ErrorCode + { + get + { + return ErrorCodes.ResponseSerializationFailure; + } + } + #endregion + //------------------------------------------------- + #region static field's Region + // some members here + #endregion + //------------------------------------------------- + #region field's Region + // some members here + #endregion + //------------------------------------------------- + #region static event field's Region + // some members here + #endregion + //------------------------------------------------- + #region event field's Region + // some members here + #endregion + //------------------------------------------------- + #region Constructor's Region + /// + /// Creates a new instance of . + /// Since: v0.0.0 + /// + internal ResponseSerializationFailureException(string message) : base(message) + { + ; + } + #endregion + //------------------------------------------------- + #region Destructor's Region + // some members here + #endregion + //------------------------------------------------- + } +} \ No newline at end of file diff --git a/Socialvoid/Errors/ServerErrors/InternalServerErrorException.cs b/Socialvoid/Errors/ServerErrors/InternalServerErrorException.cs new file mode 100644 index 0000000..40fdc61 --- /dev/null +++ b/Socialvoid/Errors/ServerErrors/InternalServerErrorException.cs @@ -0,0 +1,85 @@ +/* + * This file is part of Socialvoid.NET Project (https://github.com/Intellivoid/Socialvoid.NET). + * Copyright (c) 2021 Socialvoid.NET Authors. + * + * This library is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, version 3. + * + * This library is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this source code of library. + * If not, see . + */ + +namespace Socialvoid.Errors.ServerErrors +{ + /// + /// This exception will be raised when there is an unexpected error + /// while server tried to process our request. + /// Since: v0.0.0 + /// + public sealed class InternalServerErrorException : GeneralException + { + //------------------------------------------------- + #region Constant's Region + // some members here + #endregion + //------------------------------------------------- + #region static Properties Region + // some members here + #endregion + //------------------------------------------------- + #region Properties Region + /// + /// The error code + /// will be returned because there was an unexpected error + /// while trying to process your request. + /// Since: v0.0.0 + /// + public override ErrorCodes ErrorCode + { + get + { + return ErrorCodes.InternalServerError; + } + } + #endregion + //------------------------------------------------- + #region static field's Region + // some members here + #endregion + //------------------------------------------------- + #region field's Region + // some members here + #endregion + //------------------------------------------------- + #region static event field's Region + // some members here + #endregion + //------------------------------------------------- + #region event field's Region + // some members here + #endregion + //------------------------------------------------- + #region Constructor's Region + /// + /// Creates a new instance of . + /// Since: v0.0.0 + /// + internal InternalServerErrorException(string message) : base(message) + { + ; + } + #endregion + //------------------------------------------------- + #region Destructor's Region + // some members here + #endregion + //------------------------------------------------- + } +} \ No newline at end of file diff --git a/Socialvoid/Errors/ServerErrors/README.md b/Socialvoid/Errors/ServerErrors/README.md new file mode 100644 index 0000000..5347eef --- /dev/null +++ b/Socialvoid/Errors/ServerErrors/README.md @@ -0,0 +1,8 @@ +# ServerErrors + +These errors are usually rasied as a last resort when something is wrong +with the server. + +| Name | Code | Hex Code | Deprecated | Versions | Description | +|---------------------|-------|----------|------------|----------|---------------------------------------------------------------------------------| +| InternalServerError | 16384 | 0x04000 | No | 1.0 | Raised when there was an unexpected error while trying to process your request. | \ No newline at end of file diff --git a/Socialvoid/Errors/ValidationErrors/InvalidBiographyException.cs b/Socialvoid/Errors/ValidationErrors/InvalidBiographyException.cs new file mode 100644 index 0000000..b40d6e9 --- /dev/null +++ b/Socialvoid/Errors/ValidationErrors/InvalidBiographyException.cs @@ -0,0 +1,87 @@ +/* + * This file is part of Socialvoid.NET Project (https://github.com/Intellivoid/Socialvoid.NET). + * Copyright (c) 2021 Socialvoid.NET Authors. + * + * This library is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, version 3. + * + * This library is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this source code of library. + * If not, see . + */ + +namespace Socialvoid.Errors.ValidationErrors +{ + /// + /// This exception will be raised when the Biography is too long + /// or contains invalid characters; + /// please see the message for further details. + /// Since: v0.0.0 + /// + public sealed class InvalidBiographyException : GeneralException + { + //------------------------------------------------- + #region Constant's Region + // some members here + #endregion + //------------------------------------------------- + #region static Properties Region + // some members here + #endregion + //------------------------------------------------- + #region Properties Region + /// + /// The error code + /// will be returned because the Biography is too long + /// or contains invalid characters; + /// please see the message for further details. + /// Since: v0.0.0 + /// + public override ErrorCodes ErrorCode + { + get + { + return ErrorCodes.InvalidBiography; + } + } + #endregion + //------------------------------------------------- + #region static field's Region + // some members here + #endregion + //------------------------------------------------- + #region field's Region + // some members here + #endregion + //------------------------------------------------- + #region static event field's Region + // some members here + #endregion + //------------------------------------------------- + #region event field's Region + // some members here + #endregion + //------------------------------------------------- + #region Constructor's Region + /// + /// Creates a new instance of . + /// Since: v0.0.0 + /// + internal InvalidBiographyException(string message) : base(message) + { + ; + } + #endregion + //------------------------------------------------- + #region Destructor's Region + // some members here + #endregion + //------------------------------------------------- + } +} diff --git a/Socialvoid/Errors/ValidationErrors/InvalidClientNameException.cs b/Socialvoid/Errors/ValidationErrors/InvalidClientNameException.cs new file mode 100644 index 0000000..79e4ed6 --- /dev/null +++ b/Socialvoid/Errors/ValidationErrors/InvalidClientNameException.cs @@ -0,0 +1,87 @@ +/* + * This file is part of Socialvoid.NET Project (https://github.com/Intellivoid/Socialvoid.NET). + * Copyright (c) 2021 Socialvoid.NET Authors. + * + * This library is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, version 3. + * + * This library is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this source code of library. + * If not, see . + */ + +namespace Socialvoid.Errors.ValidationErrors +{ + /// + /// This exception will be raised when the client name contains invalid + /// characters or is too long; + /// please see the message for further details. + /// Since: v0.0.0 + /// + public sealed class InvalidClientNameException : GeneralException + { + //------------------------------------------------- + #region Constant's Region + // some members here + #endregion + //------------------------------------------------- + #region static Properties Region + // some members here + #endregion + //------------------------------------------------- + #region Properties Region + /// + /// The error code + /// will be returned because the client name contains invalid + /// characters or is too long; + /// please see the message for further details. + /// Since: v0.0.0 + /// + public override ErrorCodes ErrorCode + { + get + { + return ErrorCodes.InvalidClientName; + } + } + #endregion + //------------------------------------------------- + #region static field's Region + // some members here + #endregion + //------------------------------------------------- + #region field's Region + // some members here + #endregion + //------------------------------------------------- + #region static event field's Region + // some members here + #endregion + //------------------------------------------------- + #region event field's Region + // some members here + #endregion + //------------------------------------------------- + #region Constructor's Region + /// + /// Creates a new instance of . + /// Since: v0.0.0 + /// + internal InvalidClientNameException(string message) : base(message) + { + ; + } + #endregion + //------------------------------------------------- + #region Destructor's Region + // some members here + #endregion + //------------------------------------------------- + } +} diff --git a/Socialvoid/Errors/ValidationErrors/InvalidClientPrivateHashException.cs b/Socialvoid/Errors/ValidationErrors/InvalidClientPrivateHashException.cs new file mode 100644 index 0000000..52e2d59 --- /dev/null +++ b/Socialvoid/Errors/ValidationErrors/InvalidClientPrivateHashException.cs @@ -0,0 +1,86 @@ +/* + * This file is part of Socialvoid.NET Project (https://github.com/Intellivoid/Socialvoid.NET). + * Copyright (c) 2021 Socialvoid.NET Authors. + * + * This library is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, version 3. + * + * This library is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this source code of library. + * If not, see . + */ + +namespace Socialvoid.Errors.ValidationErrors +{ + /// + /// This exception will be raised when the client's private hash is invalid + /// and cannot be identified as a sha256. + /// Since: v0.0.0 + /// + public sealed class InvalidClientPrivateHashException : GeneralException + { + //------------------------------------------------- + #region Constant's Region + // some members here + #endregion + //------------------------------------------------- + #region static Properties Region + // some members here + #endregion + //------------------------------------------------- + #region Properties Region + /// + /// The error code + /// will be returned because the client's private hash is invalid + /// and cannot be identified as a sha256. + /// Since: v0.0.0 + /// + public override ErrorCodes ErrorCode + { + get + { + return ErrorCodes.InvalidClientPrivateHash; + } + } + #endregion + //------------------------------------------------- + #region static field's Region + // some members here + #endregion + //------------------------------------------------- + #region field's Region + // some members here + #endregion + //------------------------------------------------- + #region static event field's Region + // some members here + #endregion + //------------------------------------------------- + #region event field's Region + // some members here + #endregion + //------------------------------------------------- + #region Constructor's Region + /// + /// Creates a new instance of + /// . + /// Since: v0.0.0 + /// + internal InvalidClientPrivateHashException(string message) : base(message) + { + ; + } + #endregion + //------------------------------------------------- + #region Destructor's Region + // some members here + #endregion + //------------------------------------------------- + } +} diff --git a/Socialvoid/Errors/ValidationErrors/InvalidClientPublicHashException.cs b/Socialvoid/Errors/ValidationErrors/InvalidClientPublicHashException.cs new file mode 100644 index 0000000..dd2326f --- /dev/null +++ b/Socialvoid/Errors/ValidationErrors/InvalidClientPublicHashException.cs @@ -0,0 +1,85 @@ +/* + * This file is part of Socialvoid.NET Project (https://github.com/Intellivoid/Socialvoid.NET). + * Copyright (c) 2021 Socialvoid.NET Authors. + * + * This library is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, version 3. + * + * This library is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this source code of library. + * If not, see . + */ + +namespace Socialvoid.Errors.ValidationErrors +{ + /// + /// This exception will be raised when the client's public hash is invalid + /// and cannot be identified as a sha256. + /// Since: v0.0.0 + /// + public sealed class InvalidClientPublicHashException : GeneralException + { + //------------------------------------------------- + #region Constant's Region + // some members here + #endregion + //------------------------------------------------- + #region static Properties Region + // some members here + #endregion + //------------------------------------------------- + #region Properties Region + /// + /// The error code + /// will be returned because the client's public hash is invalid + /// and cannot be identified as a sha256. + /// Since: v0.0.0 + /// + public override ErrorCodes ErrorCode + { + get + { + return ErrorCodes.InvalidClientPublicHash; + } + } + #endregion + //------------------------------------------------- + #region static field's Region + // some members here + #endregion + //------------------------------------------------- + #region field's Region + // some members here + #endregion + //------------------------------------------------- + #region static event field's Region + // some members here + #endregion + //------------------------------------------------- + #region event field's Region + // some members here + #endregion + //------------------------------------------------- + #region Constructor's Region + /// + /// Creates a new instance of . + /// Since: v0.0.0 + /// + internal InvalidClientPublicHashException(string message) : base(message) + { + ; + } + #endregion + //------------------------------------------------- + #region Destructor's Region + // some members here + #endregion + //------------------------------------------------- + } +} diff --git a/Socialvoid/Errors/ValidationErrors/InvalidFirstNameException.cs b/Socialvoid/Errors/ValidationErrors/InvalidFirstNameException.cs new file mode 100644 index 0000000..833d054 --- /dev/null +++ b/Socialvoid/Errors/ValidationErrors/InvalidFirstNameException.cs @@ -0,0 +1,87 @@ +/* + * This file is part of Socialvoid.NET Project (https://github.com/Intellivoid/Socialvoid.NET). + * Copyright (c) 2021 Socialvoid.NET Authors. + * + * This library is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, version 3. + * + * This library is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this source code of library. + * If not, see . + */ + +namespace Socialvoid.Errors.ValidationErrors +{ + /// + /// This exception will be raised when the First Name provided contains + /// invalid characters and or is too long; + /// please see the message for further details. + /// Since: v0.0.0 + /// + public sealed class InvalidFirstNameException : GeneralException + { + //------------------------------------------------- + #region Constant's Region + // some members here + #endregion + //------------------------------------------------- + #region static Properties Region + // some members here + #endregion + //------------------------------------------------- + #region Properties Region + /// + /// The error code + /// will be returned because the First Name provided contains + /// invalid characters and or is too long; + /// please see the message for further details. + /// Since: v0.0.0 + /// + public override ErrorCodes ErrorCode + { + get + { + return ErrorCodes.InvalidFirstName; + } + } + #endregion + //------------------------------------------------- + #region static field's Region + // some members here + #endregion + //------------------------------------------------- + #region field's Region + // some members here + #endregion + //------------------------------------------------- + #region static event field's Region + // some members here + #endregion + //------------------------------------------------- + #region event field's Region + // some members here + #endregion + //------------------------------------------------- + #region Constructor's Region + /// + /// Creates a new instance of . + /// Since: v0.0.0 + /// + internal InvalidFirstNameException(string message) : base(message) + { + ; + } + #endregion + //------------------------------------------------- + #region Destructor's Region + // some members here + #endregion + //------------------------------------------------- + } +} diff --git a/Socialvoid/Errors/ValidationErrors/InvalidLastNameException.cs b/Socialvoid/Errors/ValidationErrors/InvalidLastNameException.cs new file mode 100644 index 0000000..4074998 --- /dev/null +++ b/Socialvoid/Errors/ValidationErrors/InvalidLastNameException.cs @@ -0,0 +1,87 @@ +/* + * This file is part of Socialvoid.NET Project (https://github.com/Intellivoid/Socialvoid.NET). + * Copyright (c) 2021 Socialvoid.NET Authors. + * + * This library is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, version 3. + * + * This library is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this source code of library. + * If not, see . + */ + +namespace Socialvoid.Errors.ValidationErrors +{ + /// + /// This exception will be raised when the Last Name provided contains + /// invalid characters and or is too long; + /// please see the message for further details. + /// Since: v0.0.0 + /// + public sealed class InvalidLastNameException : GeneralException + { + //------------------------------------------------- + #region Constant's Region + // some members here + #endregion + //------------------------------------------------- + #region static Properties Region + // some members here + #endregion + //------------------------------------------------- + #region Properties Region + /// + /// The error code + /// will be returned because the Last Name provided contains + /// invalid characters and or is too long; + /// please see the message for further details. + /// Since: v0.0.0 + /// + public override ErrorCodes ErrorCode + { + get + { + return ErrorCodes.InvalidLastName; + } + } + #endregion + //------------------------------------------------- + #region static field's Region + // some members here + #endregion + //------------------------------------------------- + #region field's Region + // some members here + #endregion + //------------------------------------------------- + #region static event field's Region + // some members here + #endregion + //------------------------------------------------- + #region event field's Region + // some members here + #endregion + //------------------------------------------------- + #region Constructor's Region + /// + /// Creates a new instance of . + /// Since: v0.0.0 + /// + internal InvalidLastNameException(string message) : base(message) + { + ; + } + #endregion + //------------------------------------------------- + #region Destructor's Region + // some members here + #endregion + //------------------------------------------------- + } +} diff --git a/Socialvoid/Errors/ValidationErrors/InvalidPasswordException.cs b/Socialvoid/Errors/ValidationErrors/InvalidPasswordException.cs new file mode 100644 index 0000000..8228b08 --- /dev/null +++ b/Socialvoid/Errors/ValidationErrors/InvalidPasswordException.cs @@ -0,0 +1,85 @@ +/* + * This file is part of Socialvoid.NET Project (https://github.com/Intellivoid/Socialvoid.NET). + * Copyright (c) 2021 Socialvoid.NET Authors. + * + * This library is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, version 3. + * + * This library is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this source code of library. + * If not, see . + */ + +namespace Socialvoid.Errors.ValidationErrors +{ + /// + /// This exception will be raised when the given password is invalid and/or + /// insecure and does not meet the specification. + /// Since: v0.0.0 + /// + public sealed class InvalidPasswordException : GeneralException + { + //------------------------------------------------- + #region Constant's Region + // some members here + #endregion + //------------------------------------------------- + #region static Properties Region + // some members here + #endregion + //------------------------------------------------- + #region Properties Region + /// + /// The error code + /// will be returned because the given password is invalid and/or + /// insecure and does not meet the specification. + /// Since: v0.0.0 + /// + public override ErrorCodes ErrorCode + { + get + { + return ErrorCodes.InvalidPassword; + } + } + #endregion + //------------------------------------------------- + #region static field's Region + // some members here + #endregion + //------------------------------------------------- + #region field's Region + // some members here + #endregion + //------------------------------------------------- + #region static event field's Region + // some members here + #endregion + //------------------------------------------------- + #region event field's Region + // some members here + #endregion + //------------------------------------------------- + #region Constructor's Region + /// + /// Creates a new instance of . + /// Since: v0.0.0 + /// + internal InvalidPasswordException(string message) : base(message) + { + ; + } + #endregion + //------------------------------------------------- + #region Destructor's Region + // some members here + #endregion + //------------------------------------------------- + } +} diff --git a/Socialvoid/Errors/ValidationErrors/InvalidPeerInputException.cs b/Socialvoid/Errors/ValidationErrors/InvalidPeerInputException.cs new file mode 100644 index 0000000..9324f1d --- /dev/null +++ b/Socialvoid/Errors/ValidationErrors/InvalidPeerInputException.cs @@ -0,0 +1,85 @@ +/* + * This file is part of Socialvoid.NET Project (https://github.com/Intellivoid/Socialvoid.NET). + * Copyright (c) 2021 Socialvoid.NET Authors. + * + * This library is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, version 3. + * + * This library is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this source code of library. + * If not, see . + */ + +namespace Socialvoid.Errors.ValidationErrors +{ + /// + /// This exception will be raised when the client provide an invalid + /// peer identification as input. + /// Since: v0.0.0 + /// + public sealed class InvalidPeerInputException : GeneralException + { + //------------------------------------------------- + #region Constant's Region + // some members here + #endregion + //------------------------------------------------- + #region static Properties Region + // some members here + #endregion + //------------------------------------------------- + #region Properties Region + /// + /// The error code + /// will be returned because the client provided an invalid + /// peer identification as input. + /// Since: v0.0.0 + /// + public override ErrorCodes ErrorCode + { + get + { + return ErrorCodes.InvalidPeerInput; + } + } + #endregion + //------------------------------------------------- + #region static field's Region + // some members here + #endregion + //------------------------------------------------- + #region field's Region + // some members here + #endregion + //------------------------------------------------- + #region static event field's Region + // some members here + #endregion + //------------------------------------------------- + #region event field's Region + // some members here + #endregion + //------------------------------------------------- + #region Constructor's Region + /// + /// Creates a new instance of . + /// Since: v0.0.0 + /// + internal InvalidPeerInputException(string message) : base(message) + { + ; + } + #endregion + //------------------------------------------------- + #region Destructor's Region + // some members here + #endregion + //------------------------------------------------- + } +} diff --git a/Socialvoid/Errors/ValidationErrors/InvalidPlatformException.cs b/Socialvoid/Errors/ValidationErrors/InvalidPlatformException.cs new file mode 100644 index 0000000..8332162 --- /dev/null +++ b/Socialvoid/Errors/ValidationErrors/InvalidPlatformException.cs @@ -0,0 +1,87 @@ +/* + * This file is part of Socialvoid.NET Project (https://github.com/Intellivoid/Socialvoid.NET). + * Copyright (c) 2021 Socialvoid.NET Authors. + * + * This library is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, version 3. + * + * This library is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this source code of library. + * If not, see . + */ + +namespace Socialvoid.Errors.ValidationErrors +{ + /// + /// This exception will be raised when the platform name contains invalid + /// characters or is too long; + /// please see the message for further details. + /// Since: v0.0.0 + /// + public sealed class InvalidPlatformException : GeneralException + { + //------------------------------------------------- + #region Constant's Region + // some members here + #endregion + //------------------------------------------------- + #region static Properties Region + // some members here + #endregion + //------------------------------------------------- + #region Properties Region + /// + /// The error code + /// will be returned because the platform name contains invalid + /// characters or is too long; + /// please see the message for further details. + /// Since: v0.0.0 + /// + public override ErrorCodes ErrorCode + { + get + { + return ErrorCodes.InvalidPlatform; + } + } + #endregion + //------------------------------------------------- + #region static field's Region + // some members here + #endregion + //------------------------------------------------- + #region field's Region + // some members here + #endregion + //------------------------------------------------- + #region static event field's Region + // some members here + #endregion + //------------------------------------------------- + #region event field's Region + // some members here + #endregion + //------------------------------------------------- + #region Constructor's Region + /// + /// Creates a new instance of . + /// Since: v0.0.0 + /// + internal InvalidPlatformException(string message) : base(message) + { + ; + } + #endregion + //------------------------------------------------- + #region Destructor's Region + // some members here + #endregion + //------------------------------------------------- + } +} diff --git a/Socialvoid/Errors/ValidationErrors/InvalidPostTextException.cs b/Socialvoid/Errors/ValidationErrors/InvalidPostTextException.cs new file mode 100644 index 0000000..9ddf005 --- /dev/null +++ b/Socialvoid/Errors/ValidationErrors/InvalidPostTextException.cs @@ -0,0 +1,87 @@ +/* + * This file is part of Socialvoid.NET Project (https://github.com/Intellivoid/Socialvoid.NET). + * Copyright (c) 2021 Socialvoid.NET Authors. + * + * This library is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, version 3. + * + * This library is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this source code of library. + * If not, see . + */ + +namespace Socialvoid.Errors.ValidationErrors +{ + /// + /// This exception will be raised when the post contains invalid + /// characters or is too long; + /// please see the exception message for further details. + /// Since: v0.0.0 + /// + public sealed class InvalidPostTextException : GeneralException + { + //------------------------------------------------- + #region Constant's Region + // some members here + #endregion + //------------------------------------------------- + #region static Properties Region + // some members here + #endregion + //------------------------------------------------- + #region Properties Region + /// + /// The error code + /// will be returned because the post contains invalid characters + /// or is too long; + /// please see the message for further details. + /// Since: v0.0.0 + /// + public override ErrorCodes ErrorCode + { + get + { + return ErrorCodes.InvalidPostText; + } + } + #endregion + //------------------------------------------------- + #region static field's Region + // some members here + #endregion + //------------------------------------------------- + #region field's Region + // some members here + #endregion + //------------------------------------------------- + #region static event field's Region + // some members here + #endregion + //------------------------------------------------- + #region event field's Region + // some members here + #endregion + //------------------------------------------------- + #region Constructor's Region + /// + /// Creates a new instance of . + /// Since: v0.0.0 + /// + internal InvalidPostTextException(string message) : base(message) + { + ; + } + #endregion + //------------------------------------------------- + #region Destructor's Region + // some members here + #endregion + //------------------------------------------------- + } +} diff --git a/Socialvoid/Errors/ValidationErrors/InvalidSessionIdentificationException.cs b/Socialvoid/Errors/ValidationErrors/InvalidSessionIdentificationException.cs new file mode 100644 index 0000000..2c0f1ed --- /dev/null +++ b/Socialvoid/Errors/ValidationErrors/InvalidSessionIdentificationException.cs @@ -0,0 +1,88 @@ +/* + * This file is part of Socialvoid.NET Project (https://github.com/Intellivoid/Socialvoid.NET). + * Copyright (c) 2021 Socialvoid.NET Authors. + * + * This library is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, version 3. + * + * This library is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this source code of library. + * If not, see . + */ + +namespace Socialvoid.Errors.ValidationErrors +{ + /// + /// This exception will be raised when the session identification + /// object is invalid; + /// please see the message for further details. + /// Since: v0.0.0 + /// + public sealed class InvalidSessionIdentificationException : GeneralException + { + //------------------------------------------------- + #region Constant's Region + // some members here + #endregion + //------------------------------------------------- + #region static Properties Region + // some members here + #endregion + //------------------------------------------------- + #region Properties Region + /// + /// The + /// error code will be returned because the session identification + /// object is invalid; + /// please see the message for further details. + /// Since: v0.0.0 + /// + public override ErrorCodes ErrorCode + { + get + { + return ErrorCodes.InvalidSessionIdentification; + } + } + #endregion + //------------------------------------------------- + #region static field's Region + // some members here + #endregion + //------------------------------------------------- + #region field's Region + // some members here + #endregion + //------------------------------------------------- + #region static event field's Region + // some members here + #endregion + //------------------------------------------------- + #region event field's Region + // some members here + #endregion + //------------------------------------------------- + #region Constructor's Region + /// + /// Creates a new instance of + /// . + /// Since: v0.0.0 + /// + internal InvalidSessionIdentificationException(string message) : base(message) + { + ; + } + #endregion + //------------------------------------------------- + #region Destructor's Region + // some members here + #endregion + //------------------------------------------------- + } +} diff --git a/Socialvoid/Errors/ValidationErrors/InvalidUsernameException.cs b/Socialvoid/Errors/ValidationErrors/InvalidUsernameException.cs new file mode 100644 index 0000000..ee8e928 --- /dev/null +++ b/Socialvoid/Errors/ValidationErrors/InvalidUsernameException.cs @@ -0,0 +1,85 @@ +/* + * This file is part of Socialvoid.NET Project (https://github.com/Intellivoid/Socialvoid.NET). + * Copyright (c) 2021 Socialvoid.NET Authors. + * + * This library is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, version 3. + * + * This library is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this source code of library. + * If not, see . + */ + +namespace Socialvoid.Errors.ValidationErrors +{ + /// + /// This exception will be raised when the given username is invalid + /// and does not meet the specification. + /// Since: v0.0.0 + /// + public sealed class InvalidUsernameException : GeneralException + { + //------------------------------------------------- + #region Constant's Region + // some members here + #endregion + //------------------------------------------------- + #region static Properties Region + // some members here + #endregion + //------------------------------------------------- + #region Properties Region + /// + /// The error code + /// will be returned because the given username is invalid and + /// does not meet the specifications. + /// Since: v0.0.0 + /// + public override ErrorCodes ErrorCode + { + get + { + return ErrorCodes.InvalidUsername; + } + } + #endregion + //------------------------------------------------- + #region static field's Region + // some members here + #endregion + //------------------------------------------------- + #region field's Region + // some members here + #endregion + //------------------------------------------------- + #region static event field's Region + // some members here + #endregion + //------------------------------------------------- + #region event field's Region + // some members here + #endregion + //------------------------------------------------- + #region Constructor's Region + /// + /// Creates a new instance of . + /// Since: v0.0.0 + /// + internal InvalidUsernameException(string message) : base(message) + { + ; + } + #endregion + //------------------------------------------------- + #region Destructor's Region + // some members here + #endregion + //------------------------------------------------- + } +} diff --git a/Socialvoid/Errors/ValidationErrors/InvalidVersionException.cs b/Socialvoid/Errors/ValidationErrors/InvalidVersionException.cs new file mode 100644 index 0000000..d2480e2 --- /dev/null +++ b/Socialvoid/Errors/ValidationErrors/InvalidVersionException.cs @@ -0,0 +1,85 @@ +/* + * This file is part of Socialvoid.NET Project (https://github.com/Intellivoid/Socialvoid.NET). + * Copyright (c) 2021 Socialvoid.NET Authors. + * + * This library is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, version 3. + * + * This library is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this source code of library. + * If not, see . + */ + +namespace Socialvoid.Errors.ValidationErrors +{ + /// + /// This exception will be raised when the given username is invalid + /// and does not meet the specification. + /// Since: v0.0.0 + /// + public sealed class InvalidVersionException : GeneralException + { + //------------------------------------------------- + #region Constant's Region + // some members here + #endregion + //------------------------------------------------- + #region static Properties Region + // some members here + #endregion + //------------------------------------------------- + #region Properties Region + /// + /// The error code + /// will be returned because the version is invalid or is too long; + /// please see the message for further details. + /// Since: v0.0.0 + /// + public override ErrorCodes ErrorCode + { + get + { + return ErrorCodes.InvalidVersion; + } + } + #endregion + //------------------------------------------------- + #region static field's Region + // some members here + #endregion + //------------------------------------------------- + #region field's Region + // some members here + #endregion + //------------------------------------------------- + #region static event field's Region + // some members here + #endregion + //------------------------------------------------- + #region event field's Region + // some members here + #endregion + //------------------------------------------------- + #region Constructor's Region + /// + /// Creates a new instance of . + /// Since: v0.0.0 + /// + internal InvalidVersionException(string message) : base(message) + { + ; + } + #endregion + //------------------------------------------------- + #region Destructor's Region + // some members here + #endregion + //------------------------------------------------- + } +} diff --git a/Socialvoid/Errors/ValidationErrors/README.md b/Socialvoid/Errors/ValidationErrors/README.md new file mode 100644 index 0000000..512e76f --- /dev/null +++ b/Socialvoid/Errors/ValidationErrors/README.md @@ -0,0 +1,21 @@ +# Validation Errors + +These are errors raised when your client passes on parameters or data +that is invalid in some way or another. + +| Name | Code | Hex Code | Deprecated | Versions | Description | +|------------------------------|------|----------|------------|----------|-------------------------------------------------------------------------------------------------------------| +| InvalidUsername | 8448 | 0x02100 | No | 1.0 | The given username is invalid and does not meet the specification | +| InvalidPassword | 8449 | 0x02101 | No | 1.0 | The given password is invalid and/or insecure and does not meet the specification | +| InvalidFirstName | 8450 | 0x02102 | No | 1.0 | The First Name provided contains invalid characters and or is too long, see the message for further details | +| InvalidLastName | 8451 | 0x02103 | No | 1.0 | The Last Name provided contains invalid characters and or is too long, see the message for further details | +| InvalidBiography | 8452 | 0x02104 | No | 1.0 | The Biography is too long or contains invalid characters, see the message for further details | +| UsernameAlreadyExists | 8453 | 0x02105 | No | 1.0 | The username is already registered in the network and cannot be used | +| InvalidPeerInput | 8454 | 0x02106 | No | 1.0 | The client provided an invalid peer identification as input | +| InvalidPostText | 8455 | 0x02107 | No | 1.0 | The post contains invalid characters or is too long, see the message for further details | +| InvalidClientPublicHash | 8456 | 0x02108 | No | 1.0 | The client's public hash is invalid and cannot be identified as a sha256 | +| InvalidClientPrivateHash | 8457 | 0x02109 | No | 1.0 | The client's private hash is invalid and cannot be identified as a sha256 | +| InvalidPlatform | 8464 | 0x02110 | No | 1.0 | The platform name contains invalid characters or is too long, see the message for further details | +| InvalidVersion | 8459 | 0x0210b | No | 1.0 | The version is invalid or is too long, see the message for further details | +| InvalidClientName | 8460 | 0x0210c | No | 1.0 | The client name contains invalid characters or is too long, see the message for further details | +| InvalidSessionIdentification | 8461 | 0x0210d | No | 1.0 | The session identification object is invalid, see the message for further details | \ No newline at end of file diff --git a/Socialvoid/Errors/ValidationErrors/UsernameAlreadyExistsException.cs b/Socialvoid/Errors/ValidationErrors/UsernameAlreadyExistsException.cs new file mode 100644 index 0000000..e635dc7 --- /dev/null +++ b/Socialvoid/Errors/ValidationErrors/UsernameAlreadyExistsException.cs @@ -0,0 +1,86 @@ +/* + * This file is part of Socialvoid.NET Project (https://github.com/Intellivoid/Socialvoid.NET). + * Copyright (c) 2021 Socialvoid.NET Authors. + * + * This library is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, version 3. + * + * This library is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this source code of library. + * If not, see . + */ + +namespace Socialvoid.Errors.ValidationErrors +{ + /// + /// This exception will be raised when the given username is invalid + /// and does not meet the specification. + /// Since: v0.0.0 + /// + public sealed class UsernameAlreadyExistsException : GeneralException + { + //------------------------------------------------- + #region Constant's Region + // some members here + #endregion + //------------------------------------------------- + #region static Properties Region + // some members here + #endregion + //------------------------------------------------- + #region Properties Region + /// + /// The error code + /// will be returned + /// because the given username is invalid and + /// does not meet the specifications. + /// Since: v0.0.0 + /// + public override ErrorCodes ErrorCode + { + get + { + return ErrorCodes.InvalidUsername; + } + } + #endregion + //------------------------------------------------- + #region static field's Region + // some members here + #endregion + //------------------------------------------------- + #region field's Region + // some members here + #endregion + //------------------------------------------------- + #region static event field's Region + // some members here + #endregion + //------------------------------------------------- + #region event field's Region + // some members here + #endregion + //------------------------------------------------- + #region Constructor's Region + /// + /// Creates a new instance of . + /// Since: v0.0.0 + /// + internal UsernameAlreadyExistsException(string message) : base(message) + { + ; + } + #endregion + //------------------------------------------------- + #region Destructor's Region + // some members here + #endregion + //------------------------------------------------- + } +} \ No newline at end of file diff --git a/Socialvoid/Icon.ico b/Socialvoid/Icon.ico new file mode 100644 index 0000000000000000000000000000000000000000..2d4d72be02c5679650994a6767599bf103684400 GIT binary patch literal 67646 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 Q-Wlkff!-N-;AY_e11{Mv9RL6T literal 0 HcmV?d00001 diff --git a/Socialvoid/Icon.png b/Socialvoid/Icon.png new file mode 100644 index 0000000000000000000000000000000000000000..7bfa7cd6790512f60c08984792097add65724cf9 GIT binary patch literal 143538 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 u + /// A simple object. + /// since: v0.0.0 + /// + [Serializable] + public class JArgs: Dictionary + { + //------------------------------------------------- + #region Constant's Region + // some members here + #endregion + //------------------------------------------------- + #region static Properties Region + // some members here + #endregion + //------------------------------------------------- + #region Properties Region + #endregion + //------------------------------------------------- + #region static field's Region + // some members here + #endregion + //------------------------------------------------- + #region field's Region + // some members here + #endregion + //------------------------------------------------- + #region static event field's Region + // some members here + #endregion + //------------------------------------------------- + #region event field's Region + // some members here + #endregion + //------------------------------------------------- + #region Constructor's Region + #endregion + //------------------------------------------------- + #region Destructor's Region + // some members here + #endregion + //------------------------------------------------- + #region Initialize Method's Region + // some methods here + #endregion + //------------------------------------------------- + #region Graphical Method's Region + // some methods here + #endregion + //------------------------------------------------- + #region event Method's Region + // some methods here + #endregion + //------------------------------------------------- + #region overrided Method's Region + // some methods here + #endregion + //------------------------------------------------- + #region ordinary Method's Region + // some methods here + #endregion + //------------------------------------------------- + #region Get Method's Region + + #endregion + //------------------------------------------------- + #region Set Method's Region + // some methods here + #endregion + //------------------------------------------------- + #region static Method's Region + #endregion + //------------------------------------------------- + } +} \ No newline at end of file diff --git a/Socialvoid/JObjects/JError.cs b/Socialvoid/JObjects/JError.cs new file mode 100644 index 0000000..636490d --- /dev/null +++ b/Socialvoid/JObjects/JError.cs @@ -0,0 +1,94 @@ +using System; +using System.Text.Json.Serialization; + +namespace Socialvoid.JObjects +{ + /// + /// A object which contains basic information + /// about an error returned by the server. + /// since: v0.0.0 + /// + [Serializable] + public sealed class JError + { + //------------------------------------------------- + #region Constant's Region + // some members here + #endregion + //------------------------------------------------- + #region static Properties Region + // some members here + #endregion + //------------------------------------------------- + #region Properties Region + /// + /// The response error code. + /// since: v0.0.0 + /// + [JsonPropertyName("code")] + public int Code { get; set; } + /// + /// The error message. + /// since: v0.0.0 + /// + [JsonPropertyName("message")] + public string Message { get; set; } + + #endregion + //------------------------------------------------- + #region static field's Region + // some members here + #endregion + //------------------------------------------------- + #region field's Region + // some members here + #endregion + //------------------------------------------------- + #region static event field's Region + // some members here + #endregion + //------------------------------------------------- + #region event field's Region + // some members here + #endregion + //------------------------------------------------- + #region Constructor's Region + #endregion + //------------------------------------------------- + #region Destructor's Region + // some members here + #endregion + //------------------------------------------------- + #region Initialize Method's Region + // some methods here + #endregion + //------------------------------------------------- + #region Graphical Method's Region + // some methods here + #endregion + //------------------------------------------------- + #region event Method's Region + // some methods here + #endregion + //------------------------------------------------- + #region overrided Method's Region + // some methods here + #endregion + //------------------------------------------------- + #region ordinary Method's Region + // some methods here + #endregion + //------------------------------------------------- + #region Get Method's Region + + #endregion + //------------------------------------------------- + #region Set Method's Region + // some methods here + #endregion + //------------------------------------------------- + #region static Method's Region + #endregion + //------------------------------------------------- + } +} \ No newline at end of file diff --git a/Socialvoid/JObjects/JRequest.cs b/Socialvoid/JObjects/JRequest.cs new file mode 100644 index 0000000..105c58a --- /dev/null +++ b/Socialvoid/JObjects/JRequest.cs @@ -0,0 +1,122 @@ +using System; +using System.Text.Json.Serialization; +using System.Text.Json; + +namespace Socialvoid.JObjects +{ + /// + /// A object which contains basic information + /// about an error returned by the server. + /// since: v0.0.0 + /// + [Serializable] + public sealed class JRequest + { + //------------------------------------------------- + #region Constant's Region + // some members here + #endregion + //------------------------------------------------- + #region static Properties Region + // some members here + #endregion + //------------------------------------------------- + #region Properties Region + /// + /// The JSON-RPC version. Should be equal to "2.0". + /// since: v0.0.0 + /// + [JsonPropertyName("jsonrpc")] + public string JsonRPC { get; set; } = "2.0"; + /// + /// The error message. + /// since: v0.0.0 + /// + [JsonPropertyName("method")] + public string Method { get; set; } + /// + /// The error message. + /// since: v0.0.0 + /// + [JsonPropertyName("id")] + public long ID { get; set; } + /// + /// The error message. + /// since: v0.0.0 + /// + [JsonPropertyName("params")] + public JArgs Arguments { get; set; } + + + #endregion + //------------------------------------------------- + #region static field's Region + // some members here + #endregion + //------------------------------------------------- + #region field's Region + // some members here + #endregion + //------------------------------------------------- + #region static event field's Region + // some members here + #endregion + //------------------------------------------------- + #region event field's Region + // some members here + #endregion + //------------------------------------------------- + #region Constructor's Region + #endregion + //------------------------------------------------- + #region Destructor's Region + // some members here + #endregion + //------------------------------------------------- + #region Initialize Method's Region + // some methods here + #endregion + //------------------------------------------------- + #region Graphical Method's Region + // some methods here + #endregion + //------------------------------------------------- + #region event Method's Region + // some methods here + #endregion + //------------------------------------------------- + #region overrided Method's Region + // some methods here + #endregion + //------------------------------------------------- + #region ordinary Method's Region + /// + /// Changes the ID property of this value to DateTime.Now.Ticks. + /// since: v0.0.0 + /// + public void ChangeID() + { + ID = DateTime.Now.Ticks; + } + #endregion + //------------------------------------------------- + #region Get Method's Region + /// + /// Serializes this request as a string. + /// since: v0.0.0 + /// + public string Serialize() + { + return JsonSerializer.Serialize(this); + } + #endregion + //------------------------------------------------- + #region Set Method's Region + // some methods here + #endregion + //------------------------------------------------- + #region static Method's Region + #endregion + //------------------------------------------------- + } +} \ No newline at end of file diff --git a/Socialvoid/JObjects/JResponse.cs b/Socialvoid/JObjects/JResponse.cs new file mode 100644 index 0000000..2a8d82f --- /dev/null +++ b/Socialvoid/JObjects/JResponse.cs @@ -0,0 +1,145 @@ +using System; +using System.Text.Json.Serialization; +using Socialvoid.Errors; +using System.Text.Json; + +namespace Socialvoid.JObjects +{ + /// + /// A with a specified result type. + /// since: v0.0.0 + /// + [Serializable] + public sealed class JResponse where T: class + { + //------------------------------------------------- + #region Constant's Region + // some members here + #endregion + //------------------------------------------------- + #region static Properties Region + // some members here + #endregion + //------------------------------------------------- + #region Properties Region + /// + /// The Json-rpc version. + /// since: v0.0.0 + /// + [JsonPropertyName("jsonrpc")] + public string RPCVersion { get; set; } + + /// + /// The Json-rpc request id. + /// since: v0.0.0 + /// + [JsonPropertyName("id")] + public long ID { get; set; } + /// + /// The results. + /// since: v0.0.0 + /// + [JsonPropertyName("result")] + public T Result { get; set; } + /// + /// The results. + /// since: v0.0.0 + /// + [JsonPropertyName("error")] + public JError Error { get; set; } + #endregion + //------------------------------------------------- + #region static field's Region + // some members here + #endregion + //------------------------------------------------- + #region field's Region + // some members here + #endregion + //------------------------------------------------- + #region static event field's Region + // some members here + #endregion + //------------------------------------------------- + #region event field's Region + // some members here + #endregion + //------------------------------------------------- + #region Constructor's Region + #endregion + //------------------------------------------------- + #region Destructor's Region + // some members here + #endregion + //------------------------------------------------- + #region Initialize Method's Region + // some methods here + #endregion + //------------------------------------------------- + #region Graphical Method's Region + // some methods here + #endregion + //------------------------------------------------- + #region event Method's Region + // some methods here + #endregion + //------------------------------------------------- + #region overrided Method's Region + // some methods here + #endregion + //------------------------------------------------- + #region ordinary Method's Region + // some methods here + #endregion + //------------------------------------------------- + #region Get Method's Region + /// + /// Checks if the current response has error or not. + /// since: v0.0.0 + /// + public bool HasError() + { + return Error != null; + } + /// + /// Will convert the current property of this value + /// to a . + /// since: v0.0.0 + /// + /// + /// returns a if and only if the + /// property is not null; otherwise returns null. + /// + public GeneralException GetException() + { + if (!HasError()) + { + return null; + } + + + return GeneralException.GetException(Error.Message, + (ErrorCodes)Error.Code); + } + #endregion + //------------------------------------------------- + #region Set Method's Region + // some methods here + #endregion + //------------------------------------------------- + #region static Method's Region + /// + /// Will convert a json string to a . + /// since: v0.0.0 + /// + /// + /// returns a value. + /// + public static JResponse Deserialize(string text) + { + return JsonSerializer.Deserialize>(text); + } + #endregion + //------------------------------------------------- + } +} \ No newline at end of file diff --git a/Socialvoid/Methods/CreateSession.cs b/Socialvoid/Methods/CreateSession.cs new file mode 100644 index 0000000..d154560 --- /dev/null +++ b/Socialvoid/Methods/CreateSession.cs @@ -0,0 +1,10 @@ +namespace Socialvoid.Methods +{ + class CreateSession + { + public static bool Do(string public_hash, string private_hash, string platform, string version) + { + return true; + } + } +} diff --git a/Socialvoid/Security/SessionEstablished.cs b/Socialvoid/Security/SessionEstablished.cs new file mode 100644 index 0000000..5144fdf --- /dev/null +++ b/Socialvoid/Security/SessionEstablished.cs @@ -0,0 +1,136 @@ +using System.Text.Json.Serialization; + +namespace Socialvoid.Security +{ + /// + /// A object contains basic information + /// about the session that the server has created for us. + /// since: v0.0.0 + /// + public sealed class SessionEstablished + { + //------------------------------------------------- + #region Constant's Region + // some members here + #endregion + //------------------------------------------------- + #region static Properties Region + // some members here + #endregion + //------------------------------------------------- + #region Properties Region + /// + /// The ID of the session obtained when establishing a session. + /// since: v0.0.0 + /// + [JsonPropertyName("id")] + public string SessionID { get; internal set; } + /// + /// The Public Hash of the client used when establishing the session. + /// since: v0.0.0 + /// + [JsonPropertyName("challenge")] + internal string ChallengeSecret { get; set; } + #endregion + //------------------------------------------------- + #region static field's Region + // some members here + #endregion + //------------------------------------------------- + #region field's Region + // some members here + #endregion + //------------------------------------------------- + #region static event field's Region + // some members here + #endregion + //------------------------------------------------- + #region event field's Region + // some members here + #endregion + //------------------------------------------------- + #region Constructor's Region + /// + /// + /// + private SessionEstablished() + { + ;// make is private, so user use `EstablishNew` static method. + } + #endregion + //------------------------------------------------- + #region Destructor's Region + // some members here + #endregion + //------------------------------------------------- + #region Initialize Method's Region + // some methods here + #endregion + //------------------------------------------------- + #region Graphical Method's Region + // some methods here + #endregion + //------------------------------------------------- + #region event Method's Region + // some methods here + #endregion + //------------------------------------------------- + #region overrided Method's Region + // some methods here + #endregion + //------------------------------------------------- + #region ordinary Method's Region + // some methods here + #endregion + //------------------------------------------------- + #region Get Method's Region + /// + /// This method will return the challenge secret received from the + /// server. + /// since: v0.0.0 + /// + /// + /// null if this object doesn't have any challenge secret; + /// otherwise a valid challenge secret. + /// + public string GetChallengeSecret() + { + return string.IsNullOrWhiteSpace(ChallengeSecret) ? + null : ChallengeSecret; + } + #endregion + //------------------------------------------------- + #region Set Method's Region + // some methods here + #endregion + //------------------------------------------------- + #region static Method's Region + /// + /// Establishes a new session. + /// since: v0.0.0 + /// + /// + /// the session id returned from the server or being stored in + /// a file. + /// + /// + /// The challenge secret returned from the server. + /// it can be null. + /// please do notice that when you are going to load an already + /// existing session from a file, this parameter should remain null. + /// + /// + /// A new instance of class. + /// + public static SessionEstablished EstablishNew(string id, string challenge = null) + { + return new() + { + SessionID = id, + ChallengeSecret = challenge, + }; + } + #endregion + //------------------------------------------------- + } +} \ No newline at end of file diff --git a/Socialvoid/Security/SessionIdentification.cs b/Socialvoid/Security/SessionIdentification.cs new file mode 100644 index 0000000..6524d6e --- /dev/null +++ b/Socialvoid/Security/SessionIdentification.cs @@ -0,0 +1,106 @@ +namespace Socialvoid.Security +{ + /// + /// A SessionIdentification object allows the client to identify the + /// session it's using and prove that it is the owner of the session; + /// it proves as a identification effort and security effort. + /// Most methods that requires authentication or some sort of identity + /// will require you to pass on this object as a parameter under + /// `session_identification`; missing parameters or invalid security values + /// will cause the request to fail as it's validated upon request. + /// since: v0.0.0 + /// + public sealed class SessionIdentification + { + //------------------------------------------------- + #region Constant's Region + // some members here + #endregion + //------------------------------------------------- + #region static Properties Region + // some members here + #endregion + //------------------------------------------------- + #region Properties Region + /// + /// The ID of the session obtained when establishing a session. + /// since: v0.0.0 + /// + public string SessionID { get; internal set; } + /// + /// The Public Hash of the client used when establishing the session. + /// since: v0.0.0 + /// + public string ClientPublicHash { get; internal set; } + /// + /// The session challenge answer revolving around the client's + /// private hash, the same client used to establish the session. + /// since: v0.0.0 + /// + public string ChallengeAnswer { get; internal set; } + #endregion + //------------------------------------------------- + #region static field's Region + // some members here + #endregion + //------------------------------------------------- + #region field's Region + // some members here + #endregion + //------------------------------------------------- + #region static event field's Region + // some members here + #endregion + //------------------------------------------------- + #region event field's Region + // some members here + #endregion + //------------------------------------------------- + #region Constructor's Region + /// + /// + /// + public SessionIdentification() + { + + } + #endregion + //------------------------------------------------- + #region Destructor's Region + // some members here + #endregion + //------------------------------------------------- + #region Initialize Method's Region + // some methods here + #endregion + //------------------------------------------------- + #region Graphical Method's Region + // some methods here + #endregion + //------------------------------------------------- + #region event Method's Region + // some methods here + #endregion + //------------------------------------------------- + #region overrided Method's Region + // some methods here + #endregion + //------------------------------------------------- + #region ordinary Method's Region + // some methods here + #endregion + //------------------------------------------------- + #region Get Method's Region + // some methods here + #endregion + //------------------------------------------------- + #region Set Method's Region + // some methods here + #endregion + //------------------------------------------------- + #region static Method's Region + // some methods here + #endregion + //------------------------------------------------- + } +} \ No newline at end of file diff --git a/Socialvoid/Socialvoid.csproj b/Socialvoid/Socialvoid.csproj new file mode 100644 index 0000000..530b1a3 --- /dev/null +++ b/Socialvoid/Socialvoid.csproj @@ -0,0 +1,161 @@ + + + + + + Socialvoid + Socialvoid + The official Socialvoid RPC Library written for C# + en-US + + net5.0 + SovialVoid + 0.0.1 + Socialvoid Team + https://github.com/intellivoid/Socialvoid.NET + https://github.com/intellivoid/Socialvoid.NET + https://github.com/intellivoid/Socialvoid.NET/raw/master/Socialvoid/Icon.ico + Icon.png + git + true + true + true + true + LICENSE + + + + 1701;1702;1705 + + + + + $(DefineConstants);__LINUX__ + $(DefineConstants);__WINDOWS__ + $(DefineConstants);__UAP__ + $(DefineConstants);__ANDROID__ + $(DefineConstants);__IOS__ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Tests/Client/AuthenticateUser.cs b/Tests/Client/AuthenticateUser.cs new file mode 100644 index 0000000..4f28111 --- /dev/null +++ b/Tests/Client/AuthenticateUser.cs @@ -0,0 +1,71 @@ +using System; +using Socialvoid.Errors; +using Socialvoid.Client; +using Socialvoid.Errors.ServerErrors; +using Socialvoid.Errors.NetworkErrors; +using Socialvoid.Errors.ValidationErrors; +using NUnit.Framework; + + +namespace Tests.Client +{ + [TestFixture] + public class ClientTest + { + [TestCase("test1: the given login credentials are incorrect.", 8704)] + [TestCase("test2: the given two-factor authentication code is incorrect.", 8705)] + [TestCase("test3: the user 'aliwoto' does not support this method of authentication", 8706)] + [TestCase("test4: the requested session was not found in the database on server-side.", 8707)] + public void AuthenticationErrorsTest(string message, int errorCode) + { + try + { + CreateException(message, errorCode); + } + catch (GeneralException ex) + { + Log("got exception of type", ex.GetType(), "with error code of", ex.ErrorCode); + if (ex.Message != message || (int)ex.ErrorCode != errorCode) + { + + throw; + } + } + } + + [TestCase( + "4c7148caff498d24deee6c8325f1c15773d637ed76c3a4056e00b77b2beb3097", // public hash + "866d3218b239d39c174fa2b16f54e0fa58f9c69fce8c2d941c12a47a7bc75229", // private hash + "Linux", // platform + "Test .NET RCP Client", // the name + "1.0.0.0" // version + )] + public void AuthenticateUserTest(string publicHash, string privateHash, + string platform, string name, string version) + { + var myClient = + SocialvoidClient.GetClient(publicHash, + privateHash, platform, name, version); + myClient.CreateSession(); + myClient.AuthenticateUser(new(), "aliwoto", "12345678"); + } + + + + private void CreateException(string message, int code) + { + throw GeneralException.GetException(message, (ErrorCodes)code); + } + + private void Log(params object[] objs) + { + foreach (var obj in objs) + { + Console.Write(obj); + Console.Write(" "); + } + + Console.Write("\n"); + } + } +} \ No newline at end of file diff --git a/Tests/Client/client_info.json b/Tests/Client/client_info.json new file mode 100644 index 0000000..a136956 --- /dev/null +++ b/Tests/Client/client_info.json @@ -0,0 +1,8 @@ +{ + "endpoint": "http://127.0.0.1:5001/", + "public_hash": "4c7148caff498d24deee6c8325f1c15773d637ed76c3a4056e00b77b2beb3097", + "private_hash": "866d3218b239d39c174fa2b16f54e0fa58f9c69fce8c2d941c12a47a7bc75229", + "platform": "Linux", + "name": "Test Python RCP Client", + "version": "1.0.0.0" +} \ No newline at end of file diff --git a/Tests/Tests.csproj b/Tests/Tests.csproj index 8280024..bc3117f 100644 --- a/Tests/Tests.csproj +++ b/Tests/Tests.csproj @@ -63,6 +63,7 @@ +