Saving
This commit is contained in:
		@@ -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
 | 
			
		||||
@@ -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;
 | 
			
		||||
@@ -1,4 +1,4 @@
 | 
			
		||||
namespace SocialPub.ClientModels.Data
 | 
			
		||||
namespace PrivaPub.ClientModels.Data
 | 
			
		||||
{
 | 
			
		||||
	public class ViewLanguage
 | 
			
		||||
	{
 | 
			
		||||
@@ -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
 | 
			
		||||
	{
 | 
			
		||||
@@ -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
 | 
			
		||||
	{
 | 
			
		||||
@@ -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",
 | 
			
		||||
@@ -1,4 +1,4 @@
 | 
			
		||||
namespace SocialPub.ClientModels
 | 
			
		||||
namespace PrivaPub.ClientModels
 | 
			
		||||
{
 | 
			
		||||
	public static class Policies
 | 
			
		||||
	{
 | 
			
		||||
@@ -8,7 +8,7 @@
 | 
			
		||||
// </auto-generated>
 | 
			
		||||
//------------------------------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
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;
 | 
			
		||||
@@ -8,7 +8,7 @@
 | 
			
		||||
// </auto-generated>
 | 
			
		||||
//------------------------------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
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;
 | 
			
		||||
							
								
								
									
										35
									
								
								PrivaPub.ClientModels/User/Avatar/InsertAvatarForm.cs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										35
									
								
								PrivaPub.ClientModels/User/Avatar/InsertAvatarForm.cs
									
									
									
									
									
										Normal file
									
								
							@@ -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<string, string> Fields { get; set; } = new();
 | 
			
		||||
		public string PersonalNote { get; set; }
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										31
									
								
								PrivaPub.ClientModels/User/Avatar/UpdateAvatarForm.cs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										31
									
								
								PrivaPub.ClientModels/User/Avatar/UpdateAvatarForm.cs
									
									
									
									
									
										Normal file
									
								
							@@ -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<string, string> Fields { get; set; } = new();
 | 
			
		||||
		public string PersonalNote { get; set; }
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										26
									
								
								PrivaPub.ClientModels/User/Avatar/ViewAvatar.cs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										26
									
								
								PrivaPub.ClientModels/User/Avatar/ViewAvatar.cs
									
									
									
									
									
										Normal file
									
								
							@@ -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<string, string> Fields { get; set; } = new();
 | 
			
		||||
 | 
			
		||||
		public string PictureURL { get; set; }//icon
 | 
			
		||||
		public string ThumbnailURL { get; set; }//image
 | 
			
		||||
		public Dictionary<string, string> 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; }
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
@@ -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;
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
}
 | 
			
		||||
@@ -1,4 +1,4 @@
 | 
			
		||||
namespace SocialPub.ClientModels.User
 | 
			
		||||
namespace PrivaPub.ClientModels.User
 | 
			
		||||
{
 | 
			
		||||
	public class JwtUser
 | 
			
		||||
	{
 | 
			
		||||
@@ -8,6 +8,6 @@
 | 
			
		||||
		public List<string> 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();
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
@@ -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
 | 
			
		||||
	{
 | 
			
		||||
@@ -1,4 +1,4 @@
 | 
			
		||||
namespace SocialPub.ClientModels.User
 | 
			
		||||
namespace PrivaPub.ClientModels.User
 | 
			
		||||
{
 | 
			
		||||
	public class UsersIds
 | 
			
		||||
	{
 | 
			
		||||
							
								
								
									
										12
									
								
								PrivaPub.ClientModels/User/ViewAvatarServer.cs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										12
									
								
								PrivaPub.ClientModels/User/ViewAvatarServer.cs
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,12 @@
 | 
			
		||||
namespace PrivaPub.ClientModels.User
 | 
			
		||||
{
 | 
			
		||||
	public enum ViewAvatarServer
 | 
			
		||||
	{
 | 
			
		||||
		Unknown,
 | 
			
		||||
		Pleroma,
 | 
			
		||||
		Mastodon,
 | 
			
		||||
		Akkoma,
 | 
			
		||||
		Misskey,
 | 
			
		||||
		PrivaPub
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										11
									
								
								PrivaPub.ClientModels/User/ViewAvatarState.cs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										11
									
								
								PrivaPub.ClientModels/User/ViewAvatarState.cs
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,11 @@
 | 
			
		||||
namespace PrivaPub.ClientModels.User
 | 
			
		||||
{
 | 
			
		||||
	public enum ViewAvatarState
 | 
			
		||||
	{
 | 
			
		||||
		Normal,
 | 
			
		||||
		Silenced,
 | 
			
		||||
		Suspended,
 | 
			
		||||
		Banned,
 | 
			
		||||
		Deleted
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
@@ -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
 | 
			
		||||
@@ -1,7 +1,7 @@
 | 
			
		||||
using System.Net;
 | 
			
		||||
using System.Text.Json.Serialization;
 | 
			
		||||
 | 
			
		||||
namespace SocialPub.ClientModels
 | 
			
		||||
namespace PrivaPub.ClientModels
 | 
			
		||||
{
 | 
			
		||||
	public class WebResult
 | 
			
		||||
	{
 | 
			
		||||
@@ -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
 | 
			
		||||
@@ -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<UserController> Logger;
 | 
			
		||||
		readonly ILogger<RootUserController> Logger;
 | 
			
		||||
		readonly IStringLocalizer Localizer;
 | 
			
		||||
 | 
			
		||||
		public AdminController(ILogger<UserController> logger,
 | 
			
		||||
		public AdminController(ILogger<RootUserController> logger,
 | 
			
		||||
				IStringLocalizer<GenericRes> localizer,
 | 
			
		||||
				IRootUsersService rootUsersService)
 | 
			
		||||
		{
 | 
			
		||||
@@ -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);
 | 
			
		||||
			}
 | 
			
		||||
@@ -1,6 +1,6 @@
 | 
			
		||||
using Microsoft.AspNetCore.Mvc;
 | 
			
		||||
 | 
			
		||||
namespace SocialPub.Controllers.ClientToServer
 | 
			
		||||
namespace PrivaPub.Controllers.ClientToServer
 | 
			
		||||
{
 | 
			
		||||
	[ApiController,
 | 
			
		||||
		Route("clientapi/moderator")]
 | 
			
		||||
@@ -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<PrivateAvatarController> _logger;
 | 
			
		||||
		readonly IPrivateAvatarUsersService _privateAvatarUsersService;
 | 
			
		||||
		readonly IStringLocalizer _localizer;
 | 
			
		||||
 | 
			
		||||
		public PrivateAvatarController(IPrivateAvatarUsersService privateAvatarUsersService,
 | 
			
		||||
				IStringLocalizer<GenericRes> localizer,
 | 
			
		||||
				ILogger<PrivateAvatarController> logger)
 | 
			
		||||
		{
 | 
			
		||||
			_privateAvatarUsersService = privateAvatarUsersService;
 | 
			
		||||
			_localizer = localizer;
 | 
			
		||||
			_logger = logger;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		[HttpPost, Route("/clientapi/avatar/private/insert")]
 | 
			
		||||
		public async Task<IActionResult> 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<IActionResult> 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));
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
@@ -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<UserController> Logger;
 | 
			
		||||
		readonly ILogger<RootUserController> Logger;
 | 
			
		||||
		readonly IStringLocalizer Localizer;
 | 
			
		||||
 | 
			
		||||
		public UserController(IRootUsersService usersService,
 | 
			
		||||
		public RootUserController(IRootUsersService usersService,
 | 
			
		||||
				AuthTokenManager authTokenManager,
 | 
			
		||||
				IStringLocalizer<GenericRes> localizer,
 | 
			
		||||
				ILogger<UserController> logger)
 | 
			
		||||
				ILogger<RootUserController> 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<IActionResult> UpdateUserSettings(ViewUserSettings userSettings)
 | 
			
		||||
		public async Task<IActionResult> UpdateUserSettings(ViewAvatarServer userSettings)
 | 
			
		||||
		{
 | 
			
		||||
			var result = new WebResult();
 | 
			
		||||
			if (!ModelState.IsValid)
 | 
			
		||||
@@ -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")]
 | 
			
		||||
@@ -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")]
 | 
			
		||||
@@ -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
 | 
			
		||||
	{
 | 
			
		||||
@@ -1,4 +1,4 @@
 | 
			
		||||
namespace SocialPub.Data
 | 
			
		||||
namespace PrivaPub.Data
 | 
			
		||||
{
 | 
			
		||||
	public class LanguagesRow
 | 
			
		||||
	{
 | 
			
		||||
@@ -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
 | 
			
		||||
@@ -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
 | 
			
		||||
	{
 | 
			
		||||
@@ -2,7 +2,7 @@
 | 
			
		||||
using Microsoft.AspNetCore.Mvc;
 | 
			
		||||
using Microsoft.AspNetCore.Mvc.Filters;
 | 
			
		||||
 | 
			
		||||
namespace SocialPub.Extensions
 | 
			
		||||
namespace PrivaPub.Extensions
 | 
			
		||||
{
 | 
			
		||||
	public class OperationCancelledExceptionFilter : ExceptionFilterAttribute
 | 
			
		||||
	{
 | 
			
		||||
@@ -1,8 +1,8 @@
 | 
			
		||||
using SocialPub.ClientModels;
 | 
			
		||||
using PrivaPub.ClientModels;
 | 
			
		||||
 | 
			
		||||
using System.Security.Claims;
 | 
			
		||||
 | 
			
		||||
namespace SocialPub.Extensions
 | 
			
		||||
namespace PrivaPub.Extensions
 | 
			
		||||
{
 | 
			
		||||
	public static class StringExtensions
 | 
			
		||||
	{
 | 
			
		||||
@@ -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<MongoSettings>(configuration.GetSection(nameof(MongoSettings)))
 | 
			
		||||
				.Configure<AppConfiguration>(configuration.GetSection(nameof(AppConfiguration)));
 | 
			
		||||
		}
 | 
			
		||||
		public static IServiceCollection socialPubWorkersConfiguration(this IServiceCollection service)
 | 
			
		||||
		public static IServiceCollection PrivaPubWorkersConfiguration(this IServiceCollection service)
 | 
			
		||||
		{
 | 
			
		||||
			return service;
 | 
			
		||||
			//.AddHostedService<DiscussionsWorker>()
 | 
			
		||||
			//.AddHostedService<GroupsCleanerWorker>()
 | 
			
		||||
			//.AddHostedService<PoliciesCleanerWorker>();
 | 
			
		||||
		}
 | 
			
		||||
		public static IServiceCollection socialPubHTTPSignature(this IServiceCollection service, IConfiguration configuration)
 | 
			
		||||
		public static IServiceCollection PrivaPubHTTPSignature(this IServiceCollection service, IConfiguration configuration)
 | 
			
		||||
		{
 | 
			
		||||
			//HTTP CLIENT
 | 
			
		||||
			service.Configure<AddDigestOptions>(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<AuthTokenManager>()
 | 
			
		||||
				.AddSingleton<IPasswordHasher, PasswordHasher>();
 | 
			
		||||
		}
 | 
			
		||||
		public static IServiceCollection socialPubInternalizationConfiguration(this IServiceCollection service, IConfiguration configuration)
 | 
			
		||||
		public static IServiceCollection PrivaPubInternalizationConfiguration(this IServiceCollection service, IConfiguration configuration)
 | 
			
		||||
		{
 | 
			
		||||
			return service
 | 
			
		||||
				.AddLocalization()
 | 
			
		||||
				.AddSingleton<RequestLocalizationOptionsService>();
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		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<DbEntities>();
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		public static IServiceCollection socialPubServicesConfiguration(this IServiceCollection service)
 | 
			
		||||
		public static IServiceCollection PrivaPubServicesConfiguration(this IServiceCollection service)
 | 
			
		||||
		{
 | 
			
		||||
			return service
 | 
			
		||||
				.AddTransient<IDataService, DataService>()
 | 
			
		||||
				.AddTransient<IRootUsersService, RootUsersService>()
 | 
			
		||||
				.AddTransient<IGroupUsersService, GroupUsersService>()
 | 
			
		||||
				.AddTransient<IPublicAvatarUsersService, PublicAvatarUsersService>()
 | 
			
		||||
				.AddSingleton<AppConfigurationService>()
 | 
			
		||||
				.AddHttpContextAccessor()
 | 
			
		||||
				.AddMemoryCache()
 | 
			
		||||
				.AddSingleton<IPasswordHasher, PasswordHasher>();
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		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 =>
 | 
			
		||||
			{
 | 
			
		||||
@@ -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
 | 
			
		||||
@@ -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<ActivityPubAttachment> Attachment { get; set; } = Enumerable.Empty<ActivityPubAttachment>();
 | 
			
		||||
@@ -1,6 +1,6 @@
 | 
			
		||||
using System.Text.Json.Serialization;
 | 
			
		||||
 | 
			
		||||
namespace SocialPub.Models.ActivityPub
 | 
			
		||||
namespace PrivaPub.Models.ActivityPub
 | 
			
		||||
{
 | 
			
		||||
	[JsonSerializable(typeof(ActivityPubCollection))]
 | 
			
		||||
	public class ActivityPubCollection : ActivityPubObject
 | 
			
		||||
@@ -1,6 +1,6 @@
 | 
			
		||||
using System.Text.Json.Serialization;
 | 
			
		||||
 | 
			
		||||
namespace SocialPub.Models.ActivityPub
 | 
			
		||||
namespace PrivaPub.Models.ActivityPub
 | 
			
		||||
{
 | 
			
		||||
	[JsonSerializable(typeof(ActivityPubCollectionPage))]
 | 
			
		||||
	public class ActivityPubCollectionPage : ActivityPubCollection
 | 
			
		||||
@@ -1,6 +1,6 @@
 | 
			
		||||
using System.Text.Json.Serialization;
 | 
			
		||||
 | 
			
		||||
namespace SocialPub.Models.ActivityPub
 | 
			
		||||
namespace PrivaPub.Models.ActivityPub
 | 
			
		||||
{
 | 
			
		||||
	[JsonSerializable(typeof(ActivityPubLink))]
 | 
			
		||||
	public class ActivityPubLink : ActivityPubObject
 | 
			
		||||
@@ -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
 | 
			
		||||
@@ -1,6 +1,6 @@
 | 
			
		||||
using System.Text.Json.Serialization;
 | 
			
		||||
 | 
			
		||||
namespace SocialPub.Models.ActivityPub
 | 
			
		||||
namespace PrivaPub.Models.ActivityPub
 | 
			
		||||
{
 | 
			
		||||
	[JsonSerializable(typeof(ActivityPubOrderedCollection))]
 | 
			
		||||
	public class ActivityPubOrderedCollection : ActivityPubCollection
 | 
			
		||||
@@ -1,6 +1,6 @@
 | 
			
		||||
using System.Text.Json.Serialization;
 | 
			
		||||
 | 
			
		||||
namespace SocialPub.Models.ActivityPub
 | 
			
		||||
namespace PrivaPub.Models.ActivityPub
 | 
			
		||||
{
 | 
			
		||||
	[JsonSerializable(typeof(ActivityPubOrderedCollectionPage))]
 | 
			
		||||
	public class ActivityPubOrderedCollectionPage : ActivityPubCollection
 | 
			
		||||
@@ -1,6 +1,6 @@
 | 
			
		||||
using System.Text.Json.Serialization;
 | 
			
		||||
 | 
			
		||||
namespace SocialPub.Models.ActivityPub
 | 
			
		||||
namespace PrivaPub.Models.ActivityPub
 | 
			
		||||
{
 | 
			
		||||
	[JsonSerializable(typeof(ActivityPubTombstone))]
 | 
			
		||||
	public class ActivityPubTombstone : ActivityPubObject
 | 
			
		||||
@@ -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
 | 
			
		||||
@@ -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
 | 
			
		||||
@@ -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
 | 
			
		||||
@@ -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
 | 
			
		||||
@@ -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
 | 
			
		||||
@@ -1,4 +1,4 @@
 | 
			
		||||
namespace SocialPub.Models.ActivityPub
 | 
			
		||||
namespace PrivaPub.Models.ActivityPub
 | 
			
		||||
{
 | 
			
		||||
	public enum MacroType
 | 
			
		||||
	{
 | 
			
		||||
Some files were not shown because too many files have changed in this diff Show More
		Reference in New Issue
	
	Block a user