From 823bd06d5a005260abc7b48a728eb10de600e007 Mon Sep 17 00:00:00 2001 From: Aliwoto Date: Wed, 1 Sep 2021 14:39:04 +0000 Subject: [PATCH 01/10] create aliwoto-dev branch; renamed readme file in directory Signed-off-by: Aliwoto --- SocialVoid/Errors/ServerErrors/ServerErrors.md | 8 -------- 1 file changed, 8 deletions(-) delete mode 100644 SocialVoid/Errors/ServerErrors/ServerErrors.md diff --git a/SocialVoid/Errors/ServerErrors/ServerErrors.md b/SocialVoid/Errors/ServerErrors/ServerErrors.md deleted file mode 100644 index 5347eef..0000000 --- a/SocialVoid/Errors/ServerErrors/ServerErrors.md +++ /dev/null @@ -1,8 +0,0 @@ -# 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 From a99696f932605f8ac4d13cd2b89087e7997ddbce Mon Sep 17 00:00:00 2001 From: Sayan Biswas Date: Tue, 7 Sep 2021 00:04:35 +0530 Subject: [PATCH 02/10] Client: try to plan out a basic structure. --- .gitignore | 1 + SocialVoid/Client/SocialvoidClient.cs | 22 ++++++++++++++++++++++ SocialVoid/Methods/CreateSession.cs | 10 ++++++++++ 3 files changed, 33 insertions(+) create mode 100644 SocialVoid/Client/SocialvoidClient.cs create mode 100644 SocialVoid/Methods/CreateSession.cs diff --git a/.gitignore b/.gitignore index 0ea5202..405d83d 100644 --- a/.gitignore +++ b/.gitignore @@ -7,3 +7,4 @@ woto_files/ woto_docs/ woto_tests/ woto_objects/ +/.vs/ diff --git a/SocialVoid/Client/SocialvoidClient.cs b/SocialVoid/Client/SocialvoidClient.cs new file mode 100644 index 0000000..8c0a1a0 --- /dev/null +++ b/SocialVoid/Client/SocialvoidClient.cs @@ -0,0 +1,22 @@ +using SocialVoid.Methods; + +namespace SocialVoid.Client +{ + class SocialvoidClient + { + public string PUB_HASH, PVT_HASH, SOCIALVOID_PLATFORM, SOCIALVOID_VERSION; + public SocialvoidClient(string public_hash, string private_hash, string platform, string version) + { + PUB_HASH = public_hash; + PVT_HASH = private_hash; + SOCIALVOID_PLATFORM = platform; + SOCIALVOID_VERSION = version; + + + bool createsession() + { + return Methods.CreateSession.Do(PUB_HASH, PVT_HASH, SOCIALVOID_PLATFORM, SOCIALVOID_VERSION); + } + } + } +} diff --git a/SocialVoid/Methods/CreateSession.cs b/SocialVoid/Methods/CreateSession.cs new file mode 100644 index 0000000..496f5a7 --- /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; + } + } +} From e0b54b600c3a2b3a40d2602940a2fa56b0e3bdc6 Mon Sep 17 00:00:00 2001 From: Aliwoto Date: Tue, 7 Sep 2021 08:14:57 +0000 Subject: [PATCH 03/10] Add redmefile to ServerErrors Signed-off-by: Aliwoto --- SocialVoid/Errors/ServerErrors/README.md | 8 ++++++++ 1 file changed, 8 insertions(+) create mode 100644 SocialVoid/Errors/ServerErrors/README.md 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 From 936f7e2663d1296e15736e483f74ca3799e207c2 Mon Sep 17 00:00:00 2001 From: Aliwoto Date: Tue, 7 Sep 2021 08:40:45 +0000 Subject: [PATCH 04/10] fix issue #1 correct naming of `Socialvoid` in files, directories and namespaces. Signed-off-by: Aliwoto --- .github/dependabot.yml | 6 +- .github/stale.yml | 4 +- .github/workflows/dotnet-linux.yml | 4 +- .github/workflows/dotnet-windows.yml | 4 +- CODESTYLE.md | 14 +- README.md | 2 +- SocialVoid.png | Bin 143538 -> 0 bytes SocialVoid.sln | 22 -- SocialVoid/Client/SocialvoidClient.cs | 22 -- .../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 | 273 ------------------ SocialVoid/Errors/GeneralException.cs | 203 ------------- 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 ---- .../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 67646 -> 0 bytes SocialVoid/Icon.png | Bin 143538 -> 0 bytes SocialVoid/Methods/CreateSession.cs | 10 - SocialVoid/SocialVoid.csproj | 160 ---------- Tests/Errors/ErrorsTest.cs | 8 +- Tests/Tests.csproj | 8 +- 54 files changed, 25 insertions(+), 3501 deletions(-) delete mode 100644 SocialVoid.png delete mode 100644 SocialVoid.sln delete mode 100644 SocialVoid/Client/SocialvoidClient.cs delete mode 100644 SocialVoid/Errors/AuthenticationErrors/AlreadyAuthenticatedException.cs delete mode 100644 SocialVoid/Errors/AuthenticationErrors/AuthenticationFailureException.cs delete mode 100644 SocialVoid/Errors/AuthenticationErrors/AuthenticationNotApplicableException.cs delete mode 100644 SocialVoid/Errors/AuthenticationErrors/BadSessionChallengeAnswerException.cs delete mode 100644 SocialVoid/Errors/AuthenticationErrors/IncorrectLoginCredentialsException.cs delete mode 100644 SocialVoid/Errors/AuthenticationErrors/IncorrectTwoFactorAuthenticationCodeException.cs delete mode 100644 SocialVoid/Errors/AuthenticationErrors/NotAuthenticatedException.cs delete mode 100644 SocialVoid/Errors/AuthenticationErrors/PrivateAccessTokenRequiredException.cs delete mode 100644 SocialVoid/Errors/AuthenticationErrors/README.md delete mode 100644 SocialVoid/Errors/AuthenticationErrors/SessionExpiredException.cs delete mode 100644 SocialVoid/Errors/AuthenticationErrors/SessionNotFoundException.cs delete mode 100644 SocialVoid/Errors/AuthenticationErrors/TwoFactorAuthenticationRequiredException.cs delete mode 100644 SocialVoid/Errors/ErrorCodes.cs delete mode 100644 SocialVoid/Errors/GeneralException.cs delete mode 100644 SocialVoid/Errors/MediaErrors/README.md delete mode 100644 SocialVoid/Errors/NetworkErrors/AlreadyRepostedException.cs delete mode 100644 SocialVoid/Errors/NetworkErrors/FileUploadErrorException.cs delete mode 100644 SocialVoid/Errors/NetworkErrors/PeerNotFoundException.cs delete mode 100644 SocialVoid/Errors/NetworkErrors/PostDeletedException.cs delete mode 100644 SocialVoid/Errors/NetworkErrors/PostNotFoundException.cs delete mode 100644 SocialVoid/Errors/NetworkErrors/README.md delete mode 100644 SocialVoid/Errors/README.md delete mode 100644 SocialVoid/Errors/ServerErrors/InternalServerErrorException.cs delete mode 100644 SocialVoid/Errors/ServerErrors/README.md delete mode 100644 SocialVoid/Errors/ValidationErrors/InvalidBiographyException.cs delete mode 100644 SocialVoid/Errors/ValidationErrors/InvalidClientNameException.cs delete mode 100644 SocialVoid/Errors/ValidationErrors/InvalidClientPrivateHashException.cs delete mode 100644 SocialVoid/Errors/ValidationErrors/InvalidClientPublicHashException.cs delete mode 100644 SocialVoid/Errors/ValidationErrors/InvalidFirstNameException.cs delete mode 100644 SocialVoid/Errors/ValidationErrors/InvalidLastNameException.cs delete mode 100644 SocialVoid/Errors/ValidationErrors/InvalidPasswordException.cs delete mode 100644 SocialVoid/Errors/ValidationErrors/InvalidPeerInputException.cs delete mode 100644 SocialVoid/Errors/ValidationErrors/InvalidPlatformException.cs delete mode 100644 SocialVoid/Errors/ValidationErrors/InvalidPostTextException.cs delete mode 100644 SocialVoid/Errors/ValidationErrors/InvalidSessionIdentificationException.cs delete mode 100644 SocialVoid/Errors/ValidationErrors/InvalidUsernameException.cs delete mode 100644 SocialVoid/Errors/ValidationErrors/InvalidVersionException.cs delete mode 100644 SocialVoid/Errors/ValidationErrors/README.md delete mode 100644 SocialVoid/Errors/ValidationErrors/UsernameAlreadyExistsException.cs delete mode 100644 SocialVoid/Icon.ico delete mode 100644 SocialVoid/Icon.png delete mode 100644 SocialVoid/Methods/CreateSession.cs delete mode 100644 SocialVoid/SocialVoid.csproj diff --git a/.github/dependabot.yml b/.github/dependabot.yml index 3cd9a8e..1ef8d0e 100644 --- a/.github/dependabot.yml +++ b/.github/dependabot.yml @@ -1,5 +1,5 @@ -# This file is part of SocialVoid.NET Project (https://github.com/Intellivoid/SocialVoid.NET). -# Copyright (c) 2021 SocialVoid.NET Authors. +# 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 @@ -17,7 +17,7 @@ version: 2 updates: - package-ecosystem: nuget - directory: "/SocialVoid" + directory: "/Socialvoid" schedule: interval: daily time: "15:00" diff --git a/.github/stale.yml b/.github/stale.yml index 97b7657..d0fe6d5 100644 --- a/.github/stale.yml +++ b/.github/stale.yml @@ -1,5 +1,5 @@ -# This file is part of SocialVoid.NET Project (https://github.com/Intellivoid/SocialVoid.NET). -# Copyright (c) 2021 SocialVoid.NET Authors. +# 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 diff --git a/.github/workflows/dotnet-linux.yml b/.github/workflows/dotnet-linux.yml index 15867a1..46ca488 100644 --- a/.github/workflows/dotnet-linux.yml +++ b/.github/workflows/dotnet-linux.yml @@ -1,5 +1,5 @@ -# This file is part of SocialVoid.NET Project (https://github.com/Intellivoid/SocialVoid.NET). -# Copyright (c) 2021 SocialVoid.NET Authors. +# 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 diff --git a/.github/workflows/dotnet-windows.yml b/.github/workflows/dotnet-windows.yml index a7572aa..48ff396 100644 --- a/.github/workflows/dotnet-windows.yml +++ b/.github/workflows/dotnet-windows.yml @@ -1,5 +1,5 @@ -# This file is part of SocialVoid.NET Project (https://github.com/Intellivoid/SocialVoid.NET). -# Copyright (c) 2021 SocialVoid.NET Authors. +# 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 diff --git a/CODESTYLE.md b/CODESTYLE.md index a9f88c1..de947e9 100755 --- a/CODESTYLE.md +++ b/CODESTYLE.md @@ -1,6 +1,6 @@ -> #### NOTE: This code style standard for SocialVoid.NET is a work in progress and much of the code does not currently conform to these rules. This is something that will be addressed by the core team. +> #### NOTE: This code style standard for Socialvoid.NET is a work in progress and much of the code does not currently conform to these rules. This is something that will be addressed by the core team. # Introduction -As the SocialVoid.NET project gains more traction and becomes more widely used, we aim to provide a more professional and consistent look to the large amount of source now in the project. It was a broadly supported decision by the core development team to follow the Microsoft coding guidelines (the default provided in Visual Studio's C# editor). These coding guidelines listed below are based on a [MSDN blog post](http://blogs.msdn.com/b/brada/archive/2005/01/26/361363.aspx) from 2005 by Brad Abrams describing the internal coding guidelines at Microsoft, with some changes to suit our project. +As the Socialvoid.NET project gains more traction and becomes more widely used, we aim to provide a more professional and consistent look to the large amount of source now in the project. It was a broadly supported decision by the core development team to follow the Microsoft coding guidelines (the default provided in Visual Studio's C# editor). These coding guidelines listed below are based on a [MSDN blog post](http://blogs.msdn.com/b/brada/archive/2005/01/26/361363.aspx) from 2005 by Brad Abrams describing the internal coding guidelines at Microsoft, with some changes to suit our project. # Coding Guidelines ## Tabs & Indenting @@ -117,8 +117,8 @@ Comments must provide added value or explanation to the code. Simply describing Each file **should** start with a copyright notice. This is a short statement declaring the project name and copyright notice, and directing the reader to the license document elsewhere in the project. To avoid errors in doc comment builds, avoid using triple-slash doc comments. ```csharp /* - * This file is part of SocialVoid.NET Project (https://github.com/Intellivoid/SocialVoid.NET). - * Copyright (c) 2021 SocialVoid.NET Authors. + * 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 @@ -254,7 +254,7 @@ In addition, the goal is to have clean, readable source. Code legibility should ## File Organization * Source files should contain only one public type, although multiple internal types are permitted if required. * Source files should be given the name of the public type in the file. -* Directory names should follow the namespace for the class after `SocialVoid`. For example, one would expect to find the public class `SocialVoid.Constants.WotoTools` in **SocialVoid\Constants\WotoTools.cs**. +* Directory names should follow the namespace for the class after `Socialvoid`. For example, one would expect to find the public class `Socialvoid.Constants.WotoTools` in **Socialvoid\Constants\WotoTools.cs**. * Class members should be grouped logically, and encapsulated into regions: ```csharp diff --git a/README.md b/README.md index 15fca83..51a9495 100644 --- a/README.md +++ b/README.md @@ -1 +1 @@ -# SocialVoid.NET \ No newline at end of file +# Socialvoid.NET \ No newline at end of file diff --git a/SocialVoid.png b/SocialVoid.png deleted file mode 100644 index 7bfa7cd6790512f60c08984792097add65724cf9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 143538 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 u. - */ - -namespace SocialVoid.Errors.NetworkErrors -{ - /// - /// 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 deleted file mode 100644 index d53832c..0000000 --- a/SocialVoid/Errors/AuthenticationErrors/AuthenticationFailureException.cs +++ /dev/null @@ -1,88 +0,0 @@ -/* - * 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 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 deleted file mode 100644 index d1f2b7d..0000000 --- a/SocialVoid/Errors/AuthenticationErrors/AuthenticationNotApplicableException.cs +++ /dev/null @@ -1,87 +0,0 @@ -/* - * 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 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 deleted file mode 100644 index 1913d33..0000000 --- a/SocialVoid/Errors/AuthenticationErrors/BadSessionChallengeAnswerException.cs +++ /dev/null @@ -1,85 +0,0 @@ -/* - * 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 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 deleted file mode 100644 index a5925b3..0000000 --- a/SocialVoid/Errors/AuthenticationErrors/IncorrectLoginCredentialsException.cs +++ /dev/null @@ -1,84 +0,0 @@ -/* - * 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 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 deleted file mode 100644 index d2db0eb..0000000 --- a/SocialVoid/Errors/AuthenticationErrors/IncorrectTwoFactorAuthenticationCodeException.cs +++ /dev/null @@ -1,86 +0,0 @@ -/* - * 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 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 deleted file mode 100644 index 37b4768..0000000 --- a/SocialVoid/Errors/AuthenticationErrors/NotAuthenticatedException.cs +++ /dev/null @@ -1,85 +0,0 @@ -/* - * 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 - /// 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 deleted file mode 100644 index 1608807..0000000 --- a/SocialVoid/Errors/AuthenticationErrors/PrivateAccessTokenRequiredException.cs +++ /dev/null @@ -1,88 +0,0 @@ -/* - * 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 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 deleted file mode 100644 index 4241c35..0000000 --- a/SocialVoid/Errors/AuthenticationErrors/README.md +++ /dev/null @@ -1,19 +0,0 @@ -# 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 deleted file mode 100644 index 78707bd..0000000 --- a/SocialVoid/Errors/AuthenticationErrors/SessionExpiredException.cs +++ /dev/null @@ -1,85 +0,0 @@ -/* - * 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 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 deleted file mode 100644 index bd1e34a..0000000 --- a/SocialVoid/Errors/AuthenticationErrors/SessionNotFoundException.cs +++ /dev/null @@ -1,85 +0,0 @@ -/* - * 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 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 deleted file mode 100644 index 8f46171..0000000 --- a/SocialVoid/Errors/AuthenticationErrors/TwoFactorAuthenticationRequiredException.cs +++ /dev/null @@ -1,87 +0,0 @@ -/* - * 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 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 deleted file mode 100644 index 6a959d3..0000000 --- a/SocialVoid/Errors/ErrorCodes.cs +++ /dev/null @@ -1,273 +0,0 @@ -/* - * 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 - //------------------------------------------------- - } -} - diff --git a/SocialVoid/Errors/GeneralException.cs b/SocialVoid/Errors/GeneralException.cs deleted file mode 100644 index a185fbd..0000000 --- a/SocialVoid/Errors/GeneralException.cs +++ /dev/null @@ -1,203 +0,0 @@ -using System; -using SocialVoid.Errors.ServerErrors; -using SocialVoid.Errors.NetworkErrors; -using SocialVoid.Errors.ValidationErrors; - -namespace SocialVoid.Errors -{ - /// - /// - /// Since: v0.0.0 - /// - 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), - - // an unknown error code? - _ => new(m, err) - }; - } - #endregion - //------------------------------------------------- - } -} diff --git a/SocialVoid/Errors/MediaErrors/README.md b/SocialVoid/Errors/MediaErrors/README.md deleted file mode 100644 index 884a654..0000000 --- a/SocialVoid/Errors/MediaErrors/README.md +++ /dev/null @@ -1,3 +0,0 @@ -# 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 deleted file mode 100644 index 353b2b2..0000000 --- a/SocialVoid/Errors/NetworkErrors/AlreadyRepostedException.cs +++ /dev/null @@ -1,85 +0,0 @@ -/* - * 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 deleted file mode 100644 index bd6a631..0000000 --- a/SocialVoid/Errors/NetworkErrors/FileUploadErrorException.cs +++ /dev/null @@ -1,85 +0,0 @@ -/* - * 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 deleted file mode 100644 index e8f7528..0000000 --- a/SocialVoid/Errors/NetworkErrors/PeerNotFoundException.cs +++ /dev/null @@ -1,85 +0,0 @@ -/* - * 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 deleted file mode 100644 index b038146..0000000 --- a/SocialVoid/Errors/NetworkErrors/PostDeletedException.cs +++ /dev/null @@ -1,85 +0,0 @@ -/* - * 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 deleted file mode 100644 index fb7d627..0000000 --- a/SocialVoid/Errors/NetworkErrors/PostNotFoundException.cs +++ /dev/null @@ -1,85 +0,0 @@ -/* - * 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 deleted file mode 100644 index 7b0e3bb..0000000 --- a/SocialVoid/Errors/NetworkErrors/README.md +++ /dev/null @@ -1,12 +0,0 @@ -# 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 deleted file mode 100644 index 763c913..0000000 --- a/SocialVoid/Errors/README.md +++ /dev/null @@ -1,61 +0,0 @@ -# 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/ServerErrors/InternalServerErrorException.cs b/SocialVoid/Errors/ServerErrors/InternalServerErrorException.cs deleted file mode 100644 index d5fba05..0000000 --- a/SocialVoid/Errors/ServerErrors/InternalServerErrorException.cs +++ /dev/null @@ -1,85 +0,0 @@ -/* - * 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 deleted file mode 100644 index 5347eef..0000000 --- a/SocialVoid/Errors/ServerErrors/README.md +++ /dev/null @@ -1,8 +0,0 @@ -# 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 deleted file mode 100644 index 8c0b973..0000000 --- a/SocialVoid/Errors/ValidationErrors/InvalidBiographyException.cs +++ /dev/null @@ -1,87 +0,0 @@ -/* - * 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 deleted file mode 100644 index e6e5e41..0000000 --- a/SocialVoid/Errors/ValidationErrors/InvalidClientNameException.cs +++ /dev/null @@ -1,87 +0,0 @@ -/* - * 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 deleted file mode 100644 index 3381075..0000000 --- a/SocialVoid/Errors/ValidationErrors/InvalidClientPrivateHashException.cs +++ /dev/null @@ -1,86 +0,0 @@ -/* - * 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 deleted file mode 100644 index 5ec78d2..0000000 --- a/SocialVoid/Errors/ValidationErrors/InvalidClientPublicHashException.cs +++ /dev/null @@ -1,85 +0,0 @@ -/* - * 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 deleted file mode 100644 index 083b519..0000000 --- a/SocialVoid/Errors/ValidationErrors/InvalidFirstNameException.cs +++ /dev/null @@ -1,87 +0,0 @@ -/* - * 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 deleted file mode 100644 index 2004e47..0000000 --- a/SocialVoid/Errors/ValidationErrors/InvalidLastNameException.cs +++ /dev/null @@ -1,87 +0,0 @@ -/* - * 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 deleted file mode 100644 index 02ef8b7..0000000 --- a/SocialVoid/Errors/ValidationErrors/InvalidPasswordException.cs +++ /dev/null @@ -1,85 +0,0 @@ -/* - * 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 deleted file mode 100644 index 10a4948..0000000 --- a/SocialVoid/Errors/ValidationErrors/InvalidPeerInputException.cs +++ /dev/null @@ -1,85 +0,0 @@ -/* - * 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 deleted file mode 100644 index 819851b..0000000 --- a/SocialVoid/Errors/ValidationErrors/InvalidPlatformException.cs +++ /dev/null @@ -1,87 +0,0 @@ -/* - * 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 deleted file mode 100644 index 21656b8..0000000 --- a/SocialVoid/Errors/ValidationErrors/InvalidPostTextException.cs +++ /dev/null @@ -1,87 +0,0 @@ -/* - * 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 deleted file mode 100644 index 3109edc..0000000 --- a/SocialVoid/Errors/ValidationErrors/InvalidSessionIdentificationException.cs +++ /dev/null @@ -1,88 +0,0 @@ -/* - * 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 deleted file mode 100644 index 054568c..0000000 --- a/SocialVoid/Errors/ValidationErrors/InvalidUsernameException.cs +++ /dev/null @@ -1,85 +0,0 @@ -/* - * 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 deleted file mode 100644 index 53f80c2..0000000 --- a/SocialVoid/Errors/ValidationErrors/InvalidVersionException.cs +++ /dev/null @@ -1,85 +0,0 @@ -/* - * 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 deleted file mode 100644 index 512e76f..0000000 --- a/SocialVoid/Errors/ValidationErrors/README.md +++ /dev/null @@ -1,21 +0,0 @@ -# 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 deleted file mode 100644 index faba28e..0000000 --- a/SocialVoid/Errors/ValidationErrors/UsernameAlreadyExistsException.cs +++ /dev/null @@ -1,86 +0,0 @@ -/* - * 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 deleted file mode 100644 index 2d4d72be02c5679650994a6767599bf103684400..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 67646 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 Q-Wlkff!-N-;AY_e11{Mv9RL6T diff --git a/SocialVoid/Icon.png b/SocialVoid/Icon.png deleted file mode 100644 index 7bfa7cd6790512f60c08984792097add65724cf9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 143538 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 u - - - - - 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/Errors/ErrorsTest.cs b/Tests/Errors/ErrorsTest.cs index c42e31e..94fddbc 100644 --- a/Tests/Errors/ErrorsTest.cs +++ b/Tests/Errors/ErrorsTest.cs @@ -1,8 +1,8 @@ using System; -using SocialVoid.Errors; -using SocialVoid.Errors.ServerErrors; -using SocialVoid.Errors.NetworkErrors; -using SocialVoid.Errors.ValidationErrors; +using Socialvoid.Errors; +using Socialvoid.Errors.ServerErrors; +using Socialvoid.Errors.NetworkErrors; +using Socialvoid.Errors.ValidationErrors; using NUnit.Framework; diff --git a/Tests/Tests.csproj b/Tests/Tests.csproj index 0250398..8280024 100644 --- a/Tests/Tests.csproj +++ b/Tests/Tests.csproj @@ -1,7 +1,7 @@ - - + + + /// + 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 @@ + From 739b8baa8af0ee3e8d1b217bed3db397abe14e44 Mon Sep 17 00:00:00 2001 From: Aliwoto Date: Thu, 30 Sep 2021 15:42:52 +0000 Subject: [PATCH 06/10] removed Socialvoid/Methods directory since methods are directly implemented in SocialvoidClient Signed-off-by: Aliwoto --- Socialvoid/Methods/CreateSession.cs | 10 ---------- 1 file changed, 10 deletions(-) delete mode 100644 Socialvoid/Methods/CreateSession.cs diff --git a/Socialvoid/Methods/CreateSession.cs b/Socialvoid/Methods/CreateSession.cs deleted file mode 100644 index d154560..0000000 --- a/Socialvoid/Methods/CreateSession.cs +++ /dev/null @@ -1,10 +0,0 @@ -namespace Socialvoid.Methods -{ - class CreateSession - { - public static bool Do(string public_hash, string private_hash, string platform, string version) - { - return true; - } - } -} From ca932a74dba137900629b5d55ce63cd919737f96 Mon Sep 17 00:00:00 2001 From: Aliwoto Date: Thu, 30 Sep 2021 18:07:36 +0000 Subject: [PATCH 07/10] Add `Socialvoid.Security.Otp` namespace with its classes. Signed-off-by: Aliwoto --- Socialvoid/Client/HttpClientMessageHandler.cs | 214 ------------ Socialvoid/Client/SocialvoidClient.cs | 51 ++- Socialvoid/Client/SvClient.cs | 18 +- Socialvoid/Security/Otp/Base32Encoding.cs | 184 ++++++++++ Socialvoid/Security/Otp/Hotp.cs | 153 ++++++++ Socialvoid/Security/Otp/IKeyProvider.cs | 57 +++ Socialvoid/Security/Otp/InMemoryKey.cs | 167 +++++++++ Socialvoid/Security/Otp/KeyGeneration.cs | 132 +++++++ Socialvoid/Security/Otp/KeyUtilities.cs | 96 ++++++ Socialvoid/Security/Otp/Otp.cs | 194 +++++++++++ Socialvoid/Security/Otp/OtpHashMode.cs | 52 +++ Socialvoid/Security/Otp/TimeCorrection.cs | 144 ++++++++ Socialvoid/Security/Otp/Totp.cs | 326 ++++++++++++++++++ Socialvoid/Security/Otp/VerificationWindow.cs | 100 ++++++ Socialvoid/Socialvoid.csproj | 13 +- 15 files changed, 1663 insertions(+), 238 deletions(-) delete mode 100644 Socialvoid/Client/HttpClientMessageHandler.cs create mode 100644 Socialvoid/Security/Otp/Base32Encoding.cs create mode 100644 Socialvoid/Security/Otp/Hotp.cs create mode 100644 Socialvoid/Security/Otp/IKeyProvider.cs create mode 100644 Socialvoid/Security/Otp/InMemoryKey.cs create mode 100644 Socialvoid/Security/Otp/KeyGeneration.cs create mode 100644 Socialvoid/Security/Otp/KeyUtilities.cs create mode 100644 Socialvoid/Security/Otp/Otp.cs create mode 100644 Socialvoid/Security/Otp/OtpHashMode.cs create mode 100644 Socialvoid/Security/Otp/TimeCorrection.cs create mode 100644 Socialvoid/Security/Otp/Totp.cs create mode 100644 Socialvoid/Security/Otp/VerificationWindow.cs diff --git a/Socialvoid/Client/HttpClientMessageHandler.cs b/Socialvoid/Client/HttpClientMessageHandler.cs deleted file mode 100644 index c71bead..0000000 --- a/Socialvoid/Client/HttpClientMessageHandler.cs +++ /dev/null @@ -1,214 +0,0 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT license. See LICENSE file in the project root for full license information. - -using System; -using System.Buffers; -using System.Collections.ObjectModel; -using System.Diagnostics; -using System.Net; -using System.Net.Http; -using System.Net.Http.Headers; -using System.Threading; -using System.Threading.Tasks; -using Microsoft; -using Microsoft.VisualStudio.Threading; -using Nerdbank.Streams; -using StreamJsonRpc; -using StreamJsonRpc.Protocol; - -/// -/// 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 index 07a04a8..8adf7b6 100644 --- a/Socialvoid/Client/SocialvoidClient.cs +++ b/Socialvoid/Client/SocialvoidClient.cs @@ -1,11 +1,24 @@ -using System; -using System.Text.Encodings; -using System.Text; +/* + * 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 . + */ + +using System; 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; @@ -128,10 +141,6 @@ namespace Socialvoid.Client //------------------------------------------------- #region field's Region /// - /// since: v0.0.0 - /// - protected JsonMessageFormatter _formatter = new(Encoding.UTF8); - /// /// the endpoint url of socialvoid servers. /// since: v0.0.0 /// @@ -256,7 +265,7 @@ namespace Socialvoid.Client {PublicHashKey, PublicHash}, {PrivateHashKey, PrivateHash}, {PlatformKey, Platform}, - //{NameKey, ClientName}, + {NameKey, ClientName}, {VersionKey, Version}, }; @@ -267,8 +276,18 @@ namespace Socialvoid.Client message.Content = SerializeContent(request); message.Content.Headers.ContentType = _contentTypeValue; var jresp = ParseContent(message); + + if (!string.IsNullOrEmpty(jresp.Result.ChallengeSecret)) + { + _should_otp = true; + _otp = GetChallengeAnswer(jresp.Result.ChallengeSecret); + // set challenege secret to null to avoid sending it again. + // this will avoid future conflicts in using old challenge secret. + jresp.Result.ChallengeSecret = null; + } + _session = jresp.Result; - return null; + return _session; } /// /// AuthenticateUser method (session.authenticate_user), @@ -359,6 +378,14 @@ namespace Socialvoid.Client Console.WriteLine(contentStr); } + /// + /// returns a challenge's answer using the session's challenge secret. + /// since: v0.0.0 + /// + protected internal virtual string GetChallengeAnswer(string secret) + { + return null; + } #endregion //------------------------------------------------- diff --git a/Socialvoid/Client/SvClient.cs b/Socialvoid/Client/SvClient.cs index 59a8071..1dbcc6d 100644 --- a/Socialvoid/Client/SvClient.cs +++ b/Socialvoid/Client/SvClient.cs @@ -1,4 +1,20 @@ -using System; +/* + * 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.Client { diff --git a/Socialvoid/Security/Otp/Base32Encoding.cs b/Socialvoid/Security/Otp/Base32Encoding.cs new file mode 100644 index 0000000..d880eef --- /dev/null +++ b/Socialvoid/Security/Otp/Base32Encoding.cs @@ -0,0 +1,184 @@ +/* + * 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 . + */ + +/* + * Credits to Devin Martin and the original OtpSharp library: + * https://github.com/kspearrin/Otp.NET + */ +/* + * Credits to "Shane" from SO answer here: + * http://stackoverflow.com/a/7135008/1090359 + */ + +using System; + +namespace Socialvoid.Security.Otp +{ + /// + /// Base32 encoding/decoding helper class. + /// since: v0.0.0 + /// + public static class Base32Encoding + { + //------------------------------------------------- + #region static Method's Region + /// + /// Converts a string to a byte array using the specified encoding. + /// since: v0.0.0 + /// + /// + /// + public static byte[] ToBytes(string input) + { + if(string.IsNullOrEmpty(input)) + { + throw new ArgumentNullException("input"); + } + + input = input.TrimEnd('='); //remove padding characters + int byteCount = input.Length * 5 / 8; //this must be TRUNCATED + byte[] returnArray = new byte[byteCount]; + + byte curByte = 0, bitsRemaining = 8; + int mask = 0, arrayIndex = 0; + + foreach(char c in input) + { + int cValue = CharToValue(c); + + if(bitsRemaining > 5) + { + mask = cValue << (bitsRemaining - 5); + curByte = (byte)(curByte | mask); + bitsRemaining -= 5; + } + else + { + mask = cValue >> (5 - bitsRemaining); + curByte = (byte)(curByte | mask); + returnArray[arrayIndex++] = curByte; + curByte = (byte)(cValue << (3 + bitsRemaining)); + bitsRemaining += 3; + } + } + + //if we didn't end with a full byte + if(arrayIndex != byteCount) + { + returnArray[arrayIndex] = curByte; + } + + return returnArray; + } + /// + /// Converts an array of byte to a Base32-encoded string. + /// since: v0.0.0 + /// + /// + /// + public static string ToString(byte[] input) + { + if(input == null || input.Length == 0) + { + throw new ArgumentNullException("input"); + } + + int charCount = (int)Math.Ceiling(input.Length / 5d) * 8; + char[] returnArray = new char[charCount]; + + byte nextChar = 0, bitsRemaining = 5; + int arrayIndex = 0; + + foreach(byte b in input) + { + nextChar = (byte)(nextChar | (b >> (8 - bitsRemaining))); + returnArray[arrayIndex++] = ValueToChar(nextChar); + + if(bitsRemaining < 4) + { + nextChar = (byte)((b >> (3 - bitsRemaining)) & 31); + returnArray[arrayIndex++] = ValueToChar(nextChar); + bitsRemaining += 5; + } + + bitsRemaining -= 3; + nextChar = (byte)((b << bitsRemaining) & 31); + } + + //if we didn't end with a full char + if(arrayIndex != charCount) + { + returnArray[arrayIndex++] = ValueToChar(nextChar); + while(arrayIndex != charCount) returnArray[arrayIndex++] = '='; //padding + } + + return new string(returnArray); + } + /// + /// Converts a valid base32 character to it's corresponding value. + /// since: v0.0.0 + /// + /// + private static int CharToValue(char c) + { + // 65 - 90 == uppercase letters + if(c < 91 && c > 64) + { + return c - 65; + } + + // 50 - 55 == numbers 2-7 + if(c < 56 && c > 49) + { + return c - 24; + } + + // 97 - 122 == lowercase letters + if(c < 123 && c > 96) + { + return c - 97; + } + + // isn't in any of these chars range? + throw new ArgumentException( + "Character is not a valid Base32 character.", + nameof(c)); + } + /// + /// Converts a valid base32 byte value to its corresponding char. + /// since: v0.0.0 + /// + /// + private static char ValueToChar(byte b) + { + if (b < 26) + { + return (char)(b + 65); + } + + if (b < 32) + { + return (char)(b + 24); + } + + throw new ArgumentException("Byte is not a Base32 value", nameof(b)); + } + #endregion + //------------------------------------------------- + } +} diff --git a/Socialvoid/Security/Otp/Hotp.cs b/Socialvoid/Security/Otp/Hotp.cs new file mode 100644 index 0000000..282b50a --- /dev/null +++ b/Socialvoid/Security/Otp/Hotp.cs @@ -0,0 +1,153 @@ +/* + * 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 . + */ + +/* + * Credits to Devin Martin and the original OtpSharp library: + * https://github.com/kspearrin/Otp.NET + */ + +using System; + +namespace Socialvoid.Security.Otp +{ + /// + /// Calculate HMAC-Based One-Time-Passwords (HOTP) from a secret key. + /// since: v0.0.0 + /// + /// + /// The specifications for the methods of this class can be found in RFC 4226: + /// http://tools.ietf.org/html/rfc4226 + /// + public sealed class Hotp : Otp + { + //------------------------------------------------- + #region field's Region + /// + /// The HOTP size. + /// since: v0.0.0 + /// + private readonly int _hotpSize; + #endregion + //------------------------------------------------- + #region Constructor's Region + /// + /// Creates an HOTP instance. + /// since: v0.0.0 + /// + /// + /// The secret key to use in HOTP calculations. + /// + /// + /// The hash mode to use. + /// + /// The number of digits that the returning HOTP should have. The default is 6. + public Hotp(byte[] secretKey, OtpHashMode mode = OtpHashMode.Sha1, int hotpSize = 6) + : base(secretKey, mode) + { + if(hotpSize < 6 || hotpSize > 8) + { + throw new ArgumentOutOfRangeException(nameof(hotpSize), + "The hotpSize must be between 6 and 8"); + } + + _hotpSize = hotpSize; + } + /// + /// Create a HOTP instance. + /// since: v0.0.0 + /// + /// + /// The key to use in HOTP calculations. + /// + /// + /// The hash mode to use. + /// + /// + /// The number of digits that the returning HOTP should have. + /// The default value is 6. + /// + public Hotp(IKeyProvider key, + OtpHashMode mode = OtpHashMode.Sha1, + int hotpSize = 6) + : base(key, mode) + { + + if(hotpSize < 6 || hotpSize > 8) + { + throw new ArgumentOutOfRangeException(nameof(hotpSize), + "The hotpSize must be between 6 and 8"); + } + + _hotpSize = hotpSize; + } + #endregion + //------------------------------------------------- + #region overrided Method's Region + /// + /// Takes a time step and computes a HOTP code. + /// since: v0.0.0 + /// + /// + /// the counter. This is the number of time steps that have passed. + /// + /// + /// The hash mode to use. + /// + /// + /// HOTP calculated code. + /// + protected override string Compute(long counter, OtpHashMode mode) + { + var data = KeyUtilities.GetBigEndianBytes(counter); + var otp = this.CalculateOtp(data, mode); + return Digits(otp, _hotpSize); + } + #endregion + //------------------------------------------------- + #region Get Method's Region + /// + /// Takes a counter and then computes a HOTP value. + /// since: v0.0.0 + /// + /// + /// The timestamp to use for the HOTP calculation. + /// + /// a HOTP value + public string ComputeHOTP(long counter) + { + return this.Compute(counter, _hashMode); + } + /// + /// Verify a value that has been provided with the calculated value. + /// since: v0.0.0 + /// + /// the trial HOTP value. + /// + /// + /// The counter value to verify + /// + /// + /// true if there is a match; otherwise false. + /// + public bool VerifyHotp(string hotp, long counter) => + hotp == ComputeHOTP(counter); + + #endregion + //------------------------------------------------- + } +} diff --git a/Socialvoid/Security/Otp/IKeyProvider.cs b/Socialvoid/Security/Otp/IKeyProvider.cs new file mode 100644 index 0000000..89c580c --- /dev/null +++ b/Socialvoid/Security/Otp/IKeyProvider.cs @@ -0,0 +1,57 @@ +/* + * 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 . + */ + +/* + * Credits to Devin Martin and the original OtpSharp library: + * https://github.com/kspearrin/Otp.NET + */ + +namespace Socialvoid.Security.Otp +{ + /// + /// Interface used to interact with a key. + /// since: v0.0.0 + /// + public interface IKeyProvider + { + //------------------------------------------------- + #region Get Method's Region + /// + /// Uses the key to get an HMAC using the specified algorithm and data. + /// since: v0.0.0 + /// + /// + /// This is a much better API than the previous API which would briefly + /// expose the key for all derived types. + /// + /// Now a derived type could be bound to an HSM/smart card/etc if + /// required and a lot of the security limitations of in app/memory + /// exposure of the key can be eliminated. + /// + /// + /// The HMAC algorithm to use. + /// + /// + /// The data used to compute the HMAC. + /// + /// HMAC of the key and data + byte[] ComputeHmac(OtpHashMode mode, byte[] data); + #endregion + //------------------------------------------------- + } +} diff --git a/Socialvoid/Security/Otp/InMemoryKey.cs b/Socialvoid/Security/Otp/InMemoryKey.cs new file mode 100644 index 0000000..9ed378d --- /dev/null +++ b/Socialvoid/Security/Otp/InMemoryKey.cs @@ -0,0 +1,167 @@ +/* + * 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 . + */ + +/* + * Credits to Devin Martin and the original OtpSharp library: + * https://github.com/kspearrin/Otp.NET + */ + +using System; +using System.Security.Cryptography; + +namespace Socialvoid.Security.Otp +{ + /// + /// Represents a key in memory. + /// since: v0.0.0 + /// + /// + /// This will attempt to use the Windows data protection api to + /// encrypt the key in memory. + /// However, this type favors working over memory protection. + /// This is an attempt to minimize exposure in memory, nothing more. + /// This protection is flawed in many ways and is limited to Windows. + /// + /// In order to use the key to compute an hmac it must be temporarily + /// decrypted, used, then re-encrypted. + /// This does expose the key in memory for a time. + /// If a memory dump occurs in this time the plaintext key will be part + /// of it. Furthermore, there are potentially artifacts from the hmac + /// computation, GC compaction, or any number of other leaks even after + /// the key is re-encrypted. + /// + /// This type favors working over memory protection. If the particular + /// platform isn't supported then, unless forced by modifying the + /// IsPlatformSupported method, it will just store the key in a standard + /// byte array. + /// + public class InMemoryKey : IKeyProvider + { + //------------------------------------------------- + #region field's Region + /// + /// The key data in memory. + /// since: v0.0.0 + /// + internal readonly byte[] _KeyData; + + /// + /// The key length representing the length of the . + /// since: v0.0.0 + /// + internal readonly int _keyLength; + /// + /// Used for locking. + /// since: v0.0.0 + /// + private readonly object _stateSync = new(); + #endregion + //------------------------------------------------- + #region Constructor's Region + /// + /// Creates an instance of a key. + /// + /// Plaintext key data + public InMemoryKey(byte[] key) + { + if(!(key != null)) + throw new ArgumentNullException("key"); + if(!(key.Length > 0)) + throw new ArgumentException("The key must not be empty"); + + _keyLength = key.Length; + int paddedKeyLength = (int)Math.Ceiling((decimal)key.Length / (decimal)16) * 16; + _KeyData = new byte[paddedKeyLength]; + Array.Copy(key, _KeyData, key.Length); + } + #endregion + //------------------------------------------------- + #region Get Method's Region + /// + /// Gets a copy of the plaintext key. + /// since: v0.0.0 + /// + /// + /// This is internal rather than protected so that the tests can + /// use this method. + /// + /// + /// Plaintext Key + /// + internal byte[] GetCopyOfKey() + { + var plainKey = new byte[_keyLength]; + lock(_stateSync) + { + Array.Copy(_KeyData, plainKey, _keyLength); + } + return plainKey; + } + /// + /// Uses the key to get an HMAC using the specified algorithm and data. + /// since: v0.0.0 + /// + /// + /// The HMAC algorithm to use + /// + /// + /// The data used to compute the HMAC + /// + /// + /// HMAC of the key and data + /// + public byte[] ComputeHmac(OtpHashMode mode, byte[] data) + { + byte[] hashedValue = null; + using(HMAC hmac = CreateHmacHash(mode)) + { + byte[] key = this.GetCopyOfKey(); + try + { + hmac.Key = key; + hashedValue = hmac.ComputeHash(data); + } + finally + { + KeyUtilities.Destroy(key); + } + } + + return hashedValue; + } + + #endregion + //------------------------------------------------- + #region static Method's Region + /// + /// Create an HMAC object for the specified algorithm. + /// since: v0.0.0 + /// + private static HMAC CreateHmacHash(OtpHashMode otpHashMode) + { + return otpHashMode switch + { + OtpHashMode.Sha256 => new HMACSHA256(), + OtpHashMode.Sha512 => new HMACSHA512(), + _ => new HMACSHA1() //OtpHashMode.Sha1 + }; + } + #endregion + //------------------------------------------------- + } +} diff --git a/Socialvoid/Security/Otp/KeyGeneration.cs b/Socialvoid/Security/Otp/KeyGeneration.cs new file mode 100644 index 0000000..3cee5a8 --- /dev/null +++ b/Socialvoid/Security/Otp/KeyGeneration.cs @@ -0,0 +1,132 @@ +/* + * 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 . + */ + +/* + * Credits to Devin Martin and the original OtpSharp library: + * https://github.com/kspearrin/Otp.NET + */ + + +using System; +using System.Security.Cryptography; + +namespace Socialvoid.Security.Otp +{ + /// + /// Helpers to work with key generations. + /// since: v0.0.0 + /// + public static class KeyGeneration + { + //------------------------------------------------- + #region static Method's Region + /// + /// Generates a random key in accordance with the RFC recommened + /// length for each algorithm. + /// since: v0.0.0 + /// + /// the key length + /// The generated key + public static byte[] GenerateRandomKey(int length) + { + byte[] key = new byte[length]; + using(var rnd = RandomNumberGenerator.Create()) + { + rnd.GetBytes(key); + return key; + } + } + /// + /// Generates a random key in accordance with the RFC recommened + /// length for each algorithm. + /// since: v0.0.0 + /// + /// HashMode + /// Key + public static byte[] GenerateRandomKey(OtpHashMode mode = OtpHashMode.Sha1) => + GenerateRandomKey(LengthForMode(mode)); + /// + /// Uses the procedure defined in RFC 4226 section 7.5 to derive a key + /// from the master key. + /// since: v0.0.0 + /// + /// + /// The master key from which to derive a device specific key. + /// + /// + /// The public identifier that is unique to the authenticating device. + /// + /// + /// The hash mode to use. This will determine the resulting key lenght. + /// The default value is sha-1 (as per the RFC) which is 20 bytes + /// + /// Derived key + public static byte[] DeriveKeyFromMaster(IKeyProvider masterKey, + byte[] publicIdentifier, OtpHashMode mode = OtpHashMode.Sha1) + { + if(masterKey == null) + { + throw new ArgumentNullException(nameof(masterKey), + "The master key cannot be null"); + } + return masterKey.ComputeHmac(mode, publicIdentifier); + } + /// + /// Uses the procedure defined in RFC 4226 section 7.5 to derive a key + /// from the master key. + /// + /// The master key from which to derive a device specific key + /// A serial number that is unique to the authenticating device + /// The hash mode to use. This will determine the resulting key lenght. The default is sha-1 (as per the RFC) which is 20 bytes + /// Derived key + public static byte[] DeriveKeyFromMaster(IKeyProvider masterKey, + int serialNumber, + OtpHashMode mode = OtpHashMode.Sha1) => + DeriveKeyFromMaster(masterKey, + KeyUtilities.GetBigEndianBytes(serialNumber), mode); + + private static HashAlgorithm GetHashAlgorithmForMode(OtpHashMode mode) + { + switch(mode) + { + case OtpHashMode.Sha256: + return SHA256.Create(); + case OtpHashMode.Sha512: + return SHA512.Create(); + default: //case OtpHashMode.Sha1: + return SHA1.Create(); + } + } + + private static int LengthForMode(OtpHashMode mode) + { + switch(mode) + { + case OtpHashMode.Sha256: + return 32; + case OtpHashMode.Sha512: + return 64; + default: //case OtpHashMode.Sha1: + return 20; + } + } + + #endregion + //------------------------------------------------- + } +} diff --git a/Socialvoid/Security/Otp/KeyUtilities.cs b/Socialvoid/Security/Otp/KeyUtilities.cs new file mode 100644 index 0000000..1c0f2cf --- /dev/null +++ b/Socialvoid/Security/Otp/KeyUtilities.cs @@ -0,0 +1,96 @@ +/* + * 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 . + */ + +/* + * Credits to Devin Martin and the original OtpSharp library: + * https://github.com/kspearrin/Otp.NET + */ + + +using System; + +namespace Socialvoid.Security.Otp +{ + /// + /// Some helper methods to perform common key functions. + /// since: v0.0.0 + /// + internal static class KeyUtilities + { + //------------------------------------------------- + #region static Method's Region + /// + /// Overwrite potentially sensitive data with random junk. + /// since: v0.0.0 + /// + /// + /// Warning! + /// + /// This isn't foolproof by any means. + /// The garbage collector could have moved the actual location in memory + /// to another location during a collection cycle and left the old data + /// in place simply marking it as available. + /// We can't control this or even detect it. + /// This method is simply a good faith effort to limit the exposure of + /// sensitive data in memory as much as possible. + /// + internal static void Destroy(byte[] sensitiveData) + { + if(sensitiveData == null || sensitiveData.Length == 0) + { + // if there is no data, there is nothing to destroy; + // don't throw an exception, just return. + return; + } + + new Random().NextBytes(sensitiveData); + } + /// + /// converts a long into a big endian byte array. + /// since: v0.0.0 + /// + /// + /// RFC 4226 specifies big endian as the method for converting the counter + /// to data and then to hash. + /// + static internal byte[] GetBigEndianBytes(long input) + { + // Since .net uses little endian numbers, we need to reverse the byte order to get big endian. + var data = BitConverter.GetBytes(input); + Array.Reverse(data); + return data; + } + /// + /// converts an int into a big endian byte array. + /// since: v0.0.0 + /// + /// + /// RFC 4226 specifies big endian as the method for converting + /// the counter to data and then to hash. + /// + static internal byte[] GetBigEndianBytes(int input) + { + // Since .net uses little endian numbers, we need to reverse the byte order to get big endian. + var data = BitConverter.GetBytes(input); + Array.Reverse(data); + return data; + } + #endregion + //------------------------------------------------- + } +} diff --git a/Socialvoid/Security/Otp/Otp.cs b/Socialvoid/Security/Otp/Otp.cs new file mode 100644 index 0000000..7a1d4c6 --- /dev/null +++ b/Socialvoid/Security/Otp/Otp.cs @@ -0,0 +1,194 @@ +/* + * 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 . + */ + +/* + * Credits to Devin Martin and the original OtpSharp library: + * https://github.com/kspearrin/Otp.NET + */ + +using System; + +namespace Socialvoid.Security.Otp +{ + /// + /// An abstract class that contains common OTP calculations. + /// since: v0.0.0 + /// + /// + /// https://tools.ietf.org/html/rfc4226 + /// + public abstract class Otp + { + //------------------------------------------------- + #region field's Region + /// + /// the secret key. + /// since: v0.0.0 + /// + protected readonly IKeyProvider _secretKey; + + /// + /// The hash mode to use. + /// since: v0.0.0 + /// + protected readonly OtpHashMode _hashMode; + #endregion + //------------------------------------------------- + #region Constructor's Region + /// + /// Constructor for the abstract class using an explicit secret key. + /// since: v0.0.0 + /// + /// + /// The secret key. + /// + /// + /// The hash mode to use. + /// + public Otp(byte[] secretKey, OtpHashMode mode) + { + if(secretKey == null || secretKey.Length == 0) + { + throw new ArgumentNullException(nameof(secretKey), + "Secret key cannot be null or empty"); + } + + // when passing a key into the constructor the caller may depend on + // the reference to the key remaining intact. + _secretKey = new InMemoryKey(secretKey); + _hashMode = mode; + } + /// + /// Constructor for the abstract class using a generic key provider. + /// since: v0.0.0 + /// + /// + /// The hash mode to use + public Otp(IKeyProvider key, OtpHashMode mode) + { + if (key == null) + { + throw new ArgumentNullException(nameof(key), "key cannot be null"); + } + + _hashMode = mode; + _secretKey = key; + } + #endregion + //------------------------------------------------- + #region Get Method's Region + /// + /// An abstract definition of a compute method. + /// Takes a counter and runs it through the derived algorithm. + /// since: v0.0.0 + /// + /// Counter or step + /// The hash mode to use + /// OTP calculated code + protected abstract string Compute(long counter, OtpHashMode mode); + /// + /// Helper method that calculates OTPs. + /// since: v0.0.0 + /// + protected internal long CalculateOtp(byte[] data, OtpHashMode mode) + { + byte[] hmacComputedHash = _secretKey.ComputeHmac(mode, data); + + // The RFC has a hard coded index 19 in this value. + // This is the same thing but also accomodates SHA256 and SHA512 + // hmacComputedHash[19] => hmacComputedHash[hmacComputedHash.Length - 1] + + int offset = hmacComputedHash[hmacComputedHash.Length - 1] & 0x0F; + return (hmacComputedHash[offset] & 0x7f) << 24 + | (hmacComputedHash[offset + 1] & 0xff) << 16 + | (hmacComputedHash[offset + 2] & 0xff) << 8 + | (hmacComputedHash[offset + 3] & 0xff) % 1000000; + } + /// + /// truncates a number down to the specified number of digits. + /// since: v0.0.0 + /// + protected internal static string Digits(long input, int digitCount) + { + var truncatedValue = ((int)input % (int)Math.Pow(10, digitCount)); + return truncatedValue.ToString().PadLeft(digitCount, '0'); + } + /// + /// Verify an OTP value. + /// since: v0.0.0 + /// + /// + /// The initial step to try. + /// + /// + /// The value to verify + /// + /// + /// Output parameter that provides the step + /// where the match was found. If no match was found it will be 0 + /// + /// + /// The window to verify. + /// + /// + /// true if a match is found; otherwise false. + /// + protected bool Verify(long initialStep, string valueToVerify, out long matchedStep, VerificationWindow window) + { + window ??= new(); + foreach(var frame in window.ValidationCandidates(initialStep)) + { + var comparisonValue = this.Compute(frame, _hashMode); + if(ValuesEqual(comparisonValue, valueToVerify)) + { + matchedStep = frame; + return true; + } + } + + matchedStep = 0; + return false; + } + /// + /// Constant time comparison of two values. + /// since: v0.0.0 + /// + private bool ValuesEqual(string a, string b) + { + if (string.IsNullOrWhiteSpace(a) && string.IsNullOrWhiteSpace(b)) + { + return true; + } + + if(a.Length != b.Length) + { + return false; + } + + var result = 0; + for(int i = 0; i < a.Length; i++) + { + result |= a[i] ^ b[i]; + } + + return result == 0; + } + #endregion + //------------------------------------------------- + } +} diff --git a/Socialvoid/Security/Otp/OtpHashMode.cs b/Socialvoid/Security/Otp/OtpHashMode.cs new file mode 100644 index 0000000..82ce4e9 --- /dev/null +++ b/Socialvoid/Security/Otp/OtpHashMode.cs @@ -0,0 +1,52 @@ +/* + * 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 . + */ + +/* + * Credits to Devin Martin and the original OtpSharp library: + * https://github.com/kspearrin/Otp.NET + */ + +namespace Socialvoid.Security.Otp +{ + /// + /// Indicates which HMAC hashing algorithm should be used. + /// since: v0.0.0 + /// + public enum OtpHashMode + { + //------------------------------------------------- + #region SHA region + /// + /// Sha1 is used as the HMAC hashing algorithm. + /// since: v0.0.0 + /// + Sha1, + /// + /// Sha256 is used as the HMAC hashing algorithm. + /// since: v0.0.0 + /// + Sha256, + /// + /// Sha512 is used as the HMAC hashing algorithm. + /// since: v0.0.0 + /// + Sha512, + #endregion + //------------------------------------------------- + } +} diff --git a/Socialvoid/Security/Otp/TimeCorrection.cs b/Socialvoid/Security/Otp/TimeCorrection.cs new file mode 100644 index 0000000..af80431 --- /dev/null +++ b/Socialvoid/Security/Otp/TimeCorrection.cs @@ -0,0 +1,144 @@ +/* + * 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 . + */ + +/* + * Credits to Devin Martin and the original OtpSharp library: + * https://github.com/kspearrin/Otp.NET + */ + +using System; + +namespace Socialvoid.Security.Otp +{ + /// + /// Class to apply a correction factor to the system time. + /// since: v0.0.0 + /// + /// + /// In cases where the local system time is incorrect it is preferable to simply correct the system time. + /// This class is provided to handle cases where it isn't possible for the client, the server, or both, to be on the correct time. + /// + /// This library provides limited facilities to to ping NIST for a correct network time. This class can be used manually however in cases where a server's time is off + /// and the consumer of this library can't control it. In that case create an instance of this class and provide the current server time as the correct time parameter + /// + /// This class is immutable and therefore threadsafe. + /// + public class TimeCorrection + { + //------------------------------------------------- + #region Properties Region + /// + /// Applies the correction factor to the current system UTC time and + /// returns a corrected time. + /// since: v0.0.0 + /// + public DateTime CorrectedUtcNow + { + get => GetCorrectedTime(DateTime.UtcNow); + } + /// + /// The timespan that is used to calculate a corrected time. + /// since: v0.0.0 + /// + public TimeSpan CorrectionFactor + { + get => _timeCorrectionFactor; + } + #endregion + //------------------------------------------------- + #region static field's Region + /// + /// An instance that provides no correction factor. + /// since: v0.0.0 + /// + public static readonly TimeCorrection UncorrectedInstance = new(); + #endregion + //------------------------------------------------- + #region field's Region + /// + /// The timespan that is used as a correction factor. + /// since: v0.0.0 + /// + private readonly TimeSpan _timeCorrectionFactor; + #endregion + //------------------------------------------------- + #region Constructor's Region + /// + /// Constructor used solely for the static + /// field to provide an instance without a correction factor. + /// since: v0.0.0 + /// + private TimeCorrection() + { + _timeCorrectionFactor = TimeSpan.FromSeconds(0); + } + + /// + /// Creates a corrected time object by providing the known correct + /// current UTC time. + /// The current system UTC time will be used as the reference. + /// since: v0.0.0 + /// + /// + /// This overload assumes UTC. + /// If a base and reference time other than UTC are required then use the + /// other overlaod. + /// + /// The current correct UTC time + public TimeCorrection(DateTime correctUtc) + { + _timeCorrectionFactor = DateTime.UtcNow - correctUtc; + } + + /// + /// Creates a corrected time object by providing the known correct current time + /// and the current reference time that needs correction. + /// since: v0.0.0 + /// + /// + /// The current correct time. + /// + /// + /// The current reference time (time that will have the correction factor + /// applied in subsequent calls). + /// + public TimeCorrection(DateTime correctTime, DateTime referenceTime) + { + _timeCorrectionFactor = referenceTime - correctTime; + } + #endregion + //------------------------------------------------- + #region Get Method's Region + /// + /// Applies the correction factor to the reference time and returns a + /// corrected time. + /// since: v0.0.0 + /// + /// + /// The reference time. + /// + /// + /// The reference time with the correction factor applied. + /// + public DateTime GetCorrectedTime(DateTime referenceTime) => + referenceTime - _timeCorrectionFactor; + + #endregion + //------------------------------------------------- + } +} diff --git a/Socialvoid/Security/Otp/Totp.cs b/Socialvoid/Security/Otp/Totp.cs new file mode 100644 index 0000000..0614aa8 --- /dev/null +++ b/Socialvoid/Security/Otp/Totp.cs @@ -0,0 +1,326 @@ +/* + * 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 . + */ + +/* + * Credits to Devin Martin and the original OtpSharp library: + * https://github.com/kspearrin/Otp.NET + */ + + +using System; + +namespace Socialvoid.Security.Otp +{ + /// + /// Calculate Timed-One-Time-Passwords (TOTP) from a secret key. + /// since: v0.0.0 + /// + /// + /// The specifications for the methods of this class can be found in RFC 6238: + /// http://tools.ietf.org/html/rfc6238 + /// + public sealed class Totp : Otp + { + //------------------------------------------------- + #region Constant's Region + /// + /// The number of ticks as Measured at Midnight Jan 1st 1970. + /// since: v0.0.0 + /// + internal const long unixEpochTicks = 621355968000000000L; + /// + /// A divisor for converting ticks to seconds. + /// since: v0.0.0 + /// + internal const long ticksToSeconds = 10000000L; + #endregion + //------------------------------------------------- + #region field's Region + /// + /// the step value. + /// since: v0.0.0 + /// + private readonly int _step; + /// + /// the TOTP length. + /// since: v0.0.0 + /// + private readonly int _totpSize; + /// + /// the TOTP corrected time. + /// since: v0.0.0 + /// + private readonly TimeCorrection correctedTime; + #endregion + //------------------------------------------------- + #region Constructor's Region + /// + /// Creates a TOTP instance. + /// since: v0.0.0 + /// + /// + /// The secret key to use in TOTP calculations + /// + /// + /// The time window step amount to use in calculating time windows. + /// The default is 30 as recommended in the RFC + /// + /// + /// The hash mode to use + /// + /// + /// The number of digits that the returning TOTP should have. + /// The default value of this argument is 6. + /// + /// + /// If required, a time correction can be specified to compensate of + /// an out of sync local clock. + /// + public Totp(byte[] secretKey, + int step = 30, + OtpHashMode mode = OtpHashMode.Sha1, + int totpSize = 6, + TimeCorrection timeCorrection = null) + : base(secretKey, mode) + { + + if (step < 0) + { + throw new ArgumentOutOfRangeException(nameof(step), + "Step must be greater than 0"); + } + if (totpSize < 0 || totpSize > 10) + { + throw new ArgumentOutOfRangeException(nameof(totpSize), + "TOTP size must be greater than 0 and less than 10"); + } + + _step = step; + _totpSize = totpSize; + + // we never null check the corrected time object. + // Since it's readonly, we'll ensure that it isn't null here + // and provide neatral functionality in this case. + correctedTime = timeCorrection ?? TimeCorrection.UncorrectedInstance; + } + + /// + /// Creates a TOTP instance. + /// since: v0.0.0 + /// + /// + /// The secret key to use in TOTP calculations. + /// + /// + /// The time window step amount to use in calculating time windows. + /// The default is 30 as recommended in the RFC + /// + /// + /// The hash mode to use. + /// + /// + /// The number of digits that the returning TOTP should have. + /// The default is 6. + /// + /// If required, a time correction can be specified to compensate of an + /// out of sync local clock. + public Totp(IKeyProvider key, + int step = 30, + OtpHashMode mode = OtpHashMode.Sha1, + int totpSize = 6, + TimeCorrection timeCorrection = null) + : base(key, mode) + { + if (step < 0) + { + throw new ArgumentOutOfRangeException(nameof(step), + "Step must be greater than 0"); + } + if (totpSize < 0 || totpSize > 10) + { + throw new ArgumentOutOfRangeException(nameof(totpSize), + "TOTP size must be greater than 0 and less than 10"); + } + + _step = step; + _totpSize = totpSize; + + // we never null check the corrected time object. + // Since it's readonly, we'll ensure that it isn't null here and + // provide neatral functionality in this case. + correctedTime = timeCorrection ?? TimeCorrection.UncorrectedInstance; + } + #endregion + //------------------------------------------------- + #region overrided Method's Region + /// + /// Takes a time step and computes a TOTP code. + /// since: v0.0.0 + /// + /// time step + /// The hash mode to use + /// TOTP calculated code + protected override string Compute(long counter, OtpHashMode mode) + { + var data = KeyUtilities.GetBigEndianBytes(counter); + var otp = this.CalculateOtp(data, mode); + return Digits(otp, _totpSize); + } + #endregion + //------------------------------------------------- + #region Get Method's Region + /// + /// Takes a timestamp and applies correction (if provided) and then computes + /// a TOTP value. + /// since: v0.0.0 + /// + /// The timestamp to use for the TOTP calculation + /// a TOTP value + public string ComputeTotp(DateTime timestamp) => + ComputeTotpFromSpecificTime(correctedTime.GetCorrectedTime(timestamp)); + + /// + /// Takes a timestamp and computes a TOTP value for corrected UTC now. + /// since: v0.0.0 + /// + /// + /// It will be corrected against a corrected UTC time using the provided time correction. If none was provided then simply the current UTC will be used. + /// + /// a TOTP value + public string ComputeTotp() => + ComputeTotpFromSpecificTime(this.correctedTime.CorrectedUtcNow); + + /// + /// Verify a value that has been provided with the calculated value. + /// since: v0.0.0 + /// + /// + /// It will be corrected against a corrected UTC time using the provided time correction. If none was provided then simply the current UTC will be used. + /// + /// + /// the trial TOTP value + /// + /// + /// This is an output parameter that gives that time step that was used to find a match. + /// This is useful in cases where a TOTP value should only be used once. This value is a unique identifier of the + /// time step (not the value) that can be used to prevent the same step from being used multiple times + /// + /// + /// The window of steps to verify. + /// + /// True if there is a match. + public bool VerifyTotp(string totp, + out long timeStepMatched, + VerificationWindow window = null) + { + return this.VerifyTotpForSpecificTime(correctedTime.CorrectedUtcNow, + totp, window, out timeStepMatched); + } + + /// + /// Verify a value that has been provided with the calculated value. + /// since: v0.0.0 + /// + /// + /// The timestamp to use. + /// + /// + /// The trial TOTP value. + /// + /// + /// This is an output parameter that gives that time step that was + /// used to find a match. This is usefule in cases where a TOTP value + /// should only be used once. This value is a unique identifier of the + /// time step (not the value) that can be used to prevent the same step + /// from being used multiple times. + /// + /// The window of steps to verify + /// True if there is a match. + public bool VerifyTotp(DateTime timestamp, + string totp, + out long timeStepMatched, VerificationWindow window = null) + { + return this.VerifyTotpForSpecificTime( + this.correctedTime.GetCorrectedTime(timestamp), + totp, window, out timeStepMatched); + } + + /// + /// Remaining seconds in current window based on UtcNow. + /// since: v0.0.0 + /// + /// + /// It will be corrected against a corrected UTC time using the provided time correction. If none was provided then simply the current UTC will be used. + /// + /// Number of remaining seconds + public int GetRemainingSeconds() => + RemainingSecondsForSpecificTime(correctedTime.CorrectedUtcNow); + + /// + /// Remaining seconds in current window. + /// since: v0.0.0 + /// + /// The timestamp + /// Number of remaining seconds + public int GetRemainingSeconds(DateTime timestamp) => + RemainingSecondsForSpecificTime(correctedTime.GetCorrectedTime(timestamp)); + /// + /// The Remaining seconds in the current window based on + /// the provided timestamp using value. + /// since: v0.0.0 + /// + private int RemainingSecondsForSpecificTime(DateTime timestamp) + { + return _step - + (int)(((timestamp.Ticks - unixEpochTicks) / ticksToSeconds) % _step); + } + /// + /// Verify a value that has been provided with the calculated value. + /// since: v0.0.0 + /// + private bool VerifyTotpForSpecificTime(DateTime timestamp, + string totp, VerificationWindow window, out long timeStepMatched) + { + var initialStep = CalculateTimeStepFromTimestamp(timestamp); + return this.Verify(initialStep, totp, out timeStepMatched, window); + } + + /// + /// Takes a timestamp and calculates a time step. + /// since: v0.0.0 + /// + private long CalculateTimeStepFromTimestamp(DateTime timestamp) + { + var unixTimestamp = (timestamp.Ticks - unixEpochTicks) / ticksToSeconds; + var window = unixTimestamp / (long)_step; + return window; + } + /// + /// Takes a timestamp and computes a TOTP value for corrected UTC value. + /// since: v0.0.0 + /// + private string ComputeTotpFromSpecificTime(DateTime timestamp) + { + var window = CalculateTimeStepFromTimestamp(timestamp); + return this.Compute(window, _hashMode); + } + + #endregion + //------------------------------------------------- + } +} diff --git a/Socialvoid/Security/Otp/VerificationWindow.cs b/Socialvoid/Security/Otp/VerificationWindow.cs new file mode 100644 index 0000000..9f441d8 --- /dev/null +++ b/Socialvoid/Security/Otp/VerificationWindow.cs @@ -0,0 +1,100 @@ +/* + * 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 . + */ + +/* + * Credits to Devin Martin and the original OtpSharp library: + * https://github.com/kspearrin/Otp.NET + */ + + +using System.Collections.Generic; + +namespace Socialvoid.Security.Otp +{ + /// + /// A verification window. + /// since: v0.0.0 + /// + public sealed class VerificationWindow + { + //------------------------------------------------- + #region static field's Region + /// + /// The verification window that accomodates network delay that is + /// recommended in the RFC. + /// since: v0.0.0 + /// + public static readonly VerificationWindow RfcSpecifiedNetworkDelay = new(1, 1); + #endregion + //------------------------------------------------- + #region field's Region + /// + /// the previous value in the window. + /// since: v0.0.0 + /// + private readonly int _previous; + /// + /// the future value in the window. + /// since: v0.0.0 + /// + private readonly int _future; + #endregion + //------------------------------------------------- + #region Constructor's Region + /// + /// Creates an instance of a verification window. + /// since: v0.0.0 + /// + /// The number of previous frames to accept + /// The number of future frames to accept + public VerificationWindow(int previous = 0, int future = 0) + { + _previous = previous; + _future = future; + } + #endregion + //------------------------------------------------- + #region Get Method's Region + /// + /// Gets an enumberable of all the possible validation candidates. + /// since: v0.0.0 + /// + /// + /// The initial frame to validate. + /// + /// + /// Enumberable of all possible frames that need to be validated. + /// + public IEnumerable ValidationCandidates(long initialFrame) + { + yield return initialFrame; + for(int i = 1; i <= _previous; i++) + { + var val = initialFrame - i; + if(val < 0) + break; + yield return val; + } + + for(int i = 1; i <= _future; i++) + yield return initialFrame + i; + } + #endregion + //------------------------------------------------- + } +} diff --git a/Socialvoid/Socialvoid.csproj b/Socialvoid/Socialvoid.csproj index 530b1a3..bf66576 100644 --- a/Socialvoid/Socialvoid.csproj +++ b/Socialvoid/Socialvoid.csproj @@ -83,18 +83,9 @@ - +