From 1e668511137baee507574400b61264cc4da788ca Mon Sep 17 00:00:00 2001 From: ThePra Date: Sun, 19 Feb 2023 00:43:43 +0100 Subject: [PATCH] Saving --- .../AtLeastOnePropertyAttribute.cs | 2 +- .../Constants.cs | 4 +- .../Data/ViewLanguage.cs | 2 +- .../LoginForm.cs | 6 +- .../NewPasswordForm.cs | 4 +- .../PasswordRecoveryForm.cs | 4 +- .../Policies.cs | 2 +- .../PrivaPub.ClientModels.csproj | 0 .../Resources/ErrorsResource.Designer.cs | 4 +- .../Resources/ErrorsResource.bg.resx | 0 .../Resources/ErrorsResource.cs.resx | 0 .../Resources/ErrorsResource.da.resx | 0 .../Resources/ErrorsResource.de.resx | 0 .../Resources/ErrorsResource.el.resx | 0 .../Resources/ErrorsResource.es.resx | 0 .../Resources/ErrorsResource.et.resx | 0 .../Resources/ErrorsResource.fi.resx | 0 .../Resources/ErrorsResource.fr.resx | 0 .../Resources/ErrorsResource.hu.resx | 0 .../Resources/ErrorsResource.it.resx | 0 .../Resources/ErrorsResource.ja.resx | 0 .../Resources/ErrorsResource.lt.resx | 0 .../Resources/ErrorsResource.lv.resx | 0 .../Resources/ErrorsResource.nl.resx | 0 .../Resources/ErrorsResource.pl.resx | 0 .../Resources/ErrorsResource.pt.resx | 0 .../Resources/ErrorsResource.resx | 0 .../Resources/ErrorsResource.ro.resx | 0 .../Resources/ErrorsResource.ru.resx | 0 .../Resources/ErrorsResource.sk.resx | 0 .../Resources/ErrorsResource.sl.resx | 0 .../Resources/ErrorsResource.sv.resx | 0 .../Resources/ErrorsResource.zh.resx | 0 .../Resources/FieldsNameResource.Designer.cs | 4 +- .../Resources/FieldsNameResource.bg.resx | 0 .../Resources/FieldsNameResource.cs.resx | 0 .../Resources/FieldsNameResource.da.resx | 0 .../Resources/FieldsNameResource.de.resx | 0 .../Resources/FieldsNameResource.el.resx | 0 .../Resources/FieldsNameResource.es.resx | 0 .../Resources/FieldsNameResource.et.resx | 0 .../Resources/FieldsNameResource.fi.resx | 0 .../Resources/FieldsNameResource.fr.resx | 0 .../Resources/FieldsNameResource.hu.resx | 0 .../Resources/FieldsNameResource.it.resx | 0 .../Resources/FieldsNameResource.ja.resx | 0 .../Resources/FieldsNameResource.lt.resx | 0 .../Resources/FieldsNameResource.lv.resx | 0 .../Resources/FieldsNameResource.nl.resx | 0 .../Resources/FieldsNameResource.pl.resx | 0 .../Resources/FieldsNameResource.pt.resx | 0 .../Resources/FieldsNameResource.resx | 0 .../Resources/FieldsNameResource.ro.resx | 0 .../Resources/FieldsNameResource.ru.resx | 0 .../Resources/FieldsNameResource.sk.resx | 0 .../Resources/FieldsNameResource.sl.resx | 0 .../Resources/FieldsNameResource.sv.resx | 0 .../Resources/FieldsNameResource.zh.resx | 0 .../User/Avatar/InsertAvatarForm.cs | 35 ++++ .../User/Avatar/UpdateAvatarForm.cs | 31 ++++ .../User/Avatar/ViewAvatar.cs | 26 +++ .../User/Avatar/ViewAvatarSettings.cs | 22 ++- .../User/JwtUser.cs | 4 +- .../User/UserForm.cs | 4 +- .../User/UsersIds.cs | 2 +- .../User/ViewAvatarServer.cs | 12 ++ PrivaPub.ClientModels/User/ViewAvatarState.cs | 11 ++ .../NoWhiteSpacesAttribute.cs | 4 +- .../WebResult.cs | 2 +- SocialPub.sln => PrivaPub.sln | 4 +- .../ClientToServer/AdminController.cs | 16 +- .../ClientToServer/DataController.cs | 10 +- .../ClientToServer/ModeratorController.cs | 2 +- .../ClientToServer/PrivateAvatarController.cs | 75 ++++++++ .../ClientToServer/RootUserController.cs | 32 ++-- .../ServerToServer/PeasantsController.cs | 12 +- .../ServerToServer/UsersController.cs | 12 +- {SocialPub => PrivaPub}/Data/InitDb.cs | 6 +- {SocialPub => PrivaPub}/Data/LanguagesRow.cs | 2 +- .../Data/languagesNative.json | 0 .../Extensions/AddAuthExtension.cs | 6 +- .../Extensions/Extensions.cs | 6 +- .../OperationCancelledExceptionFilter.cs | 2 +- .../Extensions/StringExtensions.cs | 4 +- .../Middleware/SocialPubConfigurations.cs | 51 +++-- .../Models/ActivityPub/ActivityPubActivity.cs | 4 +- .../Models/ActivityPub/ActivityPubActor.cs | 8 +- .../ActivityPub/ActivityPubCollection.cs | 2 +- .../ActivityPub/ActivityPubCollectionPage.cs | 2 +- .../Models/ActivityPub/ActivityPubLink.cs | 2 +- .../Models/ActivityPub/ActivityPubObject.cs | 4 +- .../ActivityPubOrderedCollection.cs | 2 +- .../ActivityPubOrderedCollectionPage.cs | 2 +- .../ActivityPub/ActivityPubTombstone.cs | 2 +- .../ActivityPub/Extra/ActivityPubAudience.cs | 2 +- .../ActivityPub/Extra/ActivityPubIcon.cs | 2 +- .../Extra/ActivityPubInstrument.cs | 2 +- .../ActivityPub/Extra/ActivityPubOrigin.cs | 2 +- .../ActivityPub/Extra/ActivityPubResult.cs | 2 +- .../Models/ActivityPub/MacroType.cs | 2 +- .../Models/ActivityPub/ObjectType.cs | 2 +- .../Models/AppConfiguration.cs | 6 +- .../Models/Data/Language.cs | 2 +- .../Models/Email/EmailConfiguration.cs | 2 +- .../Models/MongoSettings.cs | 2 +- {SocialPub => PrivaPub}/Models/Post/DmPost.cs | 2 +- {SocialPub => PrivaPub}/Models/Post/Post.cs | 2 +- .../Models/Post/PostBoost.cs | 2 +- .../Models/Post/PostMedia.cs | 2 +- {SocialPub => PrivaPub}/Models/User/Avatar.cs | 26 ++- .../Models/User/EmailRecovery.cs | 2 +- .../Models/User/RootToAvatar.cs | 2 +- .../Models/User/RootUser.cs | 2 +- .../Models/User/RootUserNote.cs | 6 +- .../Models/User/UserPolicyType.cs | 2 +- {SocialPub => PrivaPub}/Models/socialpub.cs | 4 +- .../PrivaPub.csproj | 2 +- {SocialPub => PrivaPub}/Program.cs | 36 ++-- .../Properties/launchSettings.json | 0 .../Resources/GenericRes.Designer.cs | 4 +- .../Resources/GenericRes.resx | 0 .../Services/ActivityPubClient.cs | 2 +- .../Services/AppConfigurationService.cs | 6 +- .../Private/IPrivateAvatarUsersService.cs | 115 ++++++++++++ .../ClientToServer/Public/DataService.cs | 10 +- .../ClientToServer/Public/IDataService.cs | 13 ++ .../Public/IPublicAvatarUsersService.cs | 174 ++++++++++++++++++ .../Services/IRootUsersService.cs | 8 +- {SocialPub => PrivaPub}/Services/JwtEvents.cs | 6 +- .../RequestLocalizationOptionsService.cs | 4 +- .../Services/RootUsersService.cs | 24 +-- .../StaticServices/AuthTokenManager.cs | 10 +- .../StaticServices/DbEntities.cs | 13 +- .../StaticServices/IPasswordHasher.cs | 2 +- .../StaticServices/PasswordHasher.cs | 2 +- .../appsettings.Development.json | 4 +- .../appsettings.Production.json | 4 +- {SocialPub => PrivaPub}/appsettings.json | 0 .../User/Avatar/InsertAvatarForm.cs | 14 -- .../User/Avatar/UpdateAvatarForm.cs | 14 -- .../User/Avatar/UpdateAvatarSettings.cs | 14 -- .../User/Avatar/ViewAvatar.cs | 16 -- .../User/Avatar/ViewAvatarSettings.cs | 12 -- .../Private/IPrivateAvatarUsersService.cs | 13 -- .../ClientToServer/Public/IDataService.cs | 13 -- .../Public/IPublicAvatarUsersService.cs | 54 ------ 146 files changed, 738 insertions(+), 382 deletions(-) rename {SocialPub.ClientModels => PrivaPub.ClientModels}/AtLeastOnePropertyAttribute.cs (95%) rename {SocialPub.ClientModels => PrivaPub.ClientModels}/Constants.cs (65%) rename {SocialPub.ClientModels => PrivaPub.ClientModels}/Data/ViewLanguage.cs (73%) rename {SocialPub.ClientModels => PrivaPub.ClientModels}/LoginForm.cs (93%) rename {SocialPub.ClientModels => PrivaPub.ClientModels}/NewPasswordForm.cs (95%) rename {SocialPub.ClientModels => PrivaPub.ClientModels}/PasswordRecoveryForm.cs (92%) rename {SocialPub.ClientModels => PrivaPub.ClientModels}/Policies.cs (82%) rename SocialPub.ClientModels/SocialPub.ClientModels.csproj => PrivaPub.ClientModels/PrivaPub.ClientModels.csproj (100%) rename {SocialPub.ClientModels => PrivaPub.ClientModels}/Resources/ErrorsResource.Designer.cs (97%) rename {SocialPub.ClientModels => PrivaPub.ClientModels}/Resources/ErrorsResource.bg.resx (100%) rename {SocialPub.ClientModels => PrivaPub.ClientModels}/Resources/ErrorsResource.cs.resx (100%) rename {SocialPub.ClientModels => PrivaPub.ClientModels}/Resources/ErrorsResource.da.resx (100%) rename {SocialPub.ClientModels => PrivaPub.ClientModels}/Resources/ErrorsResource.de.resx (100%) rename {SocialPub.ClientModels => PrivaPub.ClientModels}/Resources/ErrorsResource.el.resx (100%) rename {SocialPub.ClientModels => PrivaPub.ClientModels}/Resources/ErrorsResource.es.resx (100%) rename {SocialPub.ClientModels => PrivaPub.ClientModels}/Resources/ErrorsResource.et.resx (100%) rename {SocialPub.ClientModels => PrivaPub.ClientModels}/Resources/ErrorsResource.fi.resx (100%) rename {SocialPub.ClientModels => PrivaPub.ClientModels}/Resources/ErrorsResource.fr.resx (100%) rename {SocialPub.ClientModels => PrivaPub.ClientModels}/Resources/ErrorsResource.hu.resx (100%) rename {SocialPub.ClientModels => PrivaPub.ClientModels}/Resources/ErrorsResource.it.resx (100%) rename {SocialPub.ClientModels => PrivaPub.ClientModels}/Resources/ErrorsResource.ja.resx (100%) rename {SocialPub.ClientModels => PrivaPub.ClientModels}/Resources/ErrorsResource.lt.resx (100%) rename {SocialPub.ClientModels => PrivaPub.ClientModels}/Resources/ErrorsResource.lv.resx (100%) rename {SocialPub.ClientModels => PrivaPub.ClientModels}/Resources/ErrorsResource.nl.resx (100%) rename {SocialPub.ClientModels => PrivaPub.ClientModels}/Resources/ErrorsResource.pl.resx (100%) rename {SocialPub.ClientModels => PrivaPub.ClientModels}/Resources/ErrorsResource.pt.resx (100%) rename {SocialPub.ClientModels => PrivaPub.ClientModels}/Resources/ErrorsResource.resx (100%) rename {SocialPub.ClientModels => PrivaPub.ClientModels}/Resources/ErrorsResource.ro.resx (100%) rename {SocialPub.ClientModels => PrivaPub.ClientModels}/Resources/ErrorsResource.ru.resx (100%) rename {SocialPub.ClientModels => PrivaPub.ClientModels}/Resources/ErrorsResource.sk.resx (100%) rename {SocialPub.ClientModels => PrivaPub.ClientModels}/Resources/ErrorsResource.sl.resx (100%) rename {SocialPub.ClientModels => PrivaPub.ClientModels}/Resources/ErrorsResource.sv.resx (100%) rename {SocialPub.ClientModels => PrivaPub.ClientModels}/Resources/ErrorsResource.zh.resx (100%) rename {SocialPub.ClientModels => PrivaPub.ClientModels}/Resources/FieldsNameResource.Designer.cs (99%) rename {SocialPub.ClientModels => PrivaPub.ClientModels}/Resources/FieldsNameResource.bg.resx (100%) rename {SocialPub.ClientModels => PrivaPub.ClientModels}/Resources/FieldsNameResource.cs.resx (100%) rename {SocialPub.ClientModels => PrivaPub.ClientModels}/Resources/FieldsNameResource.da.resx (100%) rename {SocialPub.ClientModels => PrivaPub.ClientModels}/Resources/FieldsNameResource.de.resx (100%) rename {SocialPub.ClientModels => PrivaPub.ClientModels}/Resources/FieldsNameResource.el.resx (100%) rename {SocialPub.ClientModels => PrivaPub.ClientModels}/Resources/FieldsNameResource.es.resx (100%) rename {SocialPub.ClientModels => PrivaPub.ClientModels}/Resources/FieldsNameResource.et.resx (100%) rename {SocialPub.ClientModels => PrivaPub.ClientModels}/Resources/FieldsNameResource.fi.resx (100%) rename {SocialPub.ClientModels => PrivaPub.ClientModels}/Resources/FieldsNameResource.fr.resx (100%) rename {SocialPub.ClientModels => PrivaPub.ClientModels}/Resources/FieldsNameResource.hu.resx (100%) rename {SocialPub.ClientModels => PrivaPub.ClientModels}/Resources/FieldsNameResource.it.resx (100%) rename {SocialPub.ClientModels => PrivaPub.ClientModels}/Resources/FieldsNameResource.ja.resx (100%) rename {SocialPub.ClientModels => PrivaPub.ClientModels}/Resources/FieldsNameResource.lt.resx (100%) rename {SocialPub.ClientModels => PrivaPub.ClientModels}/Resources/FieldsNameResource.lv.resx (100%) rename {SocialPub.ClientModels => PrivaPub.ClientModels}/Resources/FieldsNameResource.nl.resx (100%) rename {SocialPub.ClientModels => PrivaPub.ClientModels}/Resources/FieldsNameResource.pl.resx (100%) rename {SocialPub.ClientModels => PrivaPub.ClientModels}/Resources/FieldsNameResource.pt.resx (100%) rename {SocialPub.ClientModels => PrivaPub.ClientModels}/Resources/FieldsNameResource.resx (100%) rename {SocialPub.ClientModels => PrivaPub.ClientModels}/Resources/FieldsNameResource.ro.resx (100%) rename {SocialPub.ClientModels => PrivaPub.ClientModels}/Resources/FieldsNameResource.ru.resx (100%) rename {SocialPub.ClientModels => PrivaPub.ClientModels}/Resources/FieldsNameResource.sk.resx (100%) rename {SocialPub.ClientModels => PrivaPub.ClientModels}/Resources/FieldsNameResource.sl.resx (100%) rename {SocialPub.ClientModels => PrivaPub.ClientModels}/Resources/FieldsNameResource.sv.resx (100%) rename {SocialPub.ClientModels => PrivaPub.ClientModels}/Resources/FieldsNameResource.zh.resx (100%) create mode 100644 PrivaPub.ClientModels/User/Avatar/InsertAvatarForm.cs create mode 100644 PrivaPub.ClientModels/User/Avatar/UpdateAvatarForm.cs create mode 100644 PrivaPub.ClientModels/User/Avatar/ViewAvatar.cs rename SocialPub.ClientModels/User/ViewUserSettings.cs => PrivaPub.ClientModels/User/Avatar/ViewAvatarSettings.cs (67%) rename {SocialPub.ClientModels => PrivaPub.ClientModels}/User/JwtUser.cs (72%) rename {SocialPub.ClientModels => PrivaPub.ClientModels}/User/UserForm.cs (96%) rename {SocialPub.ClientModels => PrivaPub.ClientModels}/User/UsersIds.cs (72%) create mode 100644 PrivaPub.ClientModels/User/ViewAvatarServer.cs create mode 100644 PrivaPub.ClientModels/User/ViewAvatarState.cs rename {SocialPub.ClientModels => PrivaPub.ClientModels}/ValidatorAttributes/NoWhiteSpacesAttribute.cs (91%) rename {SocialPub.ClientModels => PrivaPub.ClientModels}/WebResult.cs (97%) rename SocialPub.sln => PrivaPub.sln (80%) rename {SocialPub => PrivaPub}/Controllers/ClientToServer/AdminController.cs (92%) rename {SocialPub => PrivaPub}/Controllers/ClientToServer/DataController.cs (88%) rename {SocialPub => PrivaPub}/Controllers/ClientToServer/ModeratorController.cs (75%) create mode 100644 PrivaPub/Controllers/ClientToServer/PrivateAvatarController.cs rename SocialPub/Controllers/ClientToServer/UserController.cs => PrivaPub/Controllers/ClientToServer/RootUserController.cs (94%) rename {SocialPub => PrivaPub}/Controllers/ServerToServer/PeasantsController.cs (93%) rename {SocialPub => PrivaPub}/Controllers/ServerToServer/UsersController.cs (90%) rename {SocialPub => PrivaPub}/Data/InitDb.cs (98%) rename {SocialPub => PrivaPub}/Data/LanguagesRow.cs (85%) rename {SocialPub => PrivaPub}/Data/languagesNative.json (100%) rename {SocialPub => PrivaPub}/Extensions/AddAuthExtension.cs (80%) rename {SocialPub => PrivaPub}/Extensions/Extensions.cs (97%) rename {SocialPub => PrivaPub}/Extensions/OperationCancelledExceptionFilter.cs (95%) rename {SocialPub => PrivaPub}/Extensions/StringExtensions.cs (94%) rename {SocialPub => PrivaPub}/Middleware/SocialPubConfigurations.cs (77%) rename {SocialPub => PrivaPub}/Models/ActivityPub/ActivityPubActivity.cs (92%) rename {SocialPub => PrivaPub}/Models/ActivityPub/ActivityPubActor.cs (90%) rename {SocialPub => PrivaPub}/Models/ActivityPub/ActivityPubCollection.cs (94%) rename {SocialPub => PrivaPub}/Models/ActivityPub/ActivityPubCollectionPage.cs (92%) rename {SocialPub => PrivaPub}/Models/ActivityPub/ActivityPubLink.cs (94%) rename {SocialPub => PrivaPub}/Models/ActivityPub/ActivityPubObject.cs (97%) rename {SocialPub => PrivaPub}/Models/ActivityPub/ActivityPubOrderedCollection.cs (92%) rename {SocialPub => PrivaPub}/Models/ActivityPub/ActivityPubOrderedCollectionPage.cs (95%) rename {SocialPub => PrivaPub}/Models/ActivityPub/ActivityPubTombstone.cs (90%) rename {SocialPub => PrivaPub}/Models/ActivityPub/Extra/ActivityPubAudience.cs (85%) rename {SocialPub => PrivaPub}/Models/ActivityPub/Extra/ActivityPubIcon.cs (90%) rename {SocialPub => PrivaPub}/Models/ActivityPub/Extra/ActivityPubInstrument.cs (85%) rename {SocialPub => PrivaPub}/Models/ActivityPub/Extra/ActivityPubOrigin.cs (85%) rename {SocialPub => PrivaPub}/Models/ActivityPub/Extra/ActivityPubResult.cs (85%) rename {SocialPub => PrivaPub}/Models/ActivityPub/MacroType.cs (79%) rename {SocialPub => PrivaPub}/Models/ActivityPub/ObjectType.cs (94%) rename {SocialPub => PrivaPub}/Models/AppConfiguration.cs (87%) rename {SocialPub => PrivaPub}/Models/Data/Language.cs (85%) rename {SocialPub => PrivaPub}/Models/Email/EmailConfiguration.cs (86%) rename {SocialPub => PrivaPub}/Models/MongoSettings.cs (84%) rename {SocialPub => PrivaPub}/Models/Post/DmPost.cs (95%) rename {SocialPub => PrivaPub}/Models/Post/Post.cs (95%) rename {SocialPub => PrivaPub}/Models/Post/PostBoost.cs (85%) rename {SocialPub => PrivaPub}/Models/Post/PostMedia.cs (88%) rename {SocialPub => PrivaPub}/Models/User/Avatar.cs (84%) rename {SocialPub => PrivaPub}/Models/User/EmailRecovery.cs (88%) rename {SocialPub => PrivaPub}/Models/User/RootToAvatar.cs (82%) rename {SocialPub => PrivaPub}/Models/User/RootUser.cs (97%) rename {SocialPub => PrivaPub}/Models/User/RootUserNote.cs (55%) rename {SocialPub => PrivaPub}/Models/User/UserPolicyType.cs (67%) rename {SocialPub => PrivaPub}/Models/socialpub.cs (88%) rename SocialPub/SocialPub.csproj => PrivaPub/PrivaPub.csproj (96%) rename {SocialPub => PrivaPub}/Program.cs (81%) rename {SocialPub => PrivaPub}/Properties/launchSettings.json (100%) rename {SocialPub => PrivaPub}/Resources/GenericRes.Designer.cs (95%) rename {SocialPub => PrivaPub}/Resources/GenericRes.resx (100%) rename {SocialPub => PrivaPub}/Services/ActivityPubClient.cs (84%) rename {SocialPub => PrivaPub}/Services/AppConfigurationService.cs (91%) create mode 100644 PrivaPub/Services/ClientToServer/Private/IPrivateAvatarUsersService.cs rename {SocialPub => PrivaPub}/Services/ClientToServer/Public/DataService.cs (83%) create mode 100644 PrivaPub/Services/ClientToServer/Public/IDataService.cs create mode 100644 PrivaPub/Services/ClientToServer/Public/IPublicAvatarUsersService.cs rename {SocialPub => PrivaPub}/Services/IRootUsersService.cs (86%) rename {SocialPub => PrivaPub}/Services/JwtEvents.cs (95%) rename {SocialPub => PrivaPub}/Services/RequestLocalizationOptionsService.cs (95%) rename {SocialPub => PrivaPub}/Services/RootUsersService.cs (97%) rename {SocialPub => PrivaPub}/StaticServices/AuthTokenManager.cs (89%) rename {SocialPub => PrivaPub}/StaticServices/DbEntities.cs (69%) rename {SocialPub => PrivaPub}/StaticServices/IPasswordHasher.cs (79%) rename {SocialPub => PrivaPub}/StaticServices/PasswordHasher.cs (97%) rename {SocialPub => PrivaPub}/appsettings.Development.json (94%) rename {SocialPub => PrivaPub}/appsettings.Production.json (96%) rename {SocialPub => PrivaPub}/appsettings.json (100%) delete mode 100644 SocialPub.ClientModels/User/Avatar/InsertAvatarForm.cs delete mode 100644 SocialPub.ClientModels/User/Avatar/UpdateAvatarForm.cs delete mode 100644 SocialPub.ClientModels/User/Avatar/UpdateAvatarSettings.cs delete mode 100644 SocialPub.ClientModels/User/Avatar/ViewAvatar.cs delete mode 100644 SocialPub.ClientModels/User/Avatar/ViewAvatarSettings.cs delete mode 100644 SocialPub/Services/ClientToServer/Private/IPrivateAvatarUsersService.cs delete mode 100644 SocialPub/Services/ClientToServer/Public/IDataService.cs delete mode 100644 SocialPub/Services/ClientToServer/Public/IPublicAvatarUsersService.cs diff --git a/SocialPub.ClientModels/AtLeastOnePropertyAttribute.cs b/PrivaPub.ClientModels/AtLeastOnePropertyAttribute.cs similarity index 95% rename from SocialPub.ClientModels/AtLeastOnePropertyAttribute.cs rename to PrivaPub.ClientModels/AtLeastOnePropertyAttribute.cs index 52d81b3..2b7f87a 100644 --- a/SocialPub.ClientModels/AtLeastOnePropertyAttribute.cs +++ b/PrivaPub.ClientModels/AtLeastOnePropertyAttribute.cs @@ -1,7 +1,7 @@ using System.ComponentModel.DataAnnotations; using System.Reflection; -namespace SocialPub.ClientModels +namespace PrivaPub.ClientModels { [AttributeUsage(AttributeTargets.Class, AllowMultiple = true)] public class AtLeastOnePropertyAttribute : ValidationAttribute diff --git a/SocialPub.ClientModels/Constants.cs b/PrivaPub.ClientModels/Constants.cs similarity index 65% rename from SocialPub.ClientModels/Constants.cs rename to PrivaPub.ClientModels/Constants.cs index 2b9b47c..26bb794 100644 --- a/SocialPub.ClientModels/Constants.cs +++ b/PrivaPub.ClientModels/Constants.cs @@ -1,7 +1,9 @@ -namespace SocialPub.ClientModels +namespace PrivaPub.ClientModels { public static class Constants { + public const int MaxAvatarNameLength = 32; + public const int MaxAvatarBiographyLength = 5_000; public const int MinPasswordLength = 7; public const int MaxPasswordLength = 1025; public const int GroupInvitationLength = 64; diff --git a/SocialPub.ClientModels/Data/ViewLanguage.cs b/PrivaPub.ClientModels/Data/ViewLanguage.cs similarity index 73% rename from SocialPub.ClientModels/Data/ViewLanguage.cs rename to PrivaPub.ClientModels/Data/ViewLanguage.cs index c413e5a..1e1235c 100644 --- a/SocialPub.ClientModels/Data/ViewLanguage.cs +++ b/PrivaPub.ClientModels/Data/ViewLanguage.cs @@ -1,4 +1,4 @@ -namespace SocialPub.ClientModels.Data +namespace PrivaPub.ClientModels.Data { public class ViewLanguage { diff --git a/SocialPub.ClientModels/LoginForm.cs b/PrivaPub.ClientModels/LoginForm.cs similarity index 93% rename from SocialPub.ClientModels/LoginForm.cs rename to PrivaPub.ClientModels/LoginForm.cs index 5d14ab1..e3fbc5e 100644 --- a/SocialPub.ClientModels/LoginForm.cs +++ b/PrivaPub.ClientModels/LoginForm.cs @@ -1,10 +1,10 @@ -using SocialPub.ClientModels.Resources; -using SocialPub.ClientModels.ValidatorAttributes; +using PrivaPub.ClientModels.Resources; +using PrivaPub.ClientModels.ValidatorAttributes; using System.ComponentModel; using System.ComponentModel.DataAnnotations; -namespace SocialPub.ClientModels +namespace PrivaPub.ClientModels { public class LoginForm { diff --git a/SocialPub.ClientModels/NewPasswordForm.cs b/PrivaPub.ClientModels/NewPasswordForm.cs similarity index 95% rename from SocialPub.ClientModels/NewPasswordForm.cs rename to PrivaPub.ClientModels/NewPasswordForm.cs index 3fdeafd..3de242f 100644 --- a/SocialPub.ClientModels/NewPasswordForm.cs +++ b/PrivaPub.ClientModels/NewPasswordForm.cs @@ -1,9 +1,9 @@ -using SocialPub.ClientModels.Resources; +using PrivaPub.ClientModels.Resources; using System.ComponentModel; using System.ComponentModel.DataAnnotations; -namespace SocialPub.ClientModels +namespace PrivaPub.ClientModels { public class NewPasswordForm { diff --git a/SocialPub.ClientModels/PasswordRecoveryForm.cs b/PrivaPub.ClientModels/PasswordRecoveryForm.cs similarity index 92% rename from SocialPub.ClientModels/PasswordRecoveryForm.cs rename to PrivaPub.ClientModels/PasswordRecoveryForm.cs index 8ed9703..aec4b93 100644 --- a/SocialPub.ClientModels/PasswordRecoveryForm.cs +++ b/PrivaPub.ClientModels/PasswordRecoveryForm.cs @@ -1,8 +1,8 @@ -using SocialPub.ClientModels.Resources; +using PrivaPub.ClientModels.Resources; using System.ComponentModel.DataAnnotations; -namespace SocialPub.ClientModels +namespace PrivaPub.ClientModels { [AtLeastOneProperty(nameof(UserName), nameof(Email), ErrorMessageResourceName = "AtLeastOneProperty", diff --git a/SocialPub.ClientModels/Policies.cs b/PrivaPub.ClientModels/Policies.cs similarity index 82% rename from SocialPub.ClientModels/Policies.cs rename to PrivaPub.ClientModels/Policies.cs index ae17cdb..937ce54 100644 --- a/SocialPub.ClientModels/Policies.cs +++ b/PrivaPub.ClientModels/Policies.cs @@ -1,4 +1,4 @@ -namespace SocialPub.ClientModels +namespace PrivaPub.ClientModels { public static class Policies { diff --git a/SocialPub.ClientModels/SocialPub.ClientModels.csproj b/PrivaPub.ClientModels/PrivaPub.ClientModels.csproj similarity index 100% rename from SocialPub.ClientModels/SocialPub.ClientModels.csproj rename to PrivaPub.ClientModels/PrivaPub.ClientModels.csproj diff --git a/SocialPub.ClientModels/Resources/ErrorsResource.Designer.cs b/PrivaPub.ClientModels/Resources/ErrorsResource.Designer.cs similarity index 97% rename from SocialPub.ClientModels/Resources/ErrorsResource.Designer.cs rename to PrivaPub.ClientModels/Resources/ErrorsResource.Designer.cs index cc9ca64..fcddb9e 100644 --- a/SocialPub.ClientModels/Resources/ErrorsResource.Designer.cs +++ b/PrivaPub.ClientModels/Resources/ErrorsResource.Designer.cs @@ -8,7 +8,7 @@ // //------------------------------------------------------------------------------ -namespace SocialPub.ClientModels.Resources { +namespace PrivaPub.ClientModels.Resources { using System; @@ -39,7 +39,7 @@ namespace SocialPub.ClientModels.Resources { public static global::System.Resources.ResourceManager ResourceManager { get { if (object.ReferenceEquals(resourceMan, null)) { - global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("SocialPub.ClientModels.Resources.ErrorsResource", typeof(ErrorsResource).Assembly); + global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("PrivaPub.ClientModels.Resources.ErrorsResource", typeof(ErrorsResource).Assembly); resourceMan = temp; } return resourceMan; diff --git a/SocialPub.ClientModels/Resources/ErrorsResource.bg.resx b/PrivaPub.ClientModels/Resources/ErrorsResource.bg.resx similarity index 100% rename from SocialPub.ClientModels/Resources/ErrorsResource.bg.resx rename to PrivaPub.ClientModels/Resources/ErrorsResource.bg.resx diff --git a/SocialPub.ClientModels/Resources/ErrorsResource.cs.resx b/PrivaPub.ClientModels/Resources/ErrorsResource.cs.resx similarity index 100% rename from SocialPub.ClientModels/Resources/ErrorsResource.cs.resx rename to PrivaPub.ClientModels/Resources/ErrorsResource.cs.resx diff --git a/SocialPub.ClientModels/Resources/ErrorsResource.da.resx b/PrivaPub.ClientModels/Resources/ErrorsResource.da.resx similarity index 100% rename from SocialPub.ClientModels/Resources/ErrorsResource.da.resx rename to PrivaPub.ClientModels/Resources/ErrorsResource.da.resx diff --git a/SocialPub.ClientModels/Resources/ErrorsResource.de.resx b/PrivaPub.ClientModels/Resources/ErrorsResource.de.resx similarity index 100% rename from SocialPub.ClientModels/Resources/ErrorsResource.de.resx rename to PrivaPub.ClientModels/Resources/ErrorsResource.de.resx diff --git a/SocialPub.ClientModels/Resources/ErrorsResource.el.resx b/PrivaPub.ClientModels/Resources/ErrorsResource.el.resx similarity index 100% rename from SocialPub.ClientModels/Resources/ErrorsResource.el.resx rename to PrivaPub.ClientModels/Resources/ErrorsResource.el.resx diff --git a/SocialPub.ClientModels/Resources/ErrorsResource.es.resx b/PrivaPub.ClientModels/Resources/ErrorsResource.es.resx similarity index 100% rename from SocialPub.ClientModels/Resources/ErrorsResource.es.resx rename to PrivaPub.ClientModels/Resources/ErrorsResource.es.resx diff --git a/SocialPub.ClientModels/Resources/ErrorsResource.et.resx b/PrivaPub.ClientModels/Resources/ErrorsResource.et.resx similarity index 100% rename from SocialPub.ClientModels/Resources/ErrorsResource.et.resx rename to PrivaPub.ClientModels/Resources/ErrorsResource.et.resx diff --git a/SocialPub.ClientModels/Resources/ErrorsResource.fi.resx b/PrivaPub.ClientModels/Resources/ErrorsResource.fi.resx similarity index 100% rename from SocialPub.ClientModels/Resources/ErrorsResource.fi.resx rename to PrivaPub.ClientModels/Resources/ErrorsResource.fi.resx diff --git a/SocialPub.ClientModels/Resources/ErrorsResource.fr.resx b/PrivaPub.ClientModels/Resources/ErrorsResource.fr.resx similarity index 100% rename from SocialPub.ClientModels/Resources/ErrorsResource.fr.resx rename to PrivaPub.ClientModels/Resources/ErrorsResource.fr.resx diff --git a/SocialPub.ClientModels/Resources/ErrorsResource.hu.resx b/PrivaPub.ClientModels/Resources/ErrorsResource.hu.resx similarity index 100% rename from SocialPub.ClientModels/Resources/ErrorsResource.hu.resx rename to PrivaPub.ClientModels/Resources/ErrorsResource.hu.resx diff --git a/SocialPub.ClientModels/Resources/ErrorsResource.it.resx b/PrivaPub.ClientModels/Resources/ErrorsResource.it.resx similarity index 100% rename from SocialPub.ClientModels/Resources/ErrorsResource.it.resx rename to PrivaPub.ClientModels/Resources/ErrorsResource.it.resx diff --git a/SocialPub.ClientModels/Resources/ErrorsResource.ja.resx b/PrivaPub.ClientModels/Resources/ErrorsResource.ja.resx similarity index 100% rename from SocialPub.ClientModels/Resources/ErrorsResource.ja.resx rename to PrivaPub.ClientModels/Resources/ErrorsResource.ja.resx diff --git a/SocialPub.ClientModels/Resources/ErrorsResource.lt.resx b/PrivaPub.ClientModels/Resources/ErrorsResource.lt.resx similarity index 100% rename from SocialPub.ClientModels/Resources/ErrorsResource.lt.resx rename to PrivaPub.ClientModels/Resources/ErrorsResource.lt.resx diff --git a/SocialPub.ClientModels/Resources/ErrorsResource.lv.resx b/PrivaPub.ClientModels/Resources/ErrorsResource.lv.resx similarity index 100% rename from SocialPub.ClientModels/Resources/ErrorsResource.lv.resx rename to PrivaPub.ClientModels/Resources/ErrorsResource.lv.resx diff --git a/SocialPub.ClientModels/Resources/ErrorsResource.nl.resx b/PrivaPub.ClientModels/Resources/ErrorsResource.nl.resx similarity index 100% rename from SocialPub.ClientModels/Resources/ErrorsResource.nl.resx rename to PrivaPub.ClientModels/Resources/ErrorsResource.nl.resx diff --git a/SocialPub.ClientModels/Resources/ErrorsResource.pl.resx b/PrivaPub.ClientModels/Resources/ErrorsResource.pl.resx similarity index 100% rename from SocialPub.ClientModels/Resources/ErrorsResource.pl.resx rename to PrivaPub.ClientModels/Resources/ErrorsResource.pl.resx diff --git a/SocialPub.ClientModels/Resources/ErrorsResource.pt.resx b/PrivaPub.ClientModels/Resources/ErrorsResource.pt.resx similarity index 100% rename from SocialPub.ClientModels/Resources/ErrorsResource.pt.resx rename to PrivaPub.ClientModels/Resources/ErrorsResource.pt.resx diff --git a/SocialPub.ClientModels/Resources/ErrorsResource.resx b/PrivaPub.ClientModels/Resources/ErrorsResource.resx similarity index 100% rename from SocialPub.ClientModels/Resources/ErrorsResource.resx rename to PrivaPub.ClientModels/Resources/ErrorsResource.resx diff --git a/SocialPub.ClientModels/Resources/ErrorsResource.ro.resx b/PrivaPub.ClientModels/Resources/ErrorsResource.ro.resx similarity index 100% rename from SocialPub.ClientModels/Resources/ErrorsResource.ro.resx rename to PrivaPub.ClientModels/Resources/ErrorsResource.ro.resx diff --git a/SocialPub.ClientModels/Resources/ErrorsResource.ru.resx b/PrivaPub.ClientModels/Resources/ErrorsResource.ru.resx similarity index 100% rename from SocialPub.ClientModels/Resources/ErrorsResource.ru.resx rename to PrivaPub.ClientModels/Resources/ErrorsResource.ru.resx diff --git a/SocialPub.ClientModels/Resources/ErrorsResource.sk.resx b/PrivaPub.ClientModels/Resources/ErrorsResource.sk.resx similarity index 100% rename from SocialPub.ClientModels/Resources/ErrorsResource.sk.resx rename to PrivaPub.ClientModels/Resources/ErrorsResource.sk.resx diff --git a/SocialPub.ClientModels/Resources/ErrorsResource.sl.resx b/PrivaPub.ClientModels/Resources/ErrorsResource.sl.resx similarity index 100% rename from SocialPub.ClientModels/Resources/ErrorsResource.sl.resx rename to PrivaPub.ClientModels/Resources/ErrorsResource.sl.resx diff --git a/SocialPub.ClientModels/Resources/ErrorsResource.sv.resx b/PrivaPub.ClientModels/Resources/ErrorsResource.sv.resx similarity index 100% rename from SocialPub.ClientModels/Resources/ErrorsResource.sv.resx rename to PrivaPub.ClientModels/Resources/ErrorsResource.sv.resx diff --git a/SocialPub.ClientModels/Resources/ErrorsResource.zh.resx b/PrivaPub.ClientModels/Resources/ErrorsResource.zh.resx similarity index 100% rename from SocialPub.ClientModels/Resources/ErrorsResource.zh.resx rename to PrivaPub.ClientModels/Resources/ErrorsResource.zh.resx diff --git a/SocialPub.ClientModels/Resources/FieldsNameResource.Designer.cs b/PrivaPub.ClientModels/Resources/FieldsNameResource.Designer.cs similarity index 99% rename from SocialPub.ClientModels/Resources/FieldsNameResource.Designer.cs rename to PrivaPub.ClientModels/Resources/FieldsNameResource.Designer.cs index 6775f72..69e6c54 100644 --- a/SocialPub.ClientModels/Resources/FieldsNameResource.Designer.cs +++ b/PrivaPub.ClientModels/Resources/FieldsNameResource.Designer.cs @@ -8,7 +8,7 @@ // //------------------------------------------------------------------------------ -namespace SocialPub.ClientModels.Resources { +namespace PrivaPub.ClientModels.Resources { using System; @@ -39,7 +39,7 @@ namespace SocialPub.ClientModels.Resources { public static global::System.Resources.ResourceManager ResourceManager { get { if (object.ReferenceEquals(resourceMan, null)) { - global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("SocialPub.ClientModels.Resources.FieldsNameResource", typeof(FieldsNameResource).Assembly); + global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("PrivaPub.ClientModels.Resources.FieldsNameResource", typeof(FieldsNameResource).Assembly); resourceMan = temp; } return resourceMan; diff --git a/SocialPub.ClientModels/Resources/FieldsNameResource.bg.resx b/PrivaPub.ClientModels/Resources/FieldsNameResource.bg.resx similarity index 100% rename from SocialPub.ClientModels/Resources/FieldsNameResource.bg.resx rename to PrivaPub.ClientModels/Resources/FieldsNameResource.bg.resx diff --git a/SocialPub.ClientModels/Resources/FieldsNameResource.cs.resx b/PrivaPub.ClientModels/Resources/FieldsNameResource.cs.resx similarity index 100% rename from SocialPub.ClientModels/Resources/FieldsNameResource.cs.resx rename to PrivaPub.ClientModels/Resources/FieldsNameResource.cs.resx diff --git a/SocialPub.ClientModels/Resources/FieldsNameResource.da.resx b/PrivaPub.ClientModels/Resources/FieldsNameResource.da.resx similarity index 100% rename from SocialPub.ClientModels/Resources/FieldsNameResource.da.resx rename to PrivaPub.ClientModels/Resources/FieldsNameResource.da.resx diff --git a/SocialPub.ClientModels/Resources/FieldsNameResource.de.resx b/PrivaPub.ClientModels/Resources/FieldsNameResource.de.resx similarity index 100% rename from SocialPub.ClientModels/Resources/FieldsNameResource.de.resx rename to PrivaPub.ClientModels/Resources/FieldsNameResource.de.resx diff --git a/SocialPub.ClientModels/Resources/FieldsNameResource.el.resx b/PrivaPub.ClientModels/Resources/FieldsNameResource.el.resx similarity index 100% rename from SocialPub.ClientModels/Resources/FieldsNameResource.el.resx rename to PrivaPub.ClientModels/Resources/FieldsNameResource.el.resx diff --git a/SocialPub.ClientModels/Resources/FieldsNameResource.es.resx b/PrivaPub.ClientModels/Resources/FieldsNameResource.es.resx similarity index 100% rename from SocialPub.ClientModels/Resources/FieldsNameResource.es.resx rename to PrivaPub.ClientModels/Resources/FieldsNameResource.es.resx diff --git a/SocialPub.ClientModels/Resources/FieldsNameResource.et.resx b/PrivaPub.ClientModels/Resources/FieldsNameResource.et.resx similarity index 100% rename from SocialPub.ClientModels/Resources/FieldsNameResource.et.resx rename to PrivaPub.ClientModels/Resources/FieldsNameResource.et.resx diff --git a/SocialPub.ClientModels/Resources/FieldsNameResource.fi.resx b/PrivaPub.ClientModels/Resources/FieldsNameResource.fi.resx similarity index 100% rename from SocialPub.ClientModels/Resources/FieldsNameResource.fi.resx rename to PrivaPub.ClientModels/Resources/FieldsNameResource.fi.resx diff --git a/SocialPub.ClientModels/Resources/FieldsNameResource.fr.resx b/PrivaPub.ClientModels/Resources/FieldsNameResource.fr.resx similarity index 100% rename from SocialPub.ClientModels/Resources/FieldsNameResource.fr.resx rename to PrivaPub.ClientModels/Resources/FieldsNameResource.fr.resx diff --git a/SocialPub.ClientModels/Resources/FieldsNameResource.hu.resx b/PrivaPub.ClientModels/Resources/FieldsNameResource.hu.resx similarity index 100% rename from SocialPub.ClientModels/Resources/FieldsNameResource.hu.resx rename to PrivaPub.ClientModels/Resources/FieldsNameResource.hu.resx diff --git a/SocialPub.ClientModels/Resources/FieldsNameResource.it.resx b/PrivaPub.ClientModels/Resources/FieldsNameResource.it.resx similarity index 100% rename from SocialPub.ClientModels/Resources/FieldsNameResource.it.resx rename to PrivaPub.ClientModels/Resources/FieldsNameResource.it.resx diff --git a/SocialPub.ClientModels/Resources/FieldsNameResource.ja.resx b/PrivaPub.ClientModels/Resources/FieldsNameResource.ja.resx similarity index 100% rename from SocialPub.ClientModels/Resources/FieldsNameResource.ja.resx rename to PrivaPub.ClientModels/Resources/FieldsNameResource.ja.resx diff --git a/SocialPub.ClientModels/Resources/FieldsNameResource.lt.resx b/PrivaPub.ClientModels/Resources/FieldsNameResource.lt.resx similarity index 100% rename from SocialPub.ClientModels/Resources/FieldsNameResource.lt.resx rename to PrivaPub.ClientModels/Resources/FieldsNameResource.lt.resx diff --git a/SocialPub.ClientModels/Resources/FieldsNameResource.lv.resx b/PrivaPub.ClientModels/Resources/FieldsNameResource.lv.resx similarity index 100% rename from SocialPub.ClientModels/Resources/FieldsNameResource.lv.resx rename to PrivaPub.ClientModels/Resources/FieldsNameResource.lv.resx diff --git a/SocialPub.ClientModels/Resources/FieldsNameResource.nl.resx b/PrivaPub.ClientModels/Resources/FieldsNameResource.nl.resx similarity index 100% rename from SocialPub.ClientModels/Resources/FieldsNameResource.nl.resx rename to PrivaPub.ClientModels/Resources/FieldsNameResource.nl.resx diff --git a/SocialPub.ClientModels/Resources/FieldsNameResource.pl.resx b/PrivaPub.ClientModels/Resources/FieldsNameResource.pl.resx similarity index 100% rename from SocialPub.ClientModels/Resources/FieldsNameResource.pl.resx rename to PrivaPub.ClientModels/Resources/FieldsNameResource.pl.resx diff --git a/SocialPub.ClientModels/Resources/FieldsNameResource.pt.resx b/PrivaPub.ClientModels/Resources/FieldsNameResource.pt.resx similarity index 100% rename from SocialPub.ClientModels/Resources/FieldsNameResource.pt.resx rename to PrivaPub.ClientModels/Resources/FieldsNameResource.pt.resx diff --git a/SocialPub.ClientModels/Resources/FieldsNameResource.resx b/PrivaPub.ClientModels/Resources/FieldsNameResource.resx similarity index 100% rename from SocialPub.ClientModels/Resources/FieldsNameResource.resx rename to PrivaPub.ClientModels/Resources/FieldsNameResource.resx diff --git a/SocialPub.ClientModels/Resources/FieldsNameResource.ro.resx b/PrivaPub.ClientModels/Resources/FieldsNameResource.ro.resx similarity index 100% rename from SocialPub.ClientModels/Resources/FieldsNameResource.ro.resx rename to PrivaPub.ClientModels/Resources/FieldsNameResource.ro.resx diff --git a/SocialPub.ClientModels/Resources/FieldsNameResource.ru.resx b/PrivaPub.ClientModels/Resources/FieldsNameResource.ru.resx similarity index 100% rename from SocialPub.ClientModels/Resources/FieldsNameResource.ru.resx rename to PrivaPub.ClientModels/Resources/FieldsNameResource.ru.resx diff --git a/SocialPub.ClientModels/Resources/FieldsNameResource.sk.resx b/PrivaPub.ClientModels/Resources/FieldsNameResource.sk.resx similarity index 100% rename from SocialPub.ClientModels/Resources/FieldsNameResource.sk.resx rename to PrivaPub.ClientModels/Resources/FieldsNameResource.sk.resx diff --git a/SocialPub.ClientModels/Resources/FieldsNameResource.sl.resx b/PrivaPub.ClientModels/Resources/FieldsNameResource.sl.resx similarity index 100% rename from SocialPub.ClientModels/Resources/FieldsNameResource.sl.resx rename to PrivaPub.ClientModels/Resources/FieldsNameResource.sl.resx diff --git a/SocialPub.ClientModels/Resources/FieldsNameResource.sv.resx b/PrivaPub.ClientModels/Resources/FieldsNameResource.sv.resx similarity index 100% rename from SocialPub.ClientModels/Resources/FieldsNameResource.sv.resx rename to PrivaPub.ClientModels/Resources/FieldsNameResource.sv.resx diff --git a/SocialPub.ClientModels/Resources/FieldsNameResource.zh.resx b/PrivaPub.ClientModels/Resources/FieldsNameResource.zh.resx similarity index 100% rename from SocialPub.ClientModels/Resources/FieldsNameResource.zh.resx rename to PrivaPub.ClientModels/Resources/FieldsNameResource.zh.resx diff --git a/PrivaPub.ClientModels/User/Avatar/InsertAvatarForm.cs b/PrivaPub.ClientModels/User/Avatar/InsertAvatarForm.cs new file mode 100644 index 0000000..712872d --- /dev/null +++ b/PrivaPub.ClientModels/User/Avatar/InsertAvatarForm.cs @@ -0,0 +1,35 @@ +using PrivaPub.ClientModels.Resources; + +using System.ComponentModel.DataAnnotations; +using System.Security.AccessControl; +using System.Text.Json.Serialization; +using System.Xml.Linq; + +namespace PrivaPub.ClientModels.User.Avatar +{ + [JsonSerializable(typeof(InsertAvatarForm))] + public class InsertAvatarForm + { + [JsonIgnore] + public string RootId { get; set; } + + [Required(ErrorMessageResourceName = "Required", ErrorMessageResourceType = typeof(ErrorsResource)), + StringLength(Constants.MaxAvatarNameLength, ErrorMessageResourceName = "StringLength", ErrorMessageResourceType = typeof(ErrorsResource)), + Display(Name = nameof(Name), ResourceType = typeof(FieldsNameResource))] + public string Name { get; set; }//name + + [Required(ErrorMessageResourceName = "Required", ErrorMessageResourceType = typeof(ErrorsResource)), + StringLength(Constants.MaxAvatarNameLength, ErrorMessageResourceName = "StringLength", ErrorMessageResourceType = typeof(ErrorsResource)), + Display(Name = nameof(UserName), ResourceType = typeof(FieldsNameResource))] + public string UserName { get; set; }//preferredUsername + + [Required(ErrorMessageResourceName = "Required", ErrorMessageResourceType = typeof(ErrorsResource)), + StringLength(Constants.MaxAvatarBiographyLength, ErrorMessageResourceName = "StringLength", ErrorMessageResourceType = typeof(ErrorsResource)), + Display(Name = nameof(Biography), ResourceType = typeof(FieldsNameResource))] + public string Biography { get; set; }//summary + + public ViewAvatarSettings Settings { get; set; } = new(); + public Dictionary Fields { get; set; } = new(); + public string PersonalNote { get; set; } + } +} diff --git a/PrivaPub.ClientModels/User/Avatar/UpdateAvatarForm.cs b/PrivaPub.ClientModels/User/Avatar/UpdateAvatarForm.cs new file mode 100644 index 0000000..5d583cb --- /dev/null +++ b/PrivaPub.ClientModels/User/Avatar/UpdateAvatarForm.cs @@ -0,0 +1,31 @@ +using PrivaPub.ClientModels.Resources; + +using System.ComponentModel.DataAnnotations; +using System.Text.Json.Serialization; + +namespace PrivaPub.ClientModels.User.Avatar +{ + [JsonSerializable(typeof(UpdateAvatarForm))] + public class UpdateAvatarForm + { + [JsonIgnore] + public string RootId { get; set; } + [Required(ErrorMessageResourceName = "Required", ErrorMessageResourceType = typeof(ErrorsResource)), + Display(Name = nameof(AvatarId), ResourceType = typeof(FieldsNameResource))] + public string AvatarId { get; set; } + + [Required(ErrorMessageResourceName = "Required", ErrorMessageResourceType = typeof(ErrorsResource)), + StringLength(Constants.MaxAvatarNameLength, ErrorMessageResourceName = "StringLength", ErrorMessageResourceType = typeof(ErrorsResource)), + Display(Name = nameof(Name), ResourceType = typeof(FieldsNameResource))] + public string Name { get; set; }//name + + [Required(ErrorMessageResourceName = "Required", ErrorMessageResourceType = typeof(ErrorsResource)), + StringLength(Constants.MaxAvatarBiographyLength, ErrorMessageResourceName = "StringLength", ErrorMessageResourceType = typeof(ErrorsResource)), + Display(Name = nameof(Biography), ResourceType = typeof(FieldsNameResource))] + public string Biography { get; set; }//summary + + public ViewAvatarSettings Settings { get; set; } = new(); + public Dictionary Fields { get; set; } = new(); + public string PersonalNote { get; set; } + } +} diff --git a/PrivaPub.ClientModels/User/Avatar/ViewAvatar.cs b/PrivaPub.ClientModels/User/Avatar/ViewAvatar.cs new file mode 100644 index 0000000..c6d6a46 --- /dev/null +++ b/PrivaPub.ClientModels/User/Avatar/ViewAvatar.cs @@ -0,0 +1,26 @@ +using System.Text.Json.Serialization; + +namespace PrivaPub.ClientModels.User.Avatar +{ + [JsonSerializable(typeof(ViewAvatar))] + public class ViewAvatar + { + public string Url { get; set; }//url + public string Name { get; set; }//name + public string UserName { get; set; }//preferredUsername + public string Biography { get; set; }//summary + public Dictionary Fields { get; set; } = new(); + + public string PictureURL { get; set; }//icon + public string ThumbnailURL { get; set; }//image + public Dictionary SharedPersonalContacts { get; set; } = new(); + + public ViewAvatarState AccountState { get; set; } = ViewAvatarState.Normal; + public ViewAvatarServer ServerType { get; set; } = ViewAvatarServer.Unknown; + + public ViewAvatarSettings Settings { get; set; } = new(); + + public DateTime UpdatedAt { get; set; } + public DateTime CreatedAt { get; set; } + } +} diff --git a/SocialPub.ClientModels/User/ViewUserSettings.cs b/PrivaPub.ClientModels/User/Avatar/ViewAvatarSettings.cs similarity index 67% rename from SocialPub.ClientModels/User/ViewUserSettings.cs rename to PrivaPub.ClientModels/User/Avatar/ViewAvatarSettings.cs index 40bc0c2..42e2dbf 100644 --- a/SocialPub.ClientModels/User/ViewUserSettings.cs +++ b/PrivaPub.ClientModels/User/Avatar/ViewAvatarSettings.cs @@ -1,25 +1,29 @@ -using SocialPub.ClientModels.Resources; +using PrivaPub.ClientModels.Resources; using System.ComponentModel.DataAnnotations; +using System.Text.Json.Serialization; -namespace SocialPub.ClientModels.User +namespace PrivaPub.ClientModels.User.Avatar { - public class ViewUserSettings + [JsonSerializable(typeof(ViewAvatarSettings))] + public class ViewAvatarSettings { [Required(ErrorMessageResourceName = "Required", ErrorMessageResourceType = typeof(ErrorsResource)), Display(Name = nameof(LanguageCode), ResourceType = typeof(FieldsNameResource))] - public string LanguageCode { get; set; } = "en"; + public string LanguageCode { get; set; } = "en-GB"; + public bool IsDefault { get; set; } = true; + + [Range(-2, 359, ErrorMessageResourceName = nameof(Range), ErrorMessageResourceType = typeof(ErrorsResource))] + public short IconsThemeIndexColour { get; set; } = 25; [Range(0, 359, ErrorMessageResourceName = nameof(Range), ErrorMessageResourceType = typeof(ErrorsResource))] public short LightThemeIndexColour { get; set; } = 25; [Range(0, 359, ErrorMessageResourceName = nameof(Range), ErrorMessageResourceType = typeof(ErrorsResource))] public short DarkThemeIndexColour { get; set; } = 215; - [Range(-2, 359, ErrorMessageResourceName = nameof(Range), ErrorMessageResourceType = typeof(ErrorsResource))] - public short IconsThemeIndexColour { get; set; } = 25; - public bool PreferSystemTheming { get; set; } = false; + public bool PreferSystemTheming { get; set; } = true; public bool ThemeIsDarkMode { get; set; } = false; - public bool ThemeIsLightGray { get; set; } = false; + public bool ThemeIsLightGray { get; set; } = true; public bool ThemeIsDarkGray { get; set; } = false; } -} \ No newline at end of file +} diff --git a/SocialPub.ClientModels/User/JwtUser.cs b/PrivaPub.ClientModels/User/JwtUser.cs similarity index 72% rename from SocialPub.ClientModels/User/JwtUser.cs rename to PrivaPub.ClientModels/User/JwtUser.cs index 1062f1e..361fe3d 100644 --- a/SocialPub.ClientModels/User/JwtUser.cs +++ b/PrivaPub.ClientModels/User/JwtUser.cs @@ -1,4 +1,4 @@ -namespace SocialPub.ClientModels.User +namespace PrivaPub.ClientModels.User { public class JwtUser { @@ -8,6 +8,6 @@ public List Policies { get; set; } = new(); public string Token { get; set; } public long Expiration { get; set; } - public ViewUserSettings UserSettings { get; set; } = new(); + public ViewAvatarServer UserSettings { get; set; } = new(); } } \ No newline at end of file diff --git a/SocialPub.ClientModels/User/UserForm.cs b/PrivaPub.ClientModels/User/UserForm.cs similarity index 96% rename from SocialPub.ClientModels/User/UserForm.cs rename to PrivaPub.ClientModels/User/UserForm.cs index e1d4eae..27a79b3 100644 --- a/SocialPub.ClientModels/User/UserForm.cs +++ b/PrivaPub.ClientModels/User/UserForm.cs @@ -1,9 +1,9 @@ -using SocialPub.ClientModels.Resources; +using PrivaPub.ClientModels.Resources; using System.ComponentModel; using System.ComponentModel.DataAnnotations; -namespace SocialPub.ClientModels.User +namespace PrivaPub.ClientModels.User { public class UserForm { diff --git a/SocialPub.ClientModels/User/UsersIds.cs b/PrivaPub.ClientModels/User/UsersIds.cs similarity index 72% rename from SocialPub.ClientModels/User/UsersIds.cs rename to PrivaPub.ClientModels/User/UsersIds.cs index 862b76d..a2f7b13 100644 --- a/SocialPub.ClientModels/User/UsersIds.cs +++ b/PrivaPub.ClientModels/User/UsersIds.cs @@ -1,4 +1,4 @@ -namespace SocialPub.ClientModels.User +namespace PrivaPub.ClientModels.User { public class UsersIds { diff --git a/PrivaPub.ClientModels/User/ViewAvatarServer.cs b/PrivaPub.ClientModels/User/ViewAvatarServer.cs new file mode 100644 index 0000000..5258f8d --- /dev/null +++ b/PrivaPub.ClientModels/User/ViewAvatarServer.cs @@ -0,0 +1,12 @@ +namespace PrivaPub.ClientModels.User +{ + public enum ViewAvatarServer + { + Unknown, + Pleroma, + Mastodon, + Akkoma, + Misskey, + PrivaPub + } +} \ No newline at end of file diff --git a/PrivaPub.ClientModels/User/ViewAvatarState.cs b/PrivaPub.ClientModels/User/ViewAvatarState.cs new file mode 100644 index 0000000..6c96050 --- /dev/null +++ b/PrivaPub.ClientModels/User/ViewAvatarState.cs @@ -0,0 +1,11 @@ +namespace PrivaPub.ClientModels.User +{ + public enum ViewAvatarState + { + Normal, + Silenced, + Suspended, + Banned, + Deleted + } +} diff --git a/SocialPub.ClientModels/ValidatorAttributes/NoWhiteSpacesAttribute.cs b/PrivaPub.ClientModels/ValidatorAttributes/NoWhiteSpacesAttribute.cs similarity index 91% rename from SocialPub.ClientModels/ValidatorAttributes/NoWhiteSpacesAttribute.cs rename to PrivaPub.ClientModels/ValidatorAttributes/NoWhiteSpacesAttribute.cs index 7dfa2aa..ac1d7ce 100644 --- a/SocialPub.ClientModels/ValidatorAttributes/NoWhiteSpacesAttribute.cs +++ b/PrivaPub.ClientModels/ValidatorAttributes/NoWhiteSpacesAttribute.cs @@ -1,8 +1,8 @@ -using SocialPub.ClientModels.Resources; +using PrivaPub.ClientModels.Resources; using System.ComponentModel.DataAnnotations; -namespace SocialPub.ClientModels.ValidatorAttributes +namespace PrivaPub.ClientModels.ValidatorAttributes { [AttributeUsage(AttributeTargets.Property)] public class NoWhiteSpacesAttribute : ValidationAttribute diff --git a/SocialPub.ClientModels/WebResult.cs b/PrivaPub.ClientModels/WebResult.cs similarity index 97% rename from SocialPub.ClientModels/WebResult.cs rename to PrivaPub.ClientModels/WebResult.cs index 86a35b2..13d9fd7 100644 --- a/SocialPub.ClientModels/WebResult.cs +++ b/PrivaPub.ClientModels/WebResult.cs @@ -1,7 +1,7 @@ using System.Net; using System.Text.Json.Serialization; -namespace SocialPub.ClientModels +namespace PrivaPub.ClientModels { public class WebResult { diff --git a/SocialPub.sln b/PrivaPub.sln similarity index 80% rename from SocialPub.sln rename to PrivaPub.sln index aa63329..d71a0c8 100644 --- a/SocialPub.sln +++ b/PrivaPub.sln @@ -3,9 +3,9 @@ Microsoft Visual Studio Solution File, Format Version 12.00 # Visual Studio Version 17 VisualStudioVersion = 17.4.33122.133 MinimumVisualStudioVersion = 10.0.40219.1 -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SocialPub", "SocialPub\SocialPub.csproj", "{EB2A0BD2-0150-405A-939E-5B0F6F642539}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "PrivaPub", "PrivaPub\PrivaPub.csproj", "{EB2A0BD2-0150-405A-939E-5B0F6F642539}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SocialPub.ClientModels", "SocialPub.ClientModels\SocialPub.ClientModels.csproj", "{5E63C68C-0E60-4418-A53A-FF4EF0007080}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "PrivaPub.ClientModels", "PrivaPub.ClientModels\PrivaPub.ClientModels.csproj", "{5E63C68C-0E60-4418-A53A-FF4EF0007080}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution diff --git a/SocialPub/Controllers/ClientToServer/AdminController.cs b/PrivaPub/Controllers/ClientToServer/AdminController.cs similarity index 92% rename from SocialPub/Controllers/ClientToServer/AdminController.cs rename to PrivaPub/Controllers/ClientToServer/AdminController.cs index b6b48a4..76770b6 100644 --- a/SocialPub/Controllers/ClientToServer/AdminController.cs +++ b/PrivaPub/Controllers/ClientToServer/AdminController.cs @@ -2,25 +2,25 @@ using Microsoft.AspNetCore.Mvc; using Microsoft.Extensions.Localization; -using SocialPub.ClientModels; -using SocialPub.ClientModels.User; -using SocialPub.Extensions; -using SocialPub.Resources; -using SocialPub.Services; +using PrivaPub.ClientModels; +using PrivaPub.ClientModels.User; +using PrivaPub.Extensions; +using PrivaPub.Resources; +using PrivaPub.Services; using System.ComponentModel.DataAnnotations; -namespace SocialPub.Controllers.ClientToServer +namespace PrivaPub.Controllers.ClientToServer { [ApiController, Route("clientapi/admin")] public class AdminController : ControllerBase { readonly IRootUsersService RootUsersService; - readonly ILogger Logger; + readonly ILogger Logger; readonly IStringLocalizer Localizer; - public AdminController(ILogger logger, + public AdminController(ILogger logger, IStringLocalizer localizer, IRootUsersService rootUsersService) { diff --git a/SocialPub/Controllers/ClientToServer/DataController.cs b/PrivaPub/Controllers/ClientToServer/DataController.cs similarity index 88% rename from SocialPub/Controllers/ClientToServer/DataController.cs rename to PrivaPub/Controllers/ClientToServer/DataController.cs index 4aef4fc..a1501e8 100644 --- a/SocialPub/Controllers/ClientToServer/DataController.cs +++ b/PrivaPub/Controllers/ClientToServer/DataController.cs @@ -1,11 +1,11 @@ using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Mvc; -using SocialPub.ClientModels; -using SocialPub.ClientModels.Data; -using SocialPub.Services.ClientToServer.Public; +using PrivaPub.ClientModels; +using PrivaPub.ClientModels.Data; +using PrivaPub.Services.ClientToServer.Public; -namespace SocialPub.Controllers.ClientToServer +namespace PrivaPub.Controllers.ClientToServer { [ApiController, Route("clientapi/data")] @@ -41,7 +41,7 @@ namespace SocialPub.Controllers.ClientToServer { Name = l.NativeName, International2Code = l.International2Code - }).ToList()); + }).ToArray()); return Ok(viewLanguages); } diff --git a/SocialPub/Controllers/ClientToServer/ModeratorController.cs b/PrivaPub/Controllers/ClientToServer/ModeratorController.cs similarity index 75% rename from SocialPub/Controllers/ClientToServer/ModeratorController.cs rename to PrivaPub/Controllers/ClientToServer/ModeratorController.cs index 95f55b5..f06575f 100644 --- a/SocialPub/Controllers/ClientToServer/ModeratorController.cs +++ b/PrivaPub/Controllers/ClientToServer/ModeratorController.cs @@ -1,6 +1,6 @@ using Microsoft.AspNetCore.Mvc; -namespace SocialPub.Controllers.ClientToServer +namespace PrivaPub.Controllers.ClientToServer { [ApiController, Route("clientapi/moderator")] diff --git a/PrivaPub/Controllers/ClientToServer/PrivateAvatarController.cs b/PrivaPub/Controllers/ClientToServer/PrivateAvatarController.cs new file mode 100644 index 0000000..4c75acd --- /dev/null +++ b/PrivaPub/Controllers/ClientToServer/PrivateAvatarController.cs @@ -0,0 +1,75 @@ +using Microsoft.AspNetCore.Authorization; +using Microsoft.AspNetCore.Mvc; +using Microsoft.Extensions.Localization; +using PrivaPub.ClientModels; +using PrivaPub.Extensions; +using PrivaPub.Resources; +using PrivaPub.Services.ClientToServer.Private; +using PrivaPub.ClientModels.User.Avatar; + +namespace PrivaPub.Controllers.ClientToServer +{ + [ApiController, + Route("clientapi/avatar/private"), + Authorize(Policy = Policies.IsUser)] + public class PrivateAvatarController : ControllerBase + { + readonly ILogger _logger; + readonly IPrivateAvatarUsersService _privateAvatarUsersService; + readonly IStringLocalizer _localizer; + + public PrivateAvatarController(IPrivateAvatarUsersService privateAvatarUsersService, + IStringLocalizer localizer, + ILogger logger) + { + _privateAvatarUsersService = privateAvatarUsersService; + _localizer = localizer; + _logger = logger; + } + + [HttpPost, Route("/clientapi/avatar/private/insert")] + public async Task InsertAvatar(InsertAvatarForm model) + { + var result = new WebResult(); + if (!ModelState.IsValid) + return BadRequest(result.Invalidate(_localizer["Invalid model."])); + try + { + model.RootId = User.GetUserId(); + result = await _privateAvatarUsersService.InsertAvatar(model); + if (!result.IsValid) + return StatusCode(result.StatusCode, result); + + return Ok(result.Data); + } + catch (Exception ex) + { + _logger.LogError(ex, $"{nameof(PrivateAvatarController)}.{nameof(InsertAvatar)}()"); + return BadRequest(result.Invalidate(ex.Message)); + } + } + + [HttpPost, Route("/clientapi/avatar/private/update")] + public async Task UpdateAvatar(UpdateAvatarForm model) + { + var result = new WebResult(); + if (!ModelState.IsValid) + return BadRequest(result.Invalidate(_localizer["Invalid model."])); + try + { + model.RootId = User.GetUserId(); + result = await _privateAvatarUsersService.UpdateAvatar(model); + if (!result.IsValid) + return StatusCode(result.StatusCode, result); + + return Ok(result.Data); + } + catch (Exception ex) + { + _logger.LogError(ex, $"{nameof(PrivateAvatarController)}.{nameof(UpdateAvatar)}()"); + return BadRequest(result.Invalidate(ex.Message)); + } + } + + } +} diff --git a/SocialPub/Controllers/ClientToServer/UserController.cs b/PrivaPub/Controllers/ClientToServer/RootUserController.cs similarity index 94% rename from SocialPub/Controllers/ClientToServer/UserController.cs rename to PrivaPub/Controllers/ClientToServer/RootUserController.cs index 09ed4ea..ba8112b 100644 --- a/SocialPub/Controllers/ClientToServer/UserController.cs +++ b/PrivaPub/Controllers/ClientToServer/RootUserController.cs @@ -3,32 +3,32 @@ using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Mvc; using Microsoft.Extensions.Localization; -using SocialPub.ClientModels; -using SocialPub.ClientModels.Resources; -using SocialPub.ClientModels.User; -using SocialPub.Extensions; -using SocialPub.Models.User; -using SocialPub.Resources; -using SocialPub.Services; -using SocialPub.StaticServices; +using PrivaPub.ClientModels; +using PrivaPub.ClientModels.Resources; +using PrivaPub.ClientModels.User; +using PrivaPub.Extensions; +using PrivaPub.Models.User; +using PrivaPub.Resources; +using PrivaPub.Services; +using PrivaPub.StaticServices; using System.ComponentModel.DataAnnotations; -namespace SocialPub.Controllers.ClientToServer +namespace PrivaPub.Controllers.ClientToServer { [ApiController, Route("clientapi/user")] - public class UserController : ControllerBase + public class RootUserController : ControllerBase { readonly IRootUsersService UsersService; readonly AuthTokenManager AuthTokenManager; - readonly ILogger Logger; + readonly ILogger Logger; readonly IStringLocalizer Localizer; - public UserController(IRootUsersService usersService, + public RootUserController(IRootUsersService usersService, AuthTokenManager authTokenManager, IStringLocalizer localizer, - ILogger logger) + ILogger logger) { UsersService = usersService; AuthTokenManager = authTokenManager; @@ -51,7 +51,7 @@ namespace SocialPub.Controllers.ClientToServer if (!result.IsValid) return StatusCode(result.StatusCode, result); - (var user, var userSettings) = ((RootUser, ViewUserSettings))result.Data; + (var user, var userSettings) = ((RootUser, ViewAvatarServer))result.Data; var jwtUser = AuthTokenManager.GenerateToken(user, userSettings); Logger.LogInformation( $"{nameof(SignUp)}();IP:[{HttpContext.Connection?.RemoteIpAddress}];\nUser-Agent:[{Request.Headers["User-Agent"]}];\nUserId:[{user.ID}]"); @@ -78,7 +78,7 @@ namespace SocialPub.Controllers.ClientToServer return StatusCode(result.StatusCode, result); var (user, userSettings) = - ((RootUser, ViewUserSettings))result.Data; + ((RootUser, ViewAvatarServer))result.Data; var jwtUser = AuthTokenManager.GenerateToken(user, userSettings); Logger.LogInformation( $"{nameof(Login)}();IP:[{HttpContext.Connection?.RemoteIpAddress}];\nUser-Agent:[{Request.Headers["User-Agent"]}];\nUserId:[{user.ID}]"); @@ -223,7 +223,7 @@ namespace SocialPub.Controllers.ClientToServer } [HttpPost, Route("/clientapi/user/update/settings"), Authorize(Policy = Policies.IsUser)] - public async Task UpdateUserSettings(ViewUserSettings userSettings) + public async Task UpdateUserSettings(ViewAvatarServer userSettings) { var result = new WebResult(); if (!ModelState.IsValid) diff --git a/SocialPub/Controllers/ServerToServer/PeasantsController.cs b/PrivaPub/Controllers/ServerToServer/PeasantsController.cs similarity index 93% rename from SocialPub/Controllers/ServerToServer/PeasantsController.cs rename to PrivaPub/Controllers/ServerToServer/PeasantsController.cs index 6902794..5a20f55 100644 --- a/SocialPub/Controllers/ServerToServer/PeasantsController.cs +++ b/PrivaPub/Controllers/ServerToServer/PeasantsController.cs @@ -2,16 +2,16 @@ using Microsoft.AspNetCore.Mvc; -using SocialPub.ClientModels.Resources; -using SocialPub.Extensions; -using SocialPub.Models.ActivityPub; -using SocialPub.Models.Group; -using SocialPub.Services; +using PrivaPub.ClientModels.Resources; +using PrivaPub.Extensions; +using PrivaPub.Models.ActivityPub; +using PrivaPub.Models.Group; +using PrivaPub.Services; using System.ComponentModel.DataAnnotations; using System.Text.Json; -namespace SocialPub.Controllers.ServerToServer +namespace PrivaPub.Controllers.ServerToServer { [ApiController, Route("peasants"), Produces("application/ld+json; profile=\"https://www.w3.org/ns/activitystreams\"; charset=utf-8")] diff --git a/SocialPub/Controllers/ServerToServer/UsersController.cs b/PrivaPub/Controllers/ServerToServer/UsersController.cs similarity index 90% rename from SocialPub/Controllers/ServerToServer/UsersController.cs rename to PrivaPub/Controllers/ServerToServer/UsersController.cs index d17c898..f0c68bf 100644 --- a/SocialPub/Controllers/ServerToServer/UsersController.cs +++ b/PrivaPub/Controllers/ServerToServer/UsersController.cs @@ -1,15 +1,15 @@ using Markdig; using Microsoft.AspNetCore.Mvc; -using SocialPub.ClientModels.Resources; -using SocialPub.Extensions; -using SocialPub.Models.ActivityPub; -using SocialPub.Models.Group; -using SocialPub.Services; +using PrivaPub.ClientModels.Resources; +using PrivaPub.Extensions; +using PrivaPub.Models.ActivityPub; +using PrivaPub.Models.Group; +using PrivaPub.Services; using System.ComponentModel.DataAnnotations; -namespace SocialPub.Controllers.ServerToServer +namespace PrivaPub.Controllers.ServerToServer { [ApiController, Route("users"), Produces("application/ld+json; profile=\"https://www.w3.org/ns/activitystreams\"; charset=utf-8")] diff --git a/SocialPub/Data/InitDb.cs b/PrivaPub/Data/InitDb.cs similarity index 98% rename from SocialPub/Data/InitDb.cs rename to PrivaPub/Data/InitDb.cs index 82be60d..f728253 100644 --- a/SocialPub/Data/InitDb.cs +++ b/PrivaPub/Data/InitDb.cs @@ -1,12 +1,12 @@ using MongoDB.Entities; -using SocialPub.Models.Data; -using SocialPub.StaticServices; +using PrivaPub.Models.Data; +using PrivaPub.StaticServices; using System.Text; using System.Text.Json; -namespace SocialPub.Data +namespace PrivaPub.Data { public static class InitDb { diff --git a/SocialPub/Data/LanguagesRow.cs b/PrivaPub/Data/LanguagesRow.cs similarity index 85% rename from SocialPub/Data/LanguagesRow.cs rename to PrivaPub/Data/LanguagesRow.cs index b1a70ee..a5c5840 100644 --- a/SocialPub/Data/LanguagesRow.cs +++ b/PrivaPub/Data/LanguagesRow.cs @@ -1,4 +1,4 @@ -namespace SocialPub.Data +namespace PrivaPub.Data { public class LanguagesRow { diff --git a/SocialPub/Data/languagesNative.json b/PrivaPub/Data/languagesNative.json similarity index 100% rename from SocialPub/Data/languagesNative.json rename to PrivaPub/Data/languagesNative.json diff --git a/SocialPub/Extensions/AddAuthExtension.cs b/PrivaPub/Extensions/AddAuthExtension.cs similarity index 80% rename from SocialPub/Extensions/AddAuthExtension.cs rename to PrivaPub/Extensions/AddAuthExtension.cs index 2a3e4f1..c285d91 100644 --- a/SocialPub/Extensions/AddAuthExtension.cs +++ b/PrivaPub/Extensions/AddAuthExtension.cs @@ -1,15 +1,15 @@ using Microsoft.AspNetCore.Authentication; using Microsoft.IdentityModel.Tokens; -using SocialPub.Services; +using PrivaPub.Services; using System.Text; -namespace SocialPub.Extensions +namespace PrivaPub.Extensions { public static class AddAuthExtension { - public static AuthenticationBuilder AddSocialPubAuth(this AuthenticationBuilder builder, IConfiguration configuration) + public static AuthenticationBuilder AddPrivaPubAuth(this AuthenticationBuilder builder, IConfiguration configuration) { builder.AddJwtBearer(options => { #if DEBUG diff --git a/SocialPub/Extensions/Extensions.cs b/PrivaPub/Extensions/Extensions.cs similarity index 97% rename from SocialPub/Extensions/Extensions.cs rename to PrivaPub/Extensions/Extensions.cs index eaec1fe..b59d221 100644 --- a/SocialPub/Extensions/Extensions.cs +++ b/PrivaPub/Extensions/Extensions.cs @@ -7,14 +7,14 @@ using Org.BouncyCastle.Crypto; using Org.BouncyCastle.Security; using Org.BouncyCastle.X509; -using SocialPub.ClientModels; +using PrivaPub.ClientModels; using System.Security.Cryptography.X509Certificates; using Org.BouncyCastle.Math; -using SocialPub.Models.User; +using PrivaPub.Models.User; using System.Security.Claims; -namespace SocialPub.Extensions +namespace PrivaPub.Extensions { public static class Extensions { diff --git a/SocialPub/Extensions/OperationCancelledExceptionFilter.cs b/PrivaPub/Extensions/OperationCancelledExceptionFilter.cs similarity index 95% rename from SocialPub/Extensions/OperationCancelledExceptionFilter.cs rename to PrivaPub/Extensions/OperationCancelledExceptionFilter.cs index 63c6819..6a4dd71 100644 --- a/SocialPub/Extensions/OperationCancelledExceptionFilter.cs +++ b/PrivaPub/Extensions/OperationCancelledExceptionFilter.cs @@ -2,7 +2,7 @@ using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Mvc.Filters; -namespace SocialPub.Extensions +namespace PrivaPub.Extensions { public class OperationCancelledExceptionFilter : ExceptionFilterAttribute { diff --git a/SocialPub/Extensions/StringExtensions.cs b/PrivaPub/Extensions/StringExtensions.cs similarity index 94% rename from SocialPub/Extensions/StringExtensions.cs rename to PrivaPub/Extensions/StringExtensions.cs index 6c29953..eb26015 100644 --- a/SocialPub/Extensions/StringExtensions.cs +++ b/PrivaPub/Extensions/StringExtensions.cs @@ -1,8 +1,8 @@ -using SocialPub.ClientModels; +using PrivaPub.ClientModels; using System.Security.Claims; -namespace SocialPub.Extensions +namespace PrivaPub.Extensions { public static class StringExtensions { diff --git a/SocialPub/Middleware/SocialPubConfigurations.cs b/PrivaPub/Middleware/SocialPubConfigurations.cs similarity index 77% rename from SocialPub/Middleware/SocialPubConfigurations.cs rename to PrivaPub/Middleware/SocialPubConfigurations.cs index 63ec83f..fb4a9c1 100644 --- a/SocialPub/Middleware/SocialPubConfigurations.cs +++ b/PrivaPub/Middleware/SocialPubConfigurations.cs @@ -1,52 +1,45 @@ using Microsoft.AspNetCore.Authentication.JwtBearer; using Microsoft.AspNetCore.ResponseCompression; -using SocialPub.ClientModels; -using SocialPub.Extensions; -using SocialPub.Models; -using SocialPub.Services; -using SocialPub.StaticServices; -using NSign.AspNetCore; +using PrivaPub.ClientModels; +using PrivaPub.Extensions; +using PrivaPub.Models; +using PrivaPub.Services; +using PrivaPub.StaticServices; using System.Text.Json.Serialization; using NSign.Providers; using NSign; -using System.Security.Cryptography.X509Certificates; using NSign.Signatures; -using System.Net.Http.Headers; -using Microsoft.Extensions.DependencyInjection; -using System.Security.Claims; -using Microsoft.Extensions.Caching.Memory; using NSign.Client; -using static NSign.Constants; using System.Text; using Microsoft.OpenApi.Models; -using SocialPub.Services.ClientToServer.Public; +using PrivaPub.Services.ClientToServer.Public; -namespace SocialPub.Middleware +namespace PrivaPub.Middleware { - public static class SocialPubConfigurations + public static class PrivaPubConfigurations { - public static IServiceCollection socialPubAppSettingsConfiguration(this IServiceCollection service, IConfiguration configuration) + public static IServiceCollection PrivaPubAppSettingsConfiguration(this IServiceCollection service, IConfiguration configuration) { return service .Configure(configuration.GetSection(nameof(MongoSettings))) .Configure(configuration.GetSection(nameof(AppConfiguration))); } - public static IServiceCollection socialPubWorkersConfiguration(this IServiceCollection service) + public static IServiceCollection PrivaPubWorkersConfiguration(this IServiceCollection service) { return service; //.AddHostedService() //.AddHostedService() //.AddHostedService(); } - public static IServiceCollection socialPubHTTPSignature(this IServiceCollection service, IConfiguration configuration) + public static IServiceCollection PrivaPubHTTPSignature(this IServiceCollection service, IConfiguration configuration) { //HTTP CLIENT service.Configure(options => options.WithHash(AddDigestOptions.Hash.Sha256)) .ConfigureMessageSigningOptions(options => { - options.SignatureName = "SocialPub"; + options.SignatureName = "PrivaPub"; options .WithMandatoryComponent(SignatureComponent.Path) .WithMandatoryComponent(SignatureComponent.RequestTarget) @@ -84,7 +77,7 @@ namespace SocialPub.Middleware // //httpContextAccessor.HttpContext.Request. - // var cert = memoryCache.GetOrCreate("SocialPub", (cacheEntry) => Extensions.Extensions.GetX509Certificate2("socialPubCert")); + // var cert = memoryCache.GetOrCreate("PrivaPub", (cacheEntry) => Extensions.Extensions.GetX509Certificate2("PrivaPubCert")); // return new RsaPkcs15Sha256SignatureProvider(cert, "anon"); //}) //.ConfigureMessageSigningOptions(options => @@ -109,7 +102,7 @@ namespace SocialPub.Middleware // new X509Certificate2(@"path\to\certificate.pfx", "PasswordForPfx"), // "my-cert")); } - public static IServiceCollection socialPubAuthServicesConfiguration(this IServiceCollection service, IConfiguration configuration) + public static IServiceCollection PrivaPubAuthServicesConfiguration(this IServiceCollection service, IConfiguration configuration) { return service .AddAuthorization(options => @@ -124,19 +117,19 @@ namespace SocialPub.Middleware options.DefaultChallengeScheme = JwtBearerDefaults.AuthenticationScheme; options.DefaultScheme = JwtBearerDefaults.AuthenticationScheme; }) - .AddSocialPubAuth(configuration) + .AddPrivaPubAuth(configuration) .Services .AddSingleton() .AddSingleton(); } - public static IServiceCollection socialPubInternalizationConfiguration(this IServiceCollection service, IConfiguration configuration) + public static IServiceCollection PrivaPubInternalizationConfiguration(this IServiceCollection service, IConfiguration configuration) { return service .AddLocalization() .AddSingleton(); } - public static IServiceCollection socialPubOptimizationConfiguration(this IServiceCollection service) + public static IServiceCollection PrivaPubOptimizationConfiguration(this IServiceCollection service) { return service.AddResponseCompression(opts => { @@ -145,24 +138,24 @@ namespace SocialPub.Middleware }); } - public static IServiceCollection socialPubDataBaseConfiguration(this IServiceCollection service) + public static IServiceCollection PrivaPubDataBaseConfiguration(this IServiceCollection service) { return service.AddSingleton(); } - public static IServiceCollection socialPubServicesConfiguration(this IServiceCollection service) + public static IServiceCollection PrivaPubServicesConfiguration(this IServiceCollection service) { return service .AddTransient() .AddTransient() - .AddTransient() + .AddTransient() .AddSingleton() .AddHttpContextAccessor() .AddMemoryCache() .AddSingleton(); } - public static IServiceCollection socialPubMiddlewareConfiguration(this IServiceCollection service) + public static IServiceCollection PrivaPubMiddlewareConfiguration(this IServiceCollection service) { return service .AddEndpointsApiExplorer() @@ -203,7 +196,7 @@ namespace SocialPub.Middleware }).Services; } - public static IServiceCollection socialPubCORSConfiguration(this IServiceCollection service) + public static IServiceCollection PrivaPubCORSConfiguration(this IServiceCollection service) { return service.AddCors(options => { diff --git a/SocialPub/Models/ActivityPub/ActivityPubActivity.cs b/PrivaPub/Models/ActivityPub/ActivityPubActivity.cs similarity index 92% rename from SocialPub/Models/ActivityPub/ActivityPubActivity.cs rename to PrivaPub/Models/ActivityPub/ActivityPubActivity.cs index c187119..5e1d7a0 100644 --- a/SocialPub/Models/ActivityPub/ActivityPubActivity.cs +++ b/PrivaPub/Models/ActivityPub/ActivityPubActivity.cs @@ -1,8 +1,8 @@ -using SocialPub.Models.ActivityPub.Extra; +using PrivaPub.Models.ActivityPub.Extra; using System.Text.Json.Serialization; -namespace SocialPub.Models.ActivityPub +namespace PrivaPub.Models.ActivityPub { [JsonSerializable(typeof(ActivityPubActivity))] public class ActivityPubActivity : ActivityPubObject diff --git a/SocialPub/Models/ActivityPub/ActivityPubActor.cs b/PrivaPub/Models/ActivityPub/ActivityPubActor.cs similarity index 90% rename from SocialPub/Models/ActivityPub/ActivityPubActor.cs rename to PrivaPub/Models/ActivityPub/ActivityPubActor.cs index 1fd7008..493a8e0 100644 --- a/SocialPub/Models/ActivityPub/ActivityPubActor.cs +++ b/PrivaPub/Models/ActivityPub/ActivityPubActor.cs @@ -1,8 +1,8 @@ -using SocialPub.Models.ActivityPub.Extra; +using PrivaPub.Models.ActivityPub.Extra; using System.Text.Json.Serialization; -namespace SocialPub.Models.ActivityPub +namespace PrivaPub.Models.ActivityPub { [JsonSerializable(typeof(ActivityPubActor))] public class ActivityPubActor : ActivityPubObject @@ -34,10 +34,10 @@ namespace SocialPub.Models.ActivityPub public bool Discoverable { get; set; } = true; [JsonPropertyName("publicKey")] - public ActivityPubPublicKey PublicKey { get; set; } + public ActivityPubPublicKey PublicKey { get; set; } = new(); [JsonPropertyName("endpoints")] - public ActivityPubActorEndpoints Endpoints { get; set; } + public ActivityPubActorEndpoints Endpoints { get; set; } = new(); [JsonPropertyName("attachment")] public IEnumerable Attachment { get; set; } = Enumerable.Empty(); diff --git a/SocialPub/Models/ActivityPub/ActivityPubCollection.cs b/PrivaPub/Models/ActivityPub/ActivityPubCollection.cs similarity index 94% rename from SocialPub/Models/ActivityPub/ActivityPubCollection.cs rename to PrivaPub/Models/ActivityPub/ActivityPubCollection.cs index 8ca7496..1fedbe2 100644 --- a/SocialPub/Models/ActivityPub/ActivityPubCollection.cs +++ b/PrivaPub/Models/ActivityPub/ActivityPubCollection.cs @@ -1,6 +1,6 @@ using System.Text.Json.Serialization; -namespace SocialPub.Models.ActivityPub +namespace PrivaPub.Models.ActivityPub { [JsonSerializable(typeof(ActivityPubCollection))] public class ActivityPubCollection : ActivityPubObject diff --git a/SocialPub/Models/ActivityPub/ActivityPubCollectionPage.cs b/PrivaPub/Models/ActivityPub/ActivityPubCollectionPage.cs similarity index 92% rename from SocialPub/Models/ActivityPub/ActivityPubCollectionPage.cs rename to PrivaPub/Models/ActivityPub/ActivityPubCollectionPage.cs index 477c67e..0addbaa 100644 --- a/SocialPub/Models/ActivityPub/ActivityPubCollectionPage.cs +++ b/PrivaPub/Models/ActivityPub/ActivityPubCollectionPage.cs @@ -1,6 +1,6 @@ using System.Text.Json.Serialization; -namespace SocialPub.Models.ActivityPub +namespace PrivaPub.Models.ActivityPub { [JsonSerializable(typeof(ActivityPubCollectionPage))] public class ActivityPubCollectionPage : ActivityPubCollection diff --git a/SocialPub/Models/ActivityPub/ActivityPubLink.cs b/PrivaPub/Models/ActivityPub/ActivityPubLink.cs similarity index 94% rename from SocialPub/Models/ActivityPub/ActivityPubLink.cs rename to PrivaPub/Models/ActivityPub/ActivityPubLink.cs index f65245c..458c722 100644 --- a/SocialPub/Models/ActivityPub/ActivityPubLink.cs +++ b/PrivaPub/Models/ActivityPub/ActivityPubLink.cs @@ -1,6 +1,6 @@ using System.Text.Json.Serialization; -namespace SocialPub.Models.ActivityPub +namespace PrivaPub.Models.ActivityPub { [JsonSerializable(typeof(ActivityPubLink))] public class ActivityPubLink : ActivityPubObject diff --git a/SocialPub/Models/ActivityPub/ActivityPubObject.cs b/PrivaPub/Models/ActivityPub/ActivityPubObject.cs similarity index 97% rename from SocialPub/Models/ActivityPub/ActivityPubObject.cs rename to PrivaPub/Models/ActivityPub/ActivityPubObject.cs index f6c0cd6..583195f 100644 --- a/SocialPub/Models/ActivityPub/ActivityPubObject.cs +++ b/PrivaPub/Models/ActivityPub/ActivityPubObject.cs @@ -1,8 +1,8 @@ -using SocialPub.Models.ActivityPub.Extra; +using PrivaPub.Models.ActivityPub.Extra; using System.Text.Json.Serialization; -namespace SocialPub.Models.ActivityPub +namespace PrivaPub.Models.ActivityPub { [JsonSerializable(typeof(ActivityPubObject))] public partial class ActivityPubObject diff --git a/SocialPub/Models/ActivityPub/ActivityPubOrderedCollection.cs b/PrivaPub/Models/ActivityPub/ActivityPubOrderedCollection.cs similarity index 92% rename from SocialPub/Models/ActivityPub/ActivityPubOrderedCollection.cs rename to PrivaPub/Models/ActivityPub/ActivityPubOrderedCollection.cs index 77f959d..49332c7 100644 --- a/SocialPub/Models/ActivityPub/ActivityPubOrderedCollection.cs +++ b/PrivaPub/Models/ActivityPub/ActivityPubOrderedCollection.cs @@ -1,6 +1,6 @@ using System.Text.Json.Serialization; -namespace SocialPub.Models.ActivityPub +namespace PrivaPub.Models.ActivityPub { [JsonSerializable(typeof(ActivityPubOrderedCollection))] public class ActivityPubOrderedCollection : ActivityPubCollection diff --git a/SocialPub/Models/ActivityPub/ActivityPubOrderedCollectionPage.cs b/PrivaPub/Models/ActivityPub/ActivityPubOrderedCollectionPage.cs similarity index 95% rename from SocialPub/Models/ActivityPub/ActivityPubOrderedCollectionPage.cs rename to PrivaPub/Models/ActivityPub/ActivityPubOrderedCollectionPage.cs index 60a1981..e517aee 100644 --- a/SocialPub/Models/ActivityPub/ActivityPubOrderedCollectionPage.cs +++ b/PrivaPub/Models/ActivityPub/ActivityPubOrderedCollectionPage.cs @@ -1,6 +1,6 @@ using System.Text.Json.Serialization; -namespace SocialPub.Models.ActivityPub +namespace PrivaPub.Models.ActivityPub { [JsonSerializable(typeof(ActivityPubOrderedCollectionPage))] public class ActivityPubOrderedCollectionPage : ActivityPubCollection diff --git a/SocialPub/Models/ActivityPub/ActivityPubTombstone.cs b/PrivaPub/Models/ActivityPub/ActivityPubTombstone.cs similarity index 90% rename from SocialPub/Models/ActivityPub/ActivityPubTombstone.cs rename to PrivaPub/Models/ActivityPub/ActivityPubTombstone.cs index 5235fb0..2d7c1e9 100644 --- a/SocialPub/Models/ActivityPub/ActivityPubTombstone.cs +++ b/PrivaPub/Models/ActivityPub/ActivityPubTombstone.cs @@ -1,6 +1,6 @@ using System.Text.Json.Serialization; -namespace SocialPub.Models.ActivityPub +namespace PrivaPub.Models.ActivityPub { [JsonSerializable(typeof(ActivityPubTombstone))] public class ActivityPubTombstone : ActivityPubObject diff --git a/SocialPub/Models/ActivityPub/Extra/ActivityPubAudience.cs b/PrivaPub/Models/ActivityPub/Extra/ActivityPubAudience.cs similarity index 85% rename from SocialPub/Models/ActivityPub/Extra/ActivityPubAudience.cs rename to PrivaPub/Models/ActivityPub/Extra/ActivityPubAudience.cs index eefd7e4..6ff6e32 100644 --- a/SocialPub/Models/ActivityPub/Extra/ActivityPubAudience.cs +++ b/PrivaPub/Models/ActivityPub/Extra/ActivityPubAudience.cs @@ -1,6 +1,6 @@ using System.Text.Json.Serialization; -namespace SocialPub.Models.ActivityPub.Extra +namespace PrivaPub.Models.ActivityPub.Extra { [JsonSerializable(typeof(ActivityPubPublicKey))] public class ActivityPubAudience diff --git a/SocialPub/Models/ActivityPub/Extra/ActivityPubIcon.cs b/PrivaPub/Models/ActivityPub/Extra/ActivityPubIcon.cs similarity index 90% rename from SocialPub/Models/ActivityPub/Extra/ActivityPubIcon.cs rename to PrivaPub/Models/ActivityPub/Extra/ActivityPubIcon.cs index 2e9c4f5..518bb66 100644 --- a/SocialPub/Models/ActivityPub/Extra/ActivityPubIcon.cs +++ b/PrivaPub/Models/ActivityPub/Extra/ActivityPubIcon.cs @@ -1,6 +1,6 @@ using System.Text.Json.Serialization; -namespace SocialPub.Models.ActivityPub.Extra +namespace PrivaPub.Models.ActivityPub.Extra { [JsonSerializable(typeof(ActivityPubPublicKey))] public class ActivityPubIcon diff --git a/SocialPub/Models/ActivityPub/Extra/ActivityPubInstrument.cs b/PrivaPub/Models/ActivityPub/Extra/ActivityPubInstrument.cs similarity index 85% rename from SocialPub/Models/ActivityPub/Extra/ActivityPubInstrument.cs rename to PrivaPub/Models/ActivityPub/Extra/ActivityPubInstrument.cs index 22584bf..59e4339 100644 --- a/SocialPub/Models/ActivityPub/Extra/ActivityPubInstrument.cs +++ b/PrivaPub/Models/ActivityPub/Extra/ActivityPubInstrument.cs @@ -1,6 +1,6 @@ using System.Text.Json.Serialization; -namespace SocialPub.Models.ActivityPub.Extra +namespace PrivaPub.Models.ActivityPub.Extra { [JsonSerializable(typeof(ActivityPubPublicKey))] public class ActivityPubInstrument diff --git a/SocialPub/Models/ActivityPub/Extra/ActivityPubOrigin.cs b/PrivaPub/Models/ActivityPub/Extra/ActivityPubOrigin.cs similarity index 85% rename from SocialPub/Models/ActivityPub/Extra/ActivityPubOrigin.cs rename to PrivaPub/Models/ActivityPub/Extra/ActivityPubOrigin.cs index ecb4b4c..cf71a12 100644 --- a/SocialPub/Models/ActivityPub/Extra/ActivityPubOrigin.cs +++ b/PrivaPub/Models/ActivityPub/Extra/ActivityPubOrigin.cs @@ -1,6 +1,6 @@ using System.Text.Json.Serialization; -namespace SocialPub.Models.ActivityPub.Extra +namespace PrivaPub.Models.ActivityPub.Extra { [JsonSerializable(typeof(ActivityPubPublicKey))] public class ActivityPubOrigin diff --git a/SocialPub/Models/ActivityPub/Extra/ActivityPubResult.cs b/PrivaPub/Models/ActivityPub/Extra/ActivityPubResult.cs similarity index 85% rename from SocialPub/Models/ActivityPub/Extra/ActivityPubResult.cs rename to PrivaPub/Models/ActivityPub/Extra/ActivityPubResult.cs index 50ebb17..85bc9e2 100644 --- a/SocialPub/Models/ActivityPub/Extra/ActivityPubResult.cs +++ b/PrivaPub/Models/ActivityPub/Extra/ActivityPubResult.cs @@ -1,6 +1,6 @@ using System.Text.Json.Serialization; -namespace SocialPub.Models.ActivityPub.Extra +namespace PrivaPub.Models.ActivityPub.Extra { [JsonSerializable(typeof(ActivityPubPublicKey))] public class ActivityPubResult diff --git a/SocialPub/Models/ActivityPub/MacroType.cs b/PrivaPub/Models/ActivityPub/MacroType.cs similarity index 79% rename from SocialPub/Models/ActivityPub/MacroType.cs rename to PrivaPub/Models/ActivityPub/MacroType.cs index 7e1d356..ad0083f 100644 --- a/SocialPub/Models/ActivityPub/MacroType.cs +++ b/PrivaPub/Models/ActivityPub/MacroType.cs @@ -1,4 +1,4 @@ -namespace SocialPub.Models.ActivityPub +namespace PrivaPub.Models.ActivityPub { public enum MacroType { diff --git a/SocialPub/Models/ActivityPub/ObjectType.cs b/PrivaPub/Models/ActivityPub/ObjectType.cs similarity index 94% rename from SocialPub/Models/ActivityPub/ObjectType.cs rename to PrivaPub/Models/ActivityPub/ObjectType.cs index 50bec4f..831dc24 100644 --- a/SocialPub/Models/ActivityPub/ObjectType.cs +++ b/PrivaPub/Models/ActivityPub/ObjectType.cs @@ -1,4 +1,4 @@ -namespace SocialPub.Models.ActivityPub +namespace PrivaPub.Models.ActivityPub { public enum ObjectType { diff --git a/SocialPub/Models/AppConfiguration.cs b/PrivaPub/Models/AppConfiguration.cs similarity index 87% rename from SocialPub/Models/AppConfiguration.cs rename to PrivaPub/Models/AppConfiguration.cs index b6d6b9f..8c213e2 100644 --- a/SocialPub/Models/AppConfiguration.cs +++ b/PrivaPub/Models/AppConfiguration.cs @@ -1,9 +1,9 @@ using MongoDB.Entities; -using SocialPub.Models.Email; -using SocialPub.StaticServices; +using PrivaPub.Models.Email; +using PrivaPub.StaticServices; -namespace SocialPub.Models +namespace PrivaPub.Models { public class AppConfiguration : Entity { diff --git a/SocialPub/Models/Data/Language.cs b/PrivaPub/Models/Data/Language.cs similarity index 85% rename from SocialPub/Models/Data/Language.cs rename to PrivaPub/Models/Data/Language.cs index 9b492e3..7025592 100644 --- a/SocialPub/Models/Data/Language.cs +++ b/PrivaPub/Models/Data/Language.cs @@ -1,6 +1,6 @@ using MongoDB.Entities; -namespace SocialPub.Models.Data +namespace PrivaPub.Models.Data { public class Language : Entity { diff --git a/SocialPub/Models/Email/EmailConfiguration.cs b/PrivaPub/Models/Email/EmailConfiguration.cs similarity index 86% rename from SocialPub/Models/Email/EmailConfiguration.cs rename to PrivaPub/Models/Email/EmailConfiguration.cs index 0b72209..c3fb80f 100644 --- a/SocialPub/Models/Email/EmailConfiguration.cs +++ b/PrivaPub/Models/Email/EmailConfiguration.cs @@ -1,4 +1,4 @@ -namespace SocialPub.Models.Email +namespace PrivaPub.Models.Email { public class EmailConfiguration { diff --git a/SocialPub/Models/MongoSettings.cs b/PrivaPub/Models/MongoSettings.cs similarity index 84% rename from SocialPub/Models/MongoSettings.cs rename to PrivaPub/Models/MongoSettings.cs index c5e7b04..826f65c 100644 --- a/SocialPub/Models/MongoSettings.cs +++ b/PrivaPub/Models/MongoSettings.cs @@ -1,4 +1,4 @@ -namespace SocialPub.Models +namespace PrivaPub.Models { public class MongoSettings { diff --git a/SocialPub/Models/Post/DmPost.cs b/PrivaPub/Models/Post/DmPost.cs similarity index 95% rename from SocialPub/Models/Post/DmPost.cs rename to PrivaPub/Models/Post/DmPost.cs index 527b1d8..2400adb 100644 --- a/SocialPub/Models/Post/DmPost.cs +++ b/PrivaPub/Models/Post/DmPost.cs @@ -1,6 +1,6 @@ using MongoDB.Entities; -namespace SocialPub.Models.Post +namespace PrivaPub.Models.Post { public class DmPost : Entity { diff --git a/SocialPub/Models/Post/Post.cs b/PrivaPub/Models/Post/Post.cs similarity index 95% rename from SocialPub/Models/Post/Post.cs rename to PrivaPub/Models/Post/Post.cs index 3eb32cb..ce23ddb 100644 --- a/SocialPub/Models/Post/Post.cs +++ b/PrivaPub/Models/Post/Post.cs @@ -1,6 +1,6 @@ using MongoDB.Entities; -namespace SocialPub.Models.Post +namespace PrivaPub.Models.Post { public class Post : Entity { diff --git a/SocialPub/Models/Post/PostBoost.cs b/PrivaPub/Models/Post/PostBoost.cs similarity index 85% rename from SocialPub/Models/Post/PostBoost.cs rename to PrivaPub/Models/Post/PostBoost.cs index 6e6635d..8865876 100644 --- a/SocialPub/Models/Post/PostBoost.cs +++ b/PrivaPub/Models/Post/PostBoost.cs @@ -1,4 +1,4 @@ -namespace SocialPub.Models.Post +namespace PrivaPub.Models.Post { public class PostBoost { diff --git a/SocialPub/Models/Post/PostMedia.cs b/PrivaPub/Models/Post/PostMedia.cs similarity index 88% rename from SocialPub/Models/Post/PostMedia.cs rename to PrivaPub/Models/Post/PostMedia.cs index edc0412..70527a1 100644 --- a/SocialPub/Models/Post/PostMedia.cs +++ b/PrivaPub/Models/Post/PostMedia.cs @@ -1,4 +1,4 @@ -namespace SocialPub.Models.Post +namespace PrivaPub.Models.Post { public class PostMedia { diff --git a/SocialPub/Models/User/Avatar.cs b/PrivaPub/Models/User/Avatar.cs similarity index 84% rename from SocialPub/Models/User/Avatar.cs rename to PrivaPub/Models/User/Avatar.cs index d5fb3c9..25e0f56 100644 --- a/SocialPub/Models/User/Avatar.cs +++ b/PrivaPub/Models/User/Avatar.cs @@ -1,8 +1,6 @@ using MongoDB.Entities; -using System.ComponentModel.DataAnnotations; - -namespace SocialPub.Models.User +namespace PrivaPub.Models.User { public class Avatar : Entity { @@ -19,8 +17,8 @@ namespace SocialPub.Models.User public Dictionary Fields { get; set; } = new(); public string Domain { get; set; } - public string Note { get; set; } - public bool IsDiscoverable { get; set; } = true; + public string PersonalNote { get; set; } + public string ModerationNote { get; set; } public string InboxURL { get; set; } public string OutboxURL { get; set; } @@ -28,6 +26,7 @@ namespace SocialPub.Models.User public string PictureURL { get; set; }//icon public string ThumbnailURL { get; set; }//image public AvatarType AvatarType { get; set; } = AvatarType.Person; + public AvatarServer AvatarServer { get; set; } = AvatarServer.PrivaPub; public DateTime UpdatedAt { get; set; } = DateTime.UtcNow; public DateTime CreatedAt { get; set; } = DateTime.UtcNow; @@ -47,11 +46,13 @@ namespace SocialPub.Models.User public Dictionary SharedPersonalContacts { get; set; } = new(); public string PrivateKey { get; set; } public string PublicKey { get; set; } + public AvatarAccountState AccountState { get; set; } = AvatarAccountState.Normal; public AvatarSettings Settings { get; set; } = new(); public Dictionary Fields { get; set; } = new(); public string Domain { get; set; } - public string Note { get; set; } + public string PersonalNote { get; set; } + public string ModerationNote { get; set; } public bool IsDiscoverable { get; set; } = true; public string InboxURL { get; set; } @@ -60,6 +61,7 @@ namespace SocialPub.Models.User public string PictureURL { get; set; }//icon public string ThumbnailURL { get; set; }//image public AvatarType AvatarType { get; set; } = AvatarType.Person; + public AvatarServer AvatarServer { get; set; } = AvatarServer.Unknown; public DateTime UpdatedAt { get; set; } = DateTime.UtcNow; public DateTime CreatedAt { get; set; } = DateTime.UtcNow; @@ -73,6 +75,8 @@ namespace SocialPub.Models.User { public string LanguageCode { get; set; } = "en-GB"; + public bool IsDefault { get; set; } = true; + public short IconsThemeIndexColour { get; set; } = 25; public short LightThemeIndexColour { get; set; } = 25; public short DarkThemeIndexColour { get; set; } = 215; @@ -82,6 +86,16 @@ namespace SocialPub.Models.User public bool ThemeIsLightGray { get; set; } = true; } + public enum AvatarServer + { + Unknown, + Pleroma, + Mastodon, + Akkoma, + Misskey, + PrivaPub + } + public enum AvatarType { Application, diff --git a/SocialPub/Models/User/EmailRecovery.cs b/PrivaPub/Models/User/EmailRecovery.cs similarity index 88% rename from SocialPub/Models/User/EmailRecovery.cs rename to PrivaPub/Models/User/EmailRecovery.cs index 973853a..8c85076 100644 --- a/SocialPub/Models/User/EmailRecovery.cs +++ b/PrivaPub/Models/User/EmailRecovery.cs @@ -1,6 +1,6 @@ using MongoDB.Entities; -namespace SocialPub.Models.User +namespace PrivaPub.Models.User { public class EmailRecovery : Entity { diff --git a/SocialPub/Models/User/RootToAvatar.cs b/PrivaPub/Models/User/RootToAvatar.cs similarity index 82% rename from SocialPub/Models/User/RootToAvatar.cs rename to PrivaPub/Models/User/RootToAvatar.cs index 5d85646..f444c1d 100644 --- a/SocialPub/Models/User/RootToAvatar.cs +++ b/PrivaPub/Models/User/RootToAvatar.cs @@ -1,6 +1,6 @@ using MongoDB.Entities; -namespace SocialPub.Models.User +namespace PrivaPub.Models.User { public class RootToAvatar : Entity { diff --git a/SocialPub/Models/User/RootUser.cs b/PrivaPub/Models/User/RootUser.cs similarity index 97% rename from SocialPub/Models/User/RootUser.cs rename to PrivaPub/Models/User/RootUser.cs index 1c61d62..e9b3059 100644 --- a/SocialPub/Models/User/RootUser.cs +++ b/PrivaPub/Models/User/RootUser.cs @@ -2,7 +2,7 @@ using System.ComponentModel.DataAnnotations; -namespace SocialPub.Models.User +namespace PrivaPub.Models.User { public class RootUser : Entity { diff --git a/SocialPub/Models/User/RootUserNote.cs b/PrivaPub/Models/User/RootUserNote.cs similarity index 55% rename from SocialPub/Models/User/RootUserNote.cs rename to PrivaPub/Models/User/RootUserNote.cs index b60d648..b2ee053 100644 --- a/SocialPub/Models/User/RootUserNote.cs +++ b/PrivaPub/Models/User/RootUserNote.cs @@ -1,6 +1,6 @@ using MongoDB.Entities; -namespace SocialPub.Models.User +namespace PrivaPub.Models.User { public class RootUserNote : Entity { @@ -8,7 +8,7 @@ namespace SocialPub.Models.User public string AvatarUserId { get; set; } public string Note { get; set; } - public string CreationDate { get; set; } - public string UpdateDate { get; set; } + public DateTime UpdatedAt { get; set; } = DateTime.UtcNow; + public DateTime CreatedAt { get; set; } = DateTime.UtcNow; } } diff --git a/SocialPub/Models/User/UserPolicyType.cs b/PrivaPub/Models/User/UserPolicyType.cs similarity index 67% rename from SocialPub/Models/User/UserPolicyType.cs rename to PrivaPub/Models/User/UserPolicyType.cs index e296cd6..dcb8dea 100644 --- a/SocialPub/Models/User/UserPolicyType.cs +++ b/PrivaPub/Models/User/UserPolicyType.cs @@ -1,4 +1,4 @@ -namespace SocialPub.Models.User +namespace PrivaPub.Models.User { public enum UserPolicyType { diff --git a/SocialPub/Models/socialpub.cs b/PrivaPub/Models/socialpub.cs similarity index 88% rename from SocialPub/Models/socialpub.cs rename to PrivaPub/Models/socialpub.cs index 6441670..9a64744 100644 --- a/SocialPub/Models/socialpub.cs +++ b/PrivaPub/Models/socialpub.cs @@ -1,10 +1,10 @@ using MongoDB.Bson.Serialization.Attributes; using MongoDB.Entities; -namespace SocialPub.Models.Data +namespace PrivaPub.Models.Data { [BsonIgnoreExtraElements] - public class socialpub : Entity + public class PrivaPub : Entity { public DateTime Timestamp { get; set; } public string Level { get; set; } diff --git a/SocialPub/SocialPub.csproj b/PrivaPub/PrivaPub.csproj similarity index 96% rename from SocialPub/SocialPub.csproj rename to PrivaPub/PrivaPub.csproj index cba5892..447ca7d 100644 --- a/SocialPub/SocialPub.csproj +++ b/PrivaPub/PrivaPub.csproj @@ -35,7 +35,7 @@ - + diff --git a/SocialPub/Program.cs b/PrivaPub/Program.cs similarity index 81% rename from SocialPub/Program.cs rename to PrivaPub/Program.cs index 8c92b82..de5f3ac 100644 --- a/SocialPub/Program.cs +++ b/PrivaPub/Program.cs @@ -6,13 +6,13 @@ using MongoDB.Entities; using Serilog; -using SocialPub.Data; -using SocialPub.Extensions; -using SocialPub.Middleware; -using SocialPub.Models; -using SocialPub.Models.Data; -using SocialPub.Services; -using SocialPub.StaticServices; +using PrivaPub.Data; +using PrivaPub.Extensions; +using PrivaPub.Middleware; +using PrivaPub.Models; +using PrivaPub.Models.Data; +using PrivaPub.Services; +using PrivaPub.StaticServices; try { @@ -38,16 +38,16 @@ try try { - builder.Services.socialPubAppSettingsConfiguration(builder.Configuration) - .socialPubWorkersConfiguration() - .socialPubAuthServicesConfiguration(builder.Configuration) - .socialPubInternalizationConfiguration(builder.Configuration) - .socialPubOptimizationConfiguration() - .socialPubDataBaseConfiguration() - .socialPubServicesConfiguration() - .socialPubHTTPSignature(builder.Configuration) - .socialPubCORSConfiguration() - .socialPubMiddlewareConfiguration(); + builder.Services.PrivaPubAppSettingsConfiguration(builder.Configuration) + .PrivaPubWorkersConfiguration() + .PrivaPubAuthServicesConfiguration(builder.Configuration) + .PrivaPubInternalizationConfiguration(builder.Configuration) + .PrivaPubOptimizationConfiguration() + .PrivaPubDataBaseConfiguration() + .PrivaPubServicesConfiguration() + .PrivaPubHTTPSignature(builder.Configuration) + .PrivaPubCORSConfiguration() + .PrivaPubMiddlewareConfiguration(); } catch (Exception ex) { @@ -61,7 +61,7 @@ try await DB.InitAsync(mongoSettings.Database, MongoClientSettings.FromConnectionString(mongoSettings.ConnectionString)); var logsConnectionString = builder.Configuration.GetLogsConnectionString(); await DB.InitAsync(mongoSettings.LogsDatabase, MongoClientSettings.FromConnectionString(logsConnectionString)); - DB.DatabaseFor(mongoSettings.LogsDatabase); + DB.DatabaseFor(mongoSettings.LogsDatabase); } catch (Exception ex) { diff --git a/SocialPub/Properties/launchSettings.json b/PrivaPub/Properties/launchSettings.json similarity index 100% rename from SocialPub/Properties/launchSettings.json rename to PrivaPub/Properties/launchSettings.json diff --git a/SocialPub/Resources/GenericRes.Designer.cs b/PrivaPub/Resources/GenericRes.Designer.cs similarity index 95% rename from SocialPub/Resources/GenericRes.Designer.cs rename to PrivaPub/Resources/GenericRes.Designer.cs index 42858ba..fe8e244 100644 --- a/SocialPub/Resources/GenericRes.Designer.cs +++ b/PrivaPub/Resources/GenericRes.Designer.cs @@ -8,7 +8,7 @@ // //------------------------------------------------------------------------------ -namespace SocialPub.Resources { +namespace PrivaPub.Resources { using System; @@ -39,7 +39,7 @@ namespace SocialPub.Resources { public static global::System.Resources.ResourceManager ResourceManager { get { if (object.ReferenceEquals(resourceMan, null)) { - global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("SocialPub.Resources.GenericRes", typeof(GenericRes).Assembly); + global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("PrivaPub.Resources.GenericRes", typeof(GenericRes).Assembly); resourceMan = temp; } return resourceMan; diff --git a/SocialPub/Resources/GenericRes.resx b/PrivaPub/Resources/GenericRes.resx similarity index 100% rename from SocialPub/Resources/GenericRes.resx rename to PrivaPub/Resources/GenericRes.resx diff --git a/SocialPub/Services/ActivityPubClient.cs b/PrivaPub/Services/ActivityPubClient.cs similarity index 84% rename from SocialPub/Services/ActivityPubClient.cs rename to PrivaPub/Services/ActivityPubClient.cs index 84f2891..393277b 100644 --- a/SocialPub/Services/ActivityPubClient.cs +++ b/PrivaPub/Services/ActivityPubClient.cs @@ -1,4 +1,4 @@ -namespace SocialPub.Services +namespace PrivaPub.Services { public class ActivityPubClient : HttpClient { diff --git a/SocialPub/Services/AppConfigurationService.cs b/PrivaPub/Services/AppConfigurationService.cs similarity index 91% rename from SocialPub/Services/AppConfigurationService.cs rename to PrivaPub/Services/AppConfigurationService.cs index 86d8199..3ff0957 100644 --- a/SocialPub/Services/AppConfigurationService.cs +++ b/PrivaPub/Services/AppConfigurationService.cs @@ -2,10 +2,10 @@ using MongoDB.Entities; -using SocialPub.Models; -using SocialPub.StaticServices; +using PrivaPub.Models; +using PrivaPub.StaticServices; -namespace SocialPub.Services +namespace PrivaPub.Services { public class AppConfigurationService { diff --git a/PrivaPub/Services/ClientToServer/Private/IPrivateAvatarUsersService.cs b/PrivaPub/Services/ClientToServer/Private/IPrivateAvatarUsersService.cs new file mode 100644 index 0000000..d8b7fef --- /dev/null +++ b/PrivaPub/Services/ClientToServer/Private/IPrivateAvatarUsersService.cs @@ -0,0 +1,115 @@ +using Microsoft.Extensions.Localization; + +using MongoDB.Entities; + +using PrivaPub.ClientModels; +using PrivaPub.ClientModels.User.Avatar; +using PrivaPub.Models; +using PrivaPub.Models.User; +using PrivaPub.Resources; +using PrivaPub.StaticServices; + +using System.Security.Cryptography; + +namespace PrivaPub.Services.ClientToServer.Private +{ + public interface IPrivateAvatarUsersService + { + Task UpdateAvatar(UpdateAvatarForm form); + Task InsertAvatar(InsertAvatarForm form); + } + + public class PrivateAvatarUsersService : IPrivateAvatarUsersService + { + readonly AppConfigurationService _appConfiguration; + readonly DbEntities _dbEntities; + readonly IStringLocalizer _localizer; + readonly ILogger _logger; + + public PrivateAvatarUsersService(AppConfigurationService appConfiguration, + DbEntities dbEntities, + IStringLocalizer localizer, + ILogger logger) + { + _appConfiguration = appConfiguration; + _dbEntities = dbEntities; + _localizer = localizer; + _logger = logger; + } + + public async Task InsertAvatar(InsertAvatarForm form) + { + var result = new WebResult(); + try + { + if (await _dbEntities.Avatars.Match(a => a.UserName == form.UserName).ExecuteAnyAsync()) + return result.Invalidate(_localizer["The username '{0}' is already take.", form.UserName]); + + if (!await IsValidRootUser(form.RootId)) + return result.Invalidate(_localizer["You can't do this action because of your account status."]); + + var newAvatar = new Avatar + { + Name = form.Name, + UserName = form.UserName, + Biography = form.Biography, + Fields = form.Fields, + PersonalNote = form.PersonalNote, + }; + if (!form.Settings.IsDefault) + newAvatar.Settings = new() + { + IsDefault = false, + DarkThemeIndexColour = form.Settings.DarkThemeIndexColour, + IconsThemeIndexColour = form.Settings.IconsThemeIndexColour, + LanguageCode = form.Settings.LanguageCode, + LightThemeIndexColour = form.Settings.LightThemeIndexColour, + PreferSystemTheming = form.Settings.PreferSystemTheming, + ThemeIsDarkGray = form.Settings.ThemeIsDarkGray, + ThemeIsDarkMode = form.Settings.ThemeIsDarkMode, + ThemeIsLightGray = form.Settings.ThemeIsLightGray + }; + + if (_appConfiguration.AppConfiguration == default) + await _appConfiguration.Init(); + + newAvatar.Url = _appConfiguration.AppConfiguration.BackendBaseAddress + $"/peasants/{form.UserName}"; + newAvatar.Domain = _appConfiguration.AppConfiguration.BackendBaseAddress; + newAvatar.InboxURL = _appConfiguration.AppConfiguration.BackendBaseAddress + $"/peasants/{form.UserName}/mouth"; + newAvatar.OutboxURL = _appConfiguration.AppConfiguration.BackendBaseAddress + $"/peasants/{form.UserName}/anus"; + var rsa = RSA.Create(); + newAvatar.PrivateKey = rsa.ExportRSAPrivateKeyPem(); + newAvatar.PublicKey = rsa.ExportRSAPublicKeyPem(); + + await newAvatar.SaveAsync(); + result.Data = newAvatar; + + return result; + } + catch (Exception ex) + { + _logger.LogError(ex, $"{nameof(PrivateAvatarUsersService)}.{nameof(InsertAvatar)}"); + return result.Invalidate(_localizer["Error: {0}", ex.ToString()], exception: ex); + } + } + + public async Task UpdateAvatar(UpdateAvatarForm form) + { + var result = new WebResult(); + try + { + + } + catch (Exception ex) + { + _logger.LogError(ex, $"{nameof(PrivateAvatarUsersService)}.{nameof(UpdateAvatar)}"); + return result.Invalidate(_localizer["Error: {0}", ex.ToString()], exception: ex); + } + } + + async ValueTask IsValidRootUser(string rootUserId) => + await _dbEntities.RootUsers.MatchID(rootUserId) + .Match(ru => !ru.DeletedAt.HasValue) + .ExecuteAnyAsync(); + } +} diff --git a/SocialPub/Services/ClientToServer/Public/DataService.cs b/PrivaPub/Services/ClientToServer/Public/DataService.cs similarity index 83% rename from SocialPub/Services/ClientToServer/Public/DataService.cs rename to PrivaPub/Services/ClientToServer/Public/DataService.cs index 49dd2f2..82ec815 100644 --- a/SocialPub/Services/ClientToServer/Public/DataService.cs +++ b/PrivaPub/Services/ClientToServer/Public/DataService.cs @@ -1,7 +1,7 @@ -using SocialPub.Models.Data; -using SocialPub.StaticServices; +using PrivaPub.Models.Data; +using PrivaPub.StaticServices; -namespace SocialPub.Services.ClientToServer.Public +namespace PrivaPub.Services.ClientToServer.Public { public class DataService : IDataService { @@ -17,11 +17,11 @@ namespace SocialPub.Services.ClientToServer.Public public string GetCurrentVersion() => AppConfigurationService.AppConfiguration.Version; - public async Task> GetLanguages(CancellationToken cancellationToken) + public async Task> GetLanguages(CancellationToken cancellationToken) { return (await DbEntities.Languages .Match(l => AppConfigurationService.AppConfiguration.SupportedLanguages.Contains(l.International2Code)) - .ExecuteAsync(cancellationToken)).OrderBy(l => l.NativeName).ToList(); + .ExecuteAsync(cancellationToken)).OrderBy(l => l.NativeName).ToArray(); } public async Task IsValidLanguageId(string languageId) diff --git a/PrivaPub/Services/ClientToServer/Public/IDataService.cs b/PrivaPub/Services/ClientToServer/Public/IDataService.cs new file mode 100644 index 0000000..0b6ae12 --- /dev/null +++ b/PrivaPub/Services/ClientToServer/Public/IDataService.cs @@ -0,0 +1,13 @@ +using PrivaPub.Models.Data; + +namespace PrivaPub.Services.ClientToServer.Public +{ + public interface IDataService + { + string GetCurrentVersion(); + + Task> GetLanguages(CancellationToken cancellationToken); + + Task IsValidLanguageId(string languageId); + } +} \ No newline at end of file diff --git a/PrivaPub/Services/ClientToServer/Public/IPublicAvatarUsersService.cs b/PrivaPub/Services/ClientToServer/Public/IPublicAvatarUsersService.cs new file mode 100644 index 0000000..1656313 --- /dev/null +++ b/PrivaPub/Services/ClientToServer/Public/IPublicAvatarUsersService.cs @@ -0,0 +1,174 @@ +using Microsoft.Extensions.Localization; + +using PrivaPub.ClientModels; +using PrivaPub.Models.User; +using PrivaPub.Resources; +using PrivaPub.StaticServices; + +namespace PrivaPub.Services.ClientToServer.Public +{ + public interface IPublicAvatarUsersService + { + Task GetLocalAvatar(UserPolicyType userPolicyType, string actor, CancellationToken token); + Task> GetLocalAvatars(UserPolicyType userPolicyType, CancellationToken token); + + Task GetForeignAvatar(UserPolicyType userPolicyType, string actor, CancellationToken token); + Task> GetForeignAvatars(UserPolicyType userPolicyType, CancellationToken token); + + Task> GetRootAvatars(string rootUserId, CancellationToken token); + } + + public class PublicAvatarUsersService : IPublicAvatarUsersService + { + readonly DbEntities _dbEntities; + readonly IStringLocalizer _localizer; + readonly ILogger _logger; + + public PublicAvatarUsersService(DbEntities dbEntities, + IStringLocalizer localizer, + ILogger logger) + { + _dbEntities = dbEntities; + _localizer = localizer; + _logger = logger; + } + + public async Task GetLocalAvatar(UserPolicyType userPolicyType, string actor, CancellationToken token) + { + var result = new WebResult(); + try + { + var query = _dbEntities.Avatars; + switch (userPolicyType) + { + case UserPolicyType.IsUser: + query.Match(a => !a.DeletionAt.HasValue && a.UserName == actor); + break; + case UserPolicyType.IsModerator: + query.Match(a => !a.DeletionAt.HasValue && a.UserName == actor); + break; + case UserPolicyType.IsAdmin: + query.Match(a => a.UserName == actor); + break; + } + var avatar = await query.ExecuteFirstAsync(token); + if (avatar == default) + return result.Invalidate(_localizer["User '{0}' not found.", actor], StatusCodes.Status404NotFound); + result.Data = avatar; + return result; + } + catch (Exception ex) + { + _logger.LogError(ex, $"{nameof(PublicAvatarUsersService)}.{nameof(GetLocalAvatar)}"); + return result.Invalidate(_localizer["Error: {0}", ex.ToString()], exception: ex); + } + } + + public async Task> GetLocalAvatars(UserPolicyType userPolicyType, CancellationToken token) + { + try + { + var query = _dbEntities.Avatars; + switch (userPolicyType) + { + case UserPolicyType.IsUser: + query.Match(a => !a.DeletionAt.HasValue); + break; + case UserPolicyType.IsModerator: + query.Match(a => !a.DeletionAt.HasValue); + break; + case UserPolicyType.IsAdmin: + break; + } + var avatars = await query.ExecuteAsync(token); + return avatars; + } + catch (Exception ex) + { + _logger.LogError(ex, $"{nameof(PublicAvatarUsersService)}.{nameof(GetLocalAvatars)}"); + return Enumerable.Empty(); + } + } + + public async Task GetForeignAvatar(UserPolicyType userPolicyType, string actor, CancellationToken token) + { + var result = new WebResult(); + try + { + var query = _dbEntities.ForeignAvatars; + switch (userPolicyType) + { + case UserPolicyType.IsUser: + query.Match(a => !a.DeletionAt.HasValue && a.UserName == actor); + break; + case UserPolicyType.IsModerator: + query.Match(a => !a.DeletionAt.HasValue && a.UserName == actor); + break; + case UserPolicyType.IsAdmin: + query.Match(a => a.UserName == actor); + break; + } + var avatar = await query.ExecuteFirstAsync(token); + if (avatar == default) + return result.Invalidate(_localizer["User '{0}' not found.", actor], StatusCodes.Status404NotFound); + result.Data = avatar; + return result; + } + catch (Exception ex) + { + _logger.LogError(ex, $"{nameof(PublicAvatarUsersService)}.{nameof(GetForeignAvatar)}"); + return result.Invalidate(_localizer["Error: {0}", ex.ToString()], exception: ex); + } + } + + public async Task> GetForeignAvatars(UserPolicyType userPolicyType, CancellationToken token) + { + try + { + var query = _dbEntities.ForeignAvatars; + switch (userPolicyType) + { + case UserPolicyType.IsUser: + query.Match(a => !a.DeletionAt.HasValue); + break; + case UserPolicyType.IsModerator: + query.Match(a => !a.DeletionAt.HasValue); + break; + case UserPolicyType.IsAdmin: + break; + } + var foreignAvatars = await query.ExecuteAsync(token); + return foreignAvatars; + } + catch (Exception ex) + { + _logger.LogError(ex, $"{nameof(PublicAvatarUsersService)}.{nameof(GetForeignAvatars)}"); + return Enumerable.Empty(); + } + } + + public async Task> GetRootAvatars(string rootUserId, CancellationToken token) + { + try + { + var rootUser = _dbEntities.RootUsers.MatchID(rootUserId).ExecuteFirstAsync(token); + if (rootUser == default) + return Enumerable.Empty(); + var rootToAvatars = await _dbEntities.RootToAvatars.Match(ra => ra.RootId == rootUserId).ExecuteAsync(token); + if (rootToAvatars.Count == 0) + return Enumerable.Empty(); + var avatarIds = rootToAvatars.Select(ra => ra.AvatarId).ToArray(); + var avatars = await _dbEntities.Avatars + .Match(a => avatarIds.Contains(a.ID)) + .ProjectExcluding(a => a.Settings) + .ExecuteAsync(token); + return avatars; + } + catch (Exception ex) + { + _logger.LogError(ex, $"{nameof(PublicAvatarUsersService)}.{nameof(GetRootAvatars)}"); + return Enumerable.Empty(); + } + } + } +} diff --git a/SocialPub/Services/IRootUsersService.cs b/PrivaPub/Services/IRootUsersService.cs similarity index 86% rename from SocialPub/Services/IRootUsersService.cs rename to PrivaPub/Services/IRootUsersService.cs index 7ad8518..1ce602e 100644 --- a/SocialPub/Services/IRootUsersService.cs +++ b/PrivaPub/Services/IRootUsersService.cs @@ -1,9 +1,9 @@ #pragma warning disable 8625 -using SocialPub.ClientModels; -using SocialPub.ClientModels.User; +using PrivaPub.ClientModels; +using PrivaPub.ClientModels.User; -namespace SocialPub.Services +namespace PrivaPub.Services { public interface IRootUsersService { @@ -23,7 +23,7 @@ namespace SocialPub.Services Task GetUserSettingsAsync(string userId, LoginForm loginForm = default); - Task UpdateUserSettingsAsync(ViewUserSettings userSettings, string userId); + Task UpdateUserSettingsAsync(ViewAvatarServer userSettings, string userId); Task SetupAndSendRecoveryEmail(PasswordRecoveryForm passwordRecoveryForm, string host); diff --git a/SocialPub/Services/JwtEvents.cs b/PrivaPub/Services/JwtEvents.cs similarity index 95% rename from SocialPub/Services/JwtEvents.cs rename to PrivaPub/Services/JwtEvents.cs index 8f4303e..cc271ae 100644 --- a/SocialPub/Services/JwtEvents.cs +++ b/PrivaPub/Services/JwtEvents.cs @@ -1,13 +1,13 @@ using Microsoft.AspNetCore.Authentication.JwtBearer; using Microsoft.Extensions.Localization; -using SocialPub.ClientModels; -using SocialPub.Resources; +using PrivaPub.ClientModels; +using PrivaPub.Resources; using System.Text; using System.Text.Json; -namespace SocialPub.Services +namespace PrivaPub.Services { public class JwtEvents : JwtBearerEvents { diff --git a/SocialPub/Services/RequestLocalizationOptionsService.cs b/PrivaPub/Services/RequestLocalizationOptionsService.cs similarity index 95% rename from SocialPub/Services/RequestLocalizationOptionsService.cs rename to PrivaPub/Services/RequestLocalizationOptionsService.cs index 473cfa2..286c132 100644 --- a/SocialPub/Services/RequestLocalizationOptionsService.cs +++ b/PrivaPub/Services/RequestLocalizationOptionsService.cs @@ -1,10 +1,10 @@ using Microsoft.AspNetCore.Localization; -using SocialPub.StaticServices; +using PrivaPub.StaticServices; using System.Globalization; -namespace SocialPub.Services +namespace PrivaPub.Services { public class RequestLocalizationOptionsService { diff --git a/SocialPub/Services/RootUsersService.cs b/PrivaPub/Services/RootUsersService.cs similarity index 97% rename from SocialPub/Services/RootUsersService.cs rename to PrivaPub/Services/RootUsersService.cs index f7c1507..177a5bf 100644 --- a/SocialPub/Services/RootUsersService.cs +++ b/PrivaPub/Services/RootUsersService.cs @@ -9,19 +9,19 @@ using MongoDB.Entities; using PasswordGenerator; -using SocialPub.ClientModels; -using SocialPub.ClientModels.User; -using SocialPub.Models; -using SocialPub.Models.User; -using SocialPub.Resources; -using SocialPub.StaticServices; +using PrivaPub.ClientModels; +using PrivaPub.ClientModels.User; +using PrivaPub.Models; +using PrivaPub.Models.User; +using PrivaPub.Resources; +using PrivaPub.StaticServices; using System.Globalization; #pragma warning disable 8603 #pragma warning disable 8625 -namespace SocialPub.Services +namespace PrivaPub.Services { public class RootUsersService : IRootUsersService { @@ -106,7 +106,7 @@ namespace SocialPub.Services // return result; //} - result.Data = (newUser, new ViewUserSettings + result.Data = (newUser, new ViewAvatarServer { LanguageCode = newRootUserSettings.LanguageCode, LightThemeIndexColour = newRootUserSettings.LightThemeIndexColour, @@ -151,7 +151,7 @@ namespace SocialPub.Services result.ErrorMessage = Localizer["Needs upgrade!"]; var userSettingsResult = await GetUserSettingsAsync(user.ID, loginForm); - var userSettings = (ViewUserSettings)userSettingsResult.Data; + var userSettings = (ViewAvatarServer)userSettingsResult.Data; //if (!string.IsNullOrEmpty(invitationCode)) //{ @@ -208,7 +208,7 @@ namespace SocialPub.Services } } - public async Task UpdateUserSettingsAsync(ViewUserSettings userSettings, string userId) + public async Task UpdateUserSettingsAsync(ViewAvatarServer userSettings, string userId) { var result = new WebResult(); try @@ -355,7 +355,7 @@ namespace SocialPub.Services await userSettings.SaveAsync(); } - result.Data = new ViewUserSettings + result.Data = new ViewAvatarServer { LanguageCode = userSettings.LanguageCode, LightThemeIndexColour = userSettings.LightThemeIndexColour, @@ -487,7 +487,7 @@ namespace SocialPub.Services var message = new MimeMessage(); message.From.Add(new MailboxAddress(Localizer["Eugene - collAnon support"], AppConfigurationService.AppConfiguration.EmailConfiguration.SmtpUsername)); message.To.Add(MailboxAddress.Parse(user.Email)); - message.Subject = Localizer["SocialPub - Password recovery link"]; + message.Subject = Localizer["PrivaPub - Password recovery link"]; message.Body = new TextPart("plain") { Text = string.Format(Localizer[@"Hey {0}, diff --git a/SocialPub/StaticServices/AuthTokenManager.cs b/PrivaPub/StaticServices/AuthTokenManager.cs similarity index 89% rename from SocialPub/StaticServices/AuthTokenManager.cs rename to PrivaPub/StaticServices/AuthTokenManager.cs index c0385e6..a88ffac 100644 --- a/SocialPub/StaticServices/AuthTokenManager.cs +++ b/PrivaPub/StaticServices/AuthTokenManager.cs @@ -1,14 +1,14 @@ using Microsoft.IdentityModel.Tokens; -using SocialPub.ClientModels; -using SocialPub.ClientModels.User; -using SocialPub.Models.User; +using PrivaPub.ClientModels; +using PrivaPub.ClientModels.User; +using PrivaPub.Models.User; using System.IdentityModel.Tokens.Jwt; using System.Security.Claims; using System.Text; -namespace SocialPub.StaticServices +namespace PrivaPub.StaticServices { public class AuthTokenManager { @@ -19,7 +19,7 @@ namespace SocialPub.StaticServices Configuration = configuration; } - public JwtUser GenerateToken(RootUser user, ViewUserSettings userSettings) + public JwtUser GenerateToken(RootUser user, ViewAvatarServer userSettings) { var expiration = DateTime.UtcNow.AddHours(int.Parse(Configuration["AppConfiguration:Jwt:HoursTimeout"])); var securityKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(Configuration["AppConfiguration:Jwt:Key"])); diff --git a/SocialPub/StaticServices/DbEntities.cs b/PrivaPub/StaticServices/DbEntities.cs similarity index 69% rename from SocialPub/StaticServices/DbEntities.cs rename to PrivaPub/StaticServices/DbEntities.cs index 073af8f..ade72f0 100644 --- a/SocialPub/StaticServices/DbEntities.cs +++ b/PrivaPub/StaticServices/DbEntities.cs @@ -1,16 +1,15 @@ using MongoDB.Entities; -using SocialPub.Models; -using SocialPub.Models.Data; -using SocialPub.Models.Post; -using SocialPub.Models.User; +using PrivaPub.Models; +using PrivaPub.Models.Data; +using PrivaPub.Models.Post; +using PrivaPub.Models.User; -namespace SocialPub.StaticServices +namespace PrivaPub.StaticServices { public class DbEntities { public Find RootUsers { get { return DB.Find(); } } - public Find RootUsersSettings { get { return DB.Find(); } } public Find RootUserNotes { get { return DB.Find(); } } public Find AppConfiguration { get { return DB.Find(); } } @@ -21,7 +20,7 @@ namespace SocialPub.StaticServices public Find DmPosts { get { return DB.Find(); } } public Find Avatars { get { return DB.Find(); } } - public Find AvatarSettings { get { return DB.Find(); } } + public Find ForeignAvatars { get { return DB.Find(); } } public Find RootToAvatars { get { return DB.Find(); } } } diff --git a/SocialPub/StaticServices/IPasswordHasher.cs b/PrivaPub/StaticServices/IPasswordHasher.cs similarity index 79% rename from SocialPub/StaticServices/IPasswordHasher.cs rename to PrivaPub/StaticServices/IPasswordHasher.cs index 8ece2b2..028221f 100644 --- a/SocialPub/StaticServices/IPasswordHasher.cs +++ b/PrivaPub/StaticServices/IPasswordHasher.cs @@ -1,4 +1,4 @@ -namespace SocialPub.StaticServices +namespace PrivaPub.StaticServices { public interface IPasswordHasher { diff --git a/SocialPub/StaticServices/PasswordHasher.cs b/PrivaPub/StaticServices/PasswordHasher.cs similarity index 97% rename from SocialPub/StaticServices/PasswordHasher.cs rename to PrivaPub/StaticServices/PasswordHasher.cs index 5230aa9..e6500d2 100644 --- a/SocialPub/StaticServices/PasswordHasher.cs +++ b/PrivaPub/StaticServices/PasswordHasher.cs @@ -2,7 +2,7 @@ using System.Security.Cryptography; -namespace SocialPub.StaticServices +namespace PrivaPub.StaticServices { public sealed class PasswordHasher : IPasswordHasher { diff --git a/SocialPub/appsettings.Development.json b/PrivaPub/appsettings.Development.json similarity index 94% rename from SocialPub/appsettings.Development.json rename to PrivaPub/appsettings.Development.json index 42d1560..f47ac72 100644 --- a/SocialPub/appsettings.Development.json +++ b/PrivaPub/appsettings.Development.json @@ -1,10 +1,11 @@ { "MongoSettings": { - "Database": "socialpub", + "Database": "PrivaPub", "LogsDatabase": "logs", "ConnectionString": "mongodb://localhost:27017" }, "AppConfiguration": { + "RequiresFirstTimeSetup": null, "Version": "0.0.0", "MaxAllowedUploadFiles": 3, "MaxAllowedFileSize": 2097152, @@ -35,6 +36,7 @@ "sl", "sv" ], + "BackendBaseAddress": "https://localhost:7195", "EmailConfiguration": { "SmtpServer": "mail.privateemail.com", "SmtpPort": 465, diff --git a/SocialPub/appsettings.Production.json b/PrivaPub/appsettings.Production.json similarity index 96% rename from SocialPub/appsettings.Production.json rename to PrivaPub/appsettings.Production.json index 08b8e3e..9230de9 100644 --- a/SocialPub/appsettings.Production.json +++ b/PrivaPub/appsettings.Production.json @@ -1,6 +1,6 @@ { "MongoSettings": { - "Database": "socialpub", + "Database": "PrivaPub", "LogsDatabase": "logs", "ConnectionString": "mongodb://localhost:27017" }, @@ -47,7 +47,7 @@ "Name": "MongoDB", "Args": { "databaseUrl": "mongodb://localhost:27017/logs", - "collectionName": "socialpub", + "collectionName": "PrivaPub", "cappedMaxSizeMb": "1024", "cappedMaxDocuments": "10000" } diff --git a/SocialPub/appsettings.json b/PrivaPub/appsettings.json similarity index 100% rename from SocialPub/appsettings.json rename to PrivaPub/appsettings.json diff --git a/SocialPub.ClientModels/User/Avatar/InsertAvatarForm.cs b/SocialPub.ClientModels/User/Avatar/InsertAvatarForm.cs deleted file mode 100644 index d778bdc..0000000 --- a/SocialPub.ClientModels/User/Avatar/InsertAvatarForm.cs +++ /dev/null @@ -1,14 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Text.Json.Serialization; -using System.Threading.Tasks; - -namespace SocialPub.ClientModels.User.Avatar -{ - [JsonSerializable(typeof(InsertAvatarForm))] - public class InsertAvatarForm - { - } -} diff --git a/SocialPub.ClientModels/User/Avatar/UpdateAvatarForm.cs b/SocialPub.ClientModels/User/Avatar/UpdateAvatarForm.cs deleted file mode 100644 index fe7fc4f..0000000 --- a/SocialPub.ClientModels/User/Avatar/UpdateAvatarForm.cs +++ /dev/null @@ -1,14 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Text.Json.Serialization; -using System.Threading.Tasks; - -namespace SocialPub.ClientModels.User.Avatar -{ - [JsonSerializable(typeof(UpdateAvatarForm))] - public class UpdateAvatarForm - { - } -} diff --git a/SocialPub.ClientModels/User/Avatar/UpdateAvatarSettings.cs b/SocialPub.ClientModels/User/Avatar/UpdateAvatarSettings.cs deleted file mode 100644 index a43b9ab..0000000 --- a/SocialPub.ClientModels/User/Avatar/UpdateAvatarSettings.cs +++ /dev/null @@ -1,14 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Text.Json.Serialization; -using System.Threading.Tasks; - -namespace SocialPub.ClientModels.User.Avatar -{ - [JsonSerializable(typeof(UpdateAvatarSettings))] - public class UpdateAvatarSettings - { - } -} diff --git a/SocialPub.ClientModels/User/Avatar/ViewAvatar.cs b/SocialPub.ClientModels/User/Avatar/ViewAvatar.cs deleted file mode 100644 index 5e5eada..0000000 --- a/SocialPub.ClientModels/User/Avatar/ViewAvatar.cs +++ /dev/null @@ -1,16 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Text.Json.Serialization; -using System.Threading.Tasks; - -namespace SocialPub.ClientModels.User.Avatar -{ - [JsonSerializable(typeof(ViewAvatar))] - public class ViewAvatar - { - - public ViewAvatarSettings Settings { get; set; } - } -} diff --git a/SocialPub.ClientModels/User/Avatar/ViewAvatarSettings.cs b/SocialPub.ClientModels/User/Avatar/ViewAvatarSettings.cs deleted file mode 100644 index 2085f57..0000000 --- a/SocialPub.ClientModels/User/Avatar/ViewAvatarSettings.cs +++ /dev/null @@ -1,12 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; - -namespace SocialPub.ClientModels.User.Avatar -{ - public class ViewAvatarSettings - { - } -} diff --git a/SocialPub/Services/ClientToServer/Private/IPrivateAvatarUsersService.cs b/SocialPub/Services/ClientToServer/Private/IPrivateAvatarUsersService.cs deleted file mode 100644 index 5918c1c..0000000 --- a/SocialPub/Services/ClientToServer/Private/IPrivateAvatarUsersService.cs +++ /dev/null @@ -1,13 +0,0 @@ -using SocialPub.ClientModels; -using SocialPub.ClientModels.User.Avatar; -using SocialPub.Models.User; - -namespace SocialPub.Services.ClientToServer.Private -{ - public interface IPrivateAvatarUsersService - { - ValueTask UpdateAvatar(UpdateAvatarForm form); - ValueTask InsertAvatar(InsertAvatarForm form); - ValueTask UpdateAvatarSettings(UpdateAvatarSettings form); - } -} diff --git a/SocialPub/Services/ClientToServer/Public/IDataService.cs b/SocialPub/Services/ClientToServer/Public/IDataService.cs deleted file mode 100644 index bcc47ff..0000000 --- a/SocialPub/Services/ClientToServer/Public/IDataService.cs +++ /dev/null @@ -1,13 +0,0 @@ -using SocialPub.Models.Data; - -namespace SocialPub.Services.ClientToServer.Public -{ - public interface IDataService - { - string GetCurrentVersion(); - - Task> GetLanguages(CancellationToken cancellationToken); - - Task IsValidLanguageId(string languageId); - } -} \ No newline at end of file diff --git a/SocialPub/Services/ClientToServer/Public/IPublicAvatarUsersService.cs b/SocialPub/Services/ClientToServer/Public/IPublicAvatarUsersService.cs deleted file mode 100644 index 2407400..0000000 --- a/SocialPub/Services/ClientToServer/Public/IPublicAvatarUsersService.cs +++ /dev/null @@ -1,54 +0,0 @@ -using SocialPub.ClientModels; -using SocialPub.Models.User; -using SocialPub.StaticServices; - -namespace SocialPub.Services.ClientToServer.Public -{ - public interface IPublicAvatarUsersService - { - Task GetAvatar(UserPolicyType userPolicyType, string actor); - Task GetAvatars(UserPolicyType userPolicyType); - Task GetRootAvatars(); - } - - public class PublicAvatarUsersService : IPublicAvatarUsersService - { - readonly DbEntities _dbEntities; - - public PublicAvatarUsersService(DbEntities dbEntities) - { - _dbEntities = dbEntities; - } - - public async Task GetAvatar(UserPolicyType userPolicyType, string actor) - { - var result = new WebResult(); - - var query = _dbEntities.Avatars; - - switch (userPolicyType) - { - case UserPolicyType.IsUser: - query.Match(a => !a.DeletionDate.HasValue && a.UserName == actor); - break; - case UserPolicyType.IsModerator: - query.Match(a => !a.DeletionDate.HasValue && a.UserName == actor); - break; - case UserPolicyType.IsAdmin: - break; - } - - return result; - } - - public Task GetAvatars(UserPolicyType userPolicyType) - { - throw new NotImplementedException(); - } - - public Task GetRootAvatars() - { - throw new NotImplementedException(); - } - } -}