Compare commits
	
		
			6 Commits
		
	
	
		
			bd8e13f25d
			...
			refactor/a
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| f6f0703cb3 | |||
| 3d47b4e44e | |||
| 71fe2a30e7 | |||
| d8f57161ae | |||
| 3caa79b9a7 | |||
| 49beb17925 | 
							
								
								
									
										3
									
								
								.aspire/settings.json
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										3
									
								
								.aspire/settings.json
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,3 @@ | |||||||
|  | { | ||||||
|  |   "appHostPath": "../DysonNetwork.Control/DysonNetwork.Control.csproj" | ||||||
|  | } | ||||||
							
								
								
									
										35
									
								
								.env
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										35
									
								
								.env
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,35 @@ | |||||||
|  | # Default container port for ring | ||||||
|  | RING_PORT=8080 | ||||||
|  |  | ||||||
|  | # Default container port for pass | ||||||
|  | PASS_PORT=8080 | ||||||
|  |  | ||||||
|  | # Default container port for drive | ||||||
|  | DRIVE_PORT=8080 | ||||||
|  |  | ||||||
|  | # Default container port for sphere | ||||||
|  | SPHERE_PORT=8080 | ||||||
|  |  | ||||||
|  | # Default container port for develop | ||||||
|  | DEVELOP_PORT=8080 | ||||||
|  |  | ||||||
|  | # Parameter cache-password | ||||||
|  | CACHE_PASSWORD=KS3jSPaU9e | ||||||
|  |  | ||||||
|  | # Parameter queue-password | ||||||
|  | QUEUE_PASSWORD=8xEECa4ckz | ||||||
|  |  | ||||||
|  | # Container image name for ring | ||||||
|  | RING_IMAGE=ring:latest | ||||||
|  |  | ||||||
|  | # Container image name for pass | ||||||
|  | PASS_IMAGE=pass:latest | ||||||
|  |  | ||||||
|  | # Container image name for drive | ||||||
|  | DRIVE_IMAGE=drive:latest | ||||||
|  |  | ||||||
|  | # Container image name for sphere | ||||||
|  | SPHERE_IMAGE=sphere:latest | ||||||
|  |  | ||||||
|  | # Container image name for develop | ||||||
|  | DEVELOP_IMAGE=develop:latest | ||||||
							
								
								
									
										190
									
								
								.github/workflows/docker-build.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										190
									
								
								.github/workflows/docker-build.yml
									
									
									
									
										vendored
									
									
								
							| @@ -1,4 +1,4 @@ | |||||||
| name: Build and Push Microservices | name: Aspire Publish Workflow | ||||||
|  |  | ||||||
| on: | on: | ||||||
|   push: |   push: | ||||||
| @@ -7,7 +7,7 @@ on: | |||||||
|   workflow_dispatch: |   workflow_dispatch: | ||||||
|  |  | ||||||
| jobs: | jobs: | ||||||
|   build-sphere: |   publish: | ||||||
|     runs-on: ubuntu-latest |     runs-on: ubuntu-latest | ||||||
|     permissions: |     permissions: | ||||||
|       contents: read |       contents: read | ||||||
| @@ -15,174 +15,46 @@ jobs: | |||||||
|     steps: |     steps: | ||||||
|       - name: Checkout repository |       - name: Checkout repository | ||||||
|         uses: actions/checkout@v3 |         uses: actions/checkout@v3 | ||||||
|         with: |  | ||||||
|           fetch-depth: 0 |  | ||||||
|       - name: Setup NBGV |  | ||||||
|         uses: dotnet/nbgv@master |  | ||||||
|         id: nbgv |  | ||||||
|       - name: Set up Docker Buildx |  | ||||||
|         uses: docker/setup-buildx-action@v3 |  | ||||||
|       - name: Log in to GitHub Container Registry |  | ||||||
|         uses: docker/login-action@v3 |  | ||||||
|         with: |  | ||||||
|           registry: ghcr.io |  | ||||||
|           username: ${{ github.actor }} |  | ||||||
|           password: ${{ secrets.GITHUB_TOKEN }} |  | ||||||
|       - name: Build and push DysonNetwork.Sphere Docker image |  | ||||||
|         uses: docker/build-push-action@v6 |  | ||||||
|         with: |  | ||||||
|           file: DysonNetwork.Sphere/Dockerfile |  | ||||||
|           context: . |  | ||||||
|           push: true |  | ||||||
|           tags: ghcr.io/${{ vars.PACKAGE_OWNER }}/dyson-sphere:latest |  | ||||||
|           platforms: linux/amd64 |  | ||||||
|  |  | ||||||
|   build-pass: |       - name: Setup .NET | ||||||
|     runs-on: ubuntu-latest |         uses: actions/setup-dotnet@v3 | ||||||
|     permissions: |  | ||||||
|       contents: read |  | ||||||
|       packages: write |  | ||||||
|     steps: |  | ||||||
|       - name: Checkout repository |  | ||||||
|         uses: actions/checkout@v3 |  | ||||||
|         with: |         with: | ||||||
|           fetch-depth: 0 |           dotnet-version: "9.0.x" | ||||||
|       - name: Setup NBGV |  | ||||||
|         uses: dotnet/nbgv@master |  | ||||||
|         id: nbgv |  | ||||||
|       - name: Set up Docker Buildx |  | ||||||
|         uses: docker/setup-buildx-action@v3 |  | ||||||
|       - name: Log in to GitHub Container Registry |  | ||||||
|         uses: docker/login-action@v3 |  | ||||||
|         with: |  | ||||||
|           registry: ghcr.io |  | ||||||
|           username: ${{ github.actor }} |  | ||||||
|           password: ${{ secrets.GITHUB_TOKEN }} |  | ||||||
|       - name: Build and push DysonNetwork.Pass Docker image |  | ||||||
|         uses: docker/build-push-action@v6 |  | ||||||
|         with: |  | ||||||
|           file: DysonNetwork.Pass/Dockerfile |  | ||||||
|           context: . |  | ||||||
|           push: true |  | ||||||
|           tags: ghcr.io/${{ vars.PACKAGE_OWNER }}/dyson-pass:latest |  | ||||||
|           platforms: linux/amd64 |  | ||||||
|  |  | ||||||
|   build-ring: |  | ||||||
|     runs-on: ubuntu-latest |  | ||||||
|     permissions: |  | ||||||
|       contents: read |  | ||||||
|       packages: write |  | ||||||
|     steps: |  | ||||||
|       - name: Checkout repository |  | ||||||
|         uses: actions/checkout@v3 |  | ||||||
|         with: |  | ||||||
|           fetch-depth: 0 |  | ||||||
|       - name: Setup NBGV |  | ||||||
|         uses: dotnet/nbgv@master |  | ||||||
|         id: nbgv |  | ||||||
|       - name: Set up Docker Buildx |  | ||||||
|         uses: docker/setup-buildx-action@v3 |  | ||||||
|       - name: Log in to GitHub Container Registry |       - name: Log in to GitHub Container Registry | ||||||
|         uses: docker/login-action@v3 |         uses: docker/login-action@v3 | ||||||
|         with: |         with: | ||||||
|           registry: ghcr.io |           registry: ghcr.io | ||||||
|           username: ${{ github.actor }} |           username: ${{ github.actor }} | ||||||
|           password: ${{ secrets.GITHUB_TOKEN }} |           password: ${{ secrets.GITHUB_TOKEN }} | ||||||
|       - name: Build and push DysonNetwork.Pusher Docker image |  | ||||||
|         uses: docker/build-push-action@v6 |  | ||||||
|         with: |  | ||||||
|           file: DysonNetwork.Ring/Dockerfile |  | ||||||
|           context: . |  | ||||||
|           push: true |  | ||||||
|           tags: ghcr.io/${{ vars.PACKAGE_OWNER }}/dyson-ring:latest |  | ||||||
|           platforms: linux/amd64 |  | ||||||
|  |  | ||||||
|   build-drive: |       - name: Install Aspire CLI | ||||||
|     runs-on: ubuntu-latest |         run: dotnet tool install -g Aspire.Cli --prerelease | ||||||
|     permissions: |  | ||||||
|       contents: read |  | ||||||
|       packages: write |  | ||||||
|     steps: |  | ||||||
|       - name: Checkout repository |  | ||||||
|         uses: actions/checkout@v3 |  | ||||||
|         with: |  | ||||||
|           fetch-depth: 0 |  | ||||||
|       - name: Setup NBGV |  | ||||||
|         uses: dotnet/nbgv@master |  | ||||||
|         id: nbgv |  | ||||||
|       - name: Set up Docker Buildx |  | ||||||
|         uses: docker/setup-buildx-action@v3 |  | ||||||
|       - name: Log in to GitHub Container Registry |  | ||||||
|         uses: docker/login-action@v3 |  | ||||||
|         with: |  | ||||||
|           registry: ghcr.io |  | ||||||
|           username: ${{ github.actor }} |  | ||||||
|           password: ${{ secrets.GITHUB_TOKEN }} |  | ||||||
|       - name: Build and push DysonNetwork.Drive Docker image |  | ||||||
|         uses: docker/build-push-action@v6 |  | ||||||
|         with: |  | ||||||
|           file: DysonNetwork.Drive/Dockerfile |  | ||||||
|           context: . |  | ||||||
|           push: true |  | ||||||
|           tags: ghcr.io/${{ vars.PACKAGE_OWNER }}/dyson-drive:latest |  | ||||||
|           platforms: linux/amd64 |  | ||||||
|  |  | ||||||
|   build-gateway: |       - name: Build and Publish Aspire Application | ||||||
|     runs-on: ubuntu-latest |         run: aspire publish --project ./DysonNetwork.Control/DysonNetwork.Control.csproj --output publish | ||||||
|     permissions: |  | ||||||
|       contents: read |  | ||||||
|       packages: write |  | ||||||
|     steps: |  | ||||||
|       - name: Checkout repository |  | ||||||
|         uses: actions/checkout@v3 |  | ||||||
|         with: |  | ||||||
|           fetch-depth: 0 |  | ||||||
|       - name: Setup NBGV |  | ||||||
|         uses: dotnet/nbgv@master |  | ||||||
|         id: nbgv |  | ||||||
|       - name: Set up Docker Buildx |  | ||||||
|         uses: docker/setup-buildx-action@v3 |  | ||||||
|       - name: Log in to GitHub Container Registry |  | ||||||
|         uses: docker/login-action@v3 |  | ||||||
|         with: |  | ||||||
|           registry: ghcr.io |  | ||||||
|           username: ${{ github.actor }} |  | ||||||
|           password: ${{ secrets.GITHUB_TOKEN }} |  | ||||||
|       - name: Build and push DysonNetwork.Gateway Docker image |  | ||||||
|         uses: docker/build-push-action@v6 |  | ||||||
|         with: |  | ||||||
|           file: DysonNetwork.Gateway/Dockerfile |  | ||||||
|           context: . |  | ||||||
|           push: true |  | ||||||
|           tags: ghcr.io/${{ vars.PACKAGE_OWNER }}/dyson-gateway:latest |  | ||||||
|           platforms: linux/amd64 |  | ||||||
|  |  | ||||||
|   build-develop: |       - name: Tag and Push Images | ||||||
|     runs-on: ubuntu-latest |         run: | | ||||||
|     permissions: |           IMAGES=( "sphere" "pass" "ring" "drive" "develop" ) | ||||||
|       contents: read |  | ||||||
|       packages: write |           for image in "${IMAGES[@]}"; do | ||||||
|     steps: |             IMAGE_NAME="ghcr.io/${{ vars.PACKAGE_OWNER }}/dyson-$image:alpha" | ||||||
|       - name: Checkout repository |             SOURCE_IMAGE_NAME="$image:latest" # Aspire's default local image name | ||||||
|         uses: actions/checkout@v3 |  | ||||||
|  |             echo "Tagging and pushing $SOURCE_IMAGE_NAME to $IMAGE_NAME..." | ||||||
|  |             docker tag $SOURCE_IMAGE_NAME $IMAGE_NAME | ||||||
|  |             docker push $IMAGE_NAME | ||||||
|  |           done | ||||||
|  |  | ||||||
|  |       - name: Upload Aspire Publish Directory | ||||||
|  |         uses: actions/upload-artifact@v3 | ||||||
|         with: |         with: | ||||||
|           fetch-depth: 0 |           name: aspire-publish-output | ||||||
|       - name: Setup NBGV |           path: ./publish/ | ||||||
|         uses: dotnet/nbgv@master |  | ||||||
|         id: nbgv |       - name: Upload Docker Compose file | ||||||
|       - name: Set up Docker Buildx |         uses: actions/upload-artifact@v3 | ||||||
|         uses: docker/setup-buildx-action@v3 |  | ||||||
|       - name: Log in to GitHub Container Registry |  | ||||||
|         uses: docker/login-action@v3 |  | ||||||
|         with: |         with: | ||||||
|           registry: ghcr.io |           name: docker-compose-output | ||||||
|           username: ${{ github.actor }} |           path: ./publish/docker-compose.yml | ||||||
|           password: ${{ secrets.GITHUB_TOKEN }} |  | ||||||
|       - name: Build and push DysonNetwork.Develop Docker image |  | ||||||
|         uses: docker/build-push-action@v6 |  | ||||||
|         with: |  | ||||||
|           file: DysonNetwork.Develop/Dockerfile |  | ||||||
|           context: . |  | ||||||
|           push: true |  | ||||||
|           tags: ghcr.io/${{ vars.PACKAGE_OWNER }}/dyson-develop:latest |  | ||||||
|           platforms: linux/amd64 |  | ||||||
|   | |||||||
| @@ -9,30 +9,40 @@ var cache = builder.AddRedis("cache"); | |||||||
| var queue = builder.AddNats("queue").WithJetStream(); | var queue = builder.AddNats("queue").WithJetStream(); | ||||||
|  |  | ||||||
| var ringService = builder.AddProject<Projects.DysonNetwork_Ring>("ring") | var ringService = builder.AddProject<Projects.DysonNetwork_Ring>("ring") | ||||||
|     .WithReference(queue); |     .WithReference(queue) | ||||||
|  |     .WithHttpHealthCheck() | ||||||
|  |     .WithEndpoint(5001, 5001, "https", name: "grpc"); | ||||||
| var passService = builder.AddProject<Projects.DysonNetwork_Pass>("pass") | var passService = builder.AddProject<Projects.DysonNetwork_Pass>("pass") | ||||||
|     .WithReference(cache) |     .WithReference(cache) | ||||||
|     .WithReference(queue) |     .WithReference(queue) | ||||||
|     .WithReference(ringService); |     .WithReference(ringService) | ||||||
|  |     .WithHttpHealthCheck() | ||||||
|  |     .WithEndpoint(5001, 5001, "https", name: "grpc"); | ||||||
| var driveService = builder.AddProject<Projects.DysonNetwork_Drive>("drive") | var driveService = builder.AddProject<Projects.DysonNetwork_Drive>("drive") | ||||||
|     .WithReference(cache) |     .WithReference(cache) | ||||||
|     .WithReference(queue) |     .WithReference(queue) | ||||||
|     .WithReference(passService) |     .WithReference(passService) | ||||||
|     .WithReference(ringService); |     .WithReference(ringService) | ||||||
|  |     .WithHttpHealthCheck() | ||||||
|  |     .WithEndpoint(5001, 5001, "https", name: "grpc"); | ||||||
| var sphereService = builder.AddProject<Projects.DysonNetwork_Sphere>("sphere") | var sphereService = builder.AddProject<Projects.DysonNetwork_Sphere>("sphere") | ||||||
|     .WithReference(cache) |     .WithReference(cache) | ||||||
|     .WithReference(queue) |     .WithReference(queue) | ||||||
|     .WithReference(passService) |     .WithReference(passService) | ||||||
|     .WithReference(ringService); |     .WithReference(ringService) | ||||||
|  |     .WithHttpHealthCheck() | ||||||
|  |     .WithEndpoint(5001, 5001, "https", name: "grpc"); | ||||||
| var developService = builder.AddProject<Projects.DysonNetwork_Develop>("develop") | var developService = builder.AddProject<Projects.DysonNetwork_Develop>("develop") | ||||||
|     .WithReference(cache) |     .WithReference(cache) | ||||||
|     .WithReference(passService) |     .WithReference(passService) | ||||||
|     .WithReference(ringService); |     .WithReference(ringService) | ||||||
|  |     .WithHttpHealthCheck() | ||||||
|  |     .WithEndpoint(5001, 5001, "https", name: "grpc"); | ||||||
|  |  | ||||||
| // Extra double-ended references | // Extra double-ended references | ||||||
| ringService.WithReference(passService); | ringService.WithReference(passService); | ||||||
|  |  | ||||||
| var gateway = builder.AddYarp("gateway") | builder.AddYarp("gateway") | ||||||
|     .WithHostPort(5000) |     .WithHostPort(5000) | ||||||
|     .WithConfiguration(yarp => |     .WithConfiguration(yarp => | ||||||
|     { |     { | ||||||
| @@ -62,4 +72,6 @@ var gateway = builder.AddYarp("gateway") | |||||||
|             .WithTransformPathPrefix("/api"); |             .WithTransformPathPrefix("/api"); | ||||||
|     }); |     }); | ||||||
|  |  | ||||||
|  | builder.AddDockerComposeEnvironment("docker-compose"); | ||||||
|  |  | ||||||
| builder.Build().Run(); | builder.Build().Run(); | ||||||
| @@ -13,6 +13,7 @@ | |||||||
|  |  | ||||||
|     <ItemGroup> |     <ItemGroup> | ||||||
|         <PackageReference Include="Aspire.Hosting.AppHost" Version="9.4.2"/> |         <PackageReference Include="Aspire.Hosting.AppHost" Version="9.4.2"/> | ||||||
|  |         <PackageReference Include="Aspire.Hosting.Docker" Version="9.4.2-preview.1.25428.12" /> | ||||||
|         <PackageReference Include="Aspire.Hosting.Nats" Version="9.4.2" /> |         <PackageReference Include="Aspire.Hosting.Nats" Version="9.4.2" /> | ||||||
|         <PackageReference Include="Aspire.Hosting.Redis" Version="9.4.2" /> |         <PackageReference Include="Aspire.Hosting.Redis" Version="9.4.2" /> | ||||||
|         <PackageReference Include="Aspire.Hosting.Yarp" Version="9.4.2-preview.1.25428.12" /> |         <PackageReference Include="Aspire.Hosting.Yarp" Version="9.4.2-preview.1.25428.12" /> | ||||||
| @@ -23,7 +24,6 @@ | |||||||
|       <ProjectReference Include="..\DysonNetwork.Drive\DysonNetwork.Drive.csproj" /> |       <ProjectReference Include="..\DysonNetwork.Drive\DysonNetwork.Drive.csproj" /> | ||||||
|       <ProjectReference Include="..\DysonNetwork.Pass\DysonNetwork.Pass.csproj" /> |       <ProjectReference Include="..\DysonNetwork.Pass\DysonNetwork.Pass.csproj" /> | ||||||
|       <ProjectReference Include="..\DysonNetwork.Ring\DysonNetwork.Ring.csproj" /> |       <ProjectReference Include="..\DysonNetwork.Ring\DysonNetwork.Ring.csproj" /> | ||||||
|       <ProjectReference Include="..\DysonNetwork.Shared\DysonNetwork.Shared.csproj" /> |  | ||||||
|       <ProjectReference Include="..\DysonNetwork.Sphere\DysonNetwork.Sphere.csproj" /> |       <ProjectReference Include="..\DysonNetwork.Sphere\DysonNetwork.Sphere.csproj" /> | ||||||
|     </ItemGroup> |     </ItemGroup> | ||||||
|  |  | ||||||
|   | |||||||
| @@ -1,4 +1,5 @@ | |||||||
| using DysonNetwork.Shared.Proto; | using DysonNetwork.Shared.Proto; | ||||||
|  | using DysonNetwork.Shared.Registry; | ||||||
| using Microsoft.Extensions.Configuration; | using Microsoft.Extensions.Configuration; | ||||||
| using Microsoft.Extensions.DependencyInjection; | using Microsoft.Extensions.DependencyInjection; | ||||||
|  |  | ||||||
| @@ -10,15 +11,7 @@ public static class DysonAuthStartup | |||||||
|         this IServiceCollection services |         this IServiceCollection services | ||||||
|     ) |     ) | ||||||
|     { |     { | ||||||
|         services.AddGrpcClient<AuthService.AuthServiceClient>(o => |         services.AddAuthService(); | ||||||
|         { |  | ||||||
|             o.Address = new Uri("https://pass"); |  | ||||||
|         }); |  | ||||||
|  |  | ||||||
|         services.AddGrpcClient<PermissionService.PermissionServiceClient>(o => |  | ||||||
|         { |  | ||||||
|             o.Address = new Uri("https://pass"); |  | ||||||
|         }); |  | ||||||
|  |  | ||||||
|         services.AddAuthentication(options => |         services.AddAuthentication(options => | ||||||
|             { |             { | ||||||
|   | |||||||
| @@ -20,8 +20,53 @@ public static class KestrelConfiguration | |||||||
|         builder.WebHost.ConfigureKestrel(options => |         builder.WebHost.ConfigureKestrel(options => | ||||||
|         { |         { | ||||||
|             options.Limits.MaxRequestBodySize = maxRequestBodySize; |             options.Limits.MaxRequestBodySize = maxRequestBodySize; | ||||||
|  |  | ||||||
|  |             // gRPC | ||||||
|  |             options.ListenAnyIP(5001, listenOptions => | ||||||
|  |             { | ||||||
|  |                 listenOptions.Protocols = HttpProtocols.Http2; | ||||||
|  |                  | ||||||
|  |                 var selfSignedCert = _CreateSelfSignedCertificate(); | ||||||
|  |                 listenOptions.UseHttps(selfSignedCert); | ||||||
|  |             }); | ||||||
|  |  | ||||||
|  |             var httpPorts = configuration.GetValue<string>("HTTP_PORTS", "5000") | ||||||
|  |                 .Split(',', StringSplitOptions.RemoveEmptyEntries) | ||||||
|  |                 .Select(p => int.Parse(p.Trim())) | ||||||
|  |                 .ToArray(); | ||||||
|  |  | ||||||
|  |             // Regular HTTP | ||||||
|  |             foreach (var httpPort in httpPorts) | ||||||
|  |                 options.ListenAnyIP(httpPort, | ||||||
|  |                     listenOptions => { listenOptions.Protocols = HttpProtocols.Http1AndHttp2; }); | ||||||
|         }); |         }); | ||||||
|  |  | ||||||
|         return builder; |         return builder; | ||||||
|     } |     } | ||||||
|  |      | ||||||
|  |     static X509Certificate2 _CreateSelfSignedCertificate() | ||||||
|  |     { | ||||||
|  |         using var rsa = RSA.Create(2048); | ||||||
|  |         var certRequest = new CertificateRequest( | ||||||
|  |             "CN=dyson.network", // Common Name for the certificate | ||||||
|  |             rsa, | ||||||
|  |             HashAlgorithmName.SHA256, | ||||||
|  |             RSASignaturePadding.Pkcs1); | ||||||
|  |  | ||||||
|  |         // Add extensions (e.g., for server authentication) | ||||||
|  |         certRequest.CertificateExtensions.Add( | ||||||
|  |             new X509EnhancedKeyUsageExtension( | ||||||
|  |                 new OidCollection { new Oid("1.3.6.1.5.5.7.3.1") }, // Server Authentication | ||||||
|  |                 false)); | ||||||
|  |  | ||||||
|  |         // Set validity period (e.g., 1 year) | ||||||
|  |         var notBefore = DateTimeOffset.UtcNow.AddDays(-1); | ||||||
|  |         var notAfter = notBefore.AddYears(1); | ||||||
|  |  | ||||||
|  |         var certificate = certRequest.CreateSelfSigned(notBefore, notAfter); | ||||||
|  |      | ||||||
|  |         // Export to PKCS#12 and load using X509CertificateLoader | ||||||
|  |         var pfxBytes = certificate.Export(X509ContentType.Pfx); | ||||||
|  |         return X509CertificateLoader.LoadPkcs12(pfxBytes, password: null); | ||||||
|  |     } | ||||||
| } | } | ||||||
| @@ -8,72 +8,94 @@ public static class ServiceInjectionHelper | |||||||
| { | { | ||||||
|     public static IServiceCollection AddRingService(this IServiceCollection services) |     public static IServiceCollection AddRingService(this IServiceCollection services) | ||||||
|     { |     { | ||||||
|         services.AddGrpcClient<RingService.RingServiceClient>(o => |         services | ||||||
|         { |             .AddGrpcClient<RingService.RingServiceClient>(o => o.Address = new Uri("https://_grpc.ring")) | ||||||
|             o.Address = new Uri("https://ring"); |             .ConfigurePrimaryHttpMessageHandler(_ => new HttpClientHandler() | ||||||
|         }); |                 { ServerCertificateCustomValidationCallback = (_, _, _, _) => true } | ||||||
|  |             ); | ||||||
|  |  | ||||||
|  |         return services; | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     public static IServiceCollection AddAuthService(this IServiceCollection services) | ||||||
|  |     { | ||||||
|  |         services | ||||||
|  |             .AddGrpcClient<AuthService.AuthServiceClient>(o => o.Address = new Uri("https://_grpc.pass")) | ||||||
|  |             .ConfigurePrimaryHttpMessageHandler(_ => new HttpClientHandler() | ||||||
|  |                 { ServerCertificateCustomValidationCallback = (_, _, _, _) => true } | ||||||
|  |             ); | ||||||
|  |  | ||||||
|  |         services | ||||||
|  |             .AddGrpcClient<PermissionService.PermissionServiceClient>(o => o.Address = new Uri("https://_grpc.pass")) | ||||||
|  |             .ConfigurePrimaryHttpMessageHandler(_ => new HttpClientHandler() | ||||||
|  |                 { ServerCertificateCustomValidationCallback = (_, _, _, _) => true } | ||||||
|  |             ); | ||||||
|  |  | ||||||
|         return services; |         return services; | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     public static IServiceCollection AddAccountService(this IServiceCollection services) |     public static IServiceCollection AddAccountService(this IServiceCollection services) | ||||||
|     { |     { | ||||||
|         services.AddGrpcClient<AccountService.AccountServiceClient>(o => |         services | ||||||
|         { |             .AddGrpcClient<AccountService.AccountServiceClient>(o => o.Address = new Uri("https://_grpc.pass") ) | ||||||
|             o.Address = new Uri("https://pass"); |             .ConfigurePrimaryHttpMessageHandler(_ => new HttpClientHandler() | ||||||
|         }); |                 { ServerCertificateCustomValidationCallback = (_, _, _, _) => true } | ||||||
|  |             ); | ||||||
|         services.AddSingleton<AccountClientHelper>(); |         services.AddSingleton<AccountClientHelper>(); | ||||||
|  |  | ||||||
|         services.AddGrpcClient<BotAccountReceiverService.BotAccountReceiverServiceClient>(o => |         services | ||||||
|         { |             .AddGrpcClient<BotAccountReceiverService.BotAccountReceiverServiceClient>(o => | ||||||
|             o.Address = new Uri("https://pass"); |                 o.Address = new Uri("https://_grpc.pass") | ||||||
|         }); |             ) | ||||||
|  |             .ConfigurePrimaryHttpMessageHandler(_ => new HttpClientHandler() | ||||||
|  |                 { ServerCertificateCustomValidationCallback = (_, _, _, _) => true } | ||||||
|  |             ); | ||||||
|  |  | ||||||
|         services.AddGrpcClient<ActionLogService.ActionLogServiceClient>(o => |         services.AddGrpcClient<ActionLogService.ActionLogServiceClient>(o => o.Address = new Uri("https://_grpc.pass")) | ||||||
|         { |             .ConfigurePrimaryHttpMessageHandler(_ => new HttpClientHandler() | ||||||
|             o.Address = new Uri("https://pass"); |                 { ServerCertificateCustomValidationCallback = (_, _, _, _) => true } | ||||||
|         });  |             ); | ||||||
|  |  | ||||||
|         services.AddGrpcClient<PaymentService.PaymentServiceClient>(o => |         services.AddGrpcClient<PaymentService.PaymentServiceClient>(o => o.Address = new Uri("https://_grpc.pass")) | ||||||
|         { |             .ConfigurePrimaryHttpMessageHandler(_ => new HttpClientHandler() | ||||||
|             o.Address = new Uri("https://pass"); |                 { ServerCertificateCustomValidationCallback = (_, _, _, _) => true } | ||||||
|         }); |             ); | ||||||
|  |  | ||||||
|         return services; |         return services; | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     public static IServiceCollection AddDriveService(this IServiceCollection services) |     public static IServiceCollection AddDriveService(this IServiceCollection services) | ||||||
|     { |     { | ||||||
|         services.AddGrpcClient<FileService.FileServiceClient>(o => |         services.AddGrpcClient<FileService.FileServiceClient>(o => o.Address = new Uri("https://_grpc.drive")) | ||||||
|         { |             .ConfigurePrimaryHttpMessageHandler(_ => new HttpClientHandler() | ||||||
|             o.Address = new Uri("https://drive"); |                 { ServerCertificateCustomValidationCallback = (_, _, _, _) => true } | ||||||
|         });        |             ); | ||||||
|  |  | ||||||
|         services.AddGrpcClient<FileReferenceService.FileReferenceServiceClient>(o => |         services.AddGrpcClient<FileReferenceService.FileReferenceServiceClient>(o => o.Address = new Uri("https://_grpc.drive")) | ||||||
|         { |             .ConfigurePrimaryHttpMessageHandler(_ => new HttpClientHandler() | ||||||
|             o.Address = new Uri("https://drive"); |                 { ServerCertificateCustomValidationCallback = (_, _, _, _) => true } | ||||||
|         }); |             ); | ||||||
|  |  | ||||||
|         return services; |         return services; | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     public static IServiceCollection AddPublisherService(this IServiceCollection services) |     public static IServiceCollection AddPublisherService(this IServiceCollection services) | ||||||
|     { |     { | ||||||
|         services.AddGrpcClient<PublisherService.PublisherServiceClient>(o => |         services.AddGrpcClient<PublisherService.PublisherServiceClient>(o => o.Address = new Uri("https://_grpc.sphere")) | ||||||
|         { |             .ConfigurePrimaryHttpMessageHandler(_ => new HttpClientHandler() | ||||||
|             o.Address = new Uri("https://sphere"); |                 { ServerCertificateCustomValidationCallback = (_, _, _, _) => true } | ||||||
|         }); |             ); | ||||||
|  |  | ||||||
|         return services; |         return services; | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     public static IServiceCollection AddDevelopService(this IServiceCollection services) |     public static IServiceCollection AddDevelopService(this IServiceCollection services) | ||||||
|     { |     { | ||||||
|         services.AddGrpcClient<CustomAppService.CustomAppServiceClient>(o => |         services.AddGrpcClient<CustomAppService.CustomAppServiceClient>(o => o.Address = new Uri("https://_grpc.develop")) | ||||||
|         { |             .ConfigurePrimaryHttpMessageHandler(_ => new HttpClientHandler() | ||||||
|             o.Address = new Uri("https://develop"); |                 { ServerCertificateCustomValidationCallback = (_, _, _, _) => true } | ||||||
|         }); |             ); | ||||||
|  |  | ||||||
|         return services; |         return services; | ||||||
|     } |     } | ||||||
|  } | } | ||||||
| @@ -2,9 +2,7 @@ using System.ComponentModel.DataAnnotations; | |||||||
| using System.ComponentModel.DataAnnotations.Schema; | using System.ComponentModel.DataAnnotations.Schema; | ||||||
| using System.Text.Json.Serialization; | using System.Text.Json.Serialization; | ||||||
| using DysonNetwork.Shared.Data; | using DysonNetwork.Shared.Data; | ||||||
| using DysonNetwork.Shared.Proto; |  | ||||||
| using NodaTime; | using NodaTime; | ||||||
| using Account = DysonNetwork.Pass.Account.Account; |  | ||||||
|  |  | ||||||
| namespace DysonNetwork.Sphere.Chat; | namespace DysonNetwork.Sphere.Chat; | ||||||
|  |  | ||||||
| @@ -75,7 +73,7 @@ public class ChatMember : ModelBase | |||||||
|     public Guid ChatRoomId { get; set; } |     public Guid ChatRoomId { get; set; } | ||||||
|     public ChatRoom ChatRoom { get; set; } = null!; |     public ChatRoom ChatRoom { get; set; } = null!; | ||||||
|     public Guid AccountId { get; set; } |     public Guid AccountId { get; set; } | ||||||
|     [NotMapped] public Account? Account { get; set; } |     [NotMapped] public AccountReference? Account { get; set; } | ||||||
|     [NotMapped] public AccountStatusReference? Status { get; set; } |     [NotMapped] public AccountStatusReference? Status { get; set; } | ||||||
|  |  | ||||||
|     [MaxLength(1024)] public string? Nick { get; set; } |     [MaxLength(1024)] public string? Nick { get; set; } | ||||||
| @@ -108,7 +106,7 @@ public class ChatMemberTransmissionObject : ModelBase | |||||||
|     public Guid Id { get; set; } |     public Guid Id { get; set; } | ||||||
|     public Guid ChatRoomId { get; set; } |     public Guid ChatRoomId { get; set; } | ||||||
|     public Guid AccountId { get; set; } |     public Guid AccountId { get; set; } | ||||||
|     [NotMapped] public Account Account { get; set; } = null!; |     [NotMapped] public AccountReference Account { get; set; } = null!; | ||||||
|  |  | ||||||
|     [MaxLength(1024)] public string? Nick { get; set; } |     [MaxLength(1024)] public string? Nick { get; set; } | ||||||
|  |  | ||||||
|   | |||||||
| @@ -2,7 +2,7 @@ using DysonNetwork.Shared.Cache; | |||||||
| using DysonNetwork.Shared.Registry; | using DysonNetwork.Shared.Registry; | ||||||
| using Microsoft.EntityFrameworkCore; | using Microsoft.EntityFrameworkCore; | ||||||
| using NodaTime; | using NodaTime; | ||||||
| using Account = DysonNetwork.Pass.Account.Account; | using Account = DysonNetwork.Shared.Data.AccountReference; | ||||||
|  |  | ||||||
| namespace DysonNetwork.Sphere.Chat; | namespace DysonNetwork.Sphere.Chat; | ||||||
|  |  | ||||||
|   | |||||||
| @@ -161,7 +161,6 @@ | |||||||
|     <ItemGroup> |     <ItemGroup> | ||||||
|         <ProjectReference Include="..\DysonNetwork.ServiceDefaults\DysonNetwork.ServiceDefaults.csproj" /> |         <ProjectReference Include="..\DysonNetwork.ServiceDefaults\DysonNetwork.ServiceDefaults.csproj" /> | ||||||
|         <ProjectReference Include="..\DysonNetwork.Shared\DysonNetwork.Shared.csproj"/> |         <ProjectReference Include="..\DysonNetwork.Shared\DysonNetwork.Shared.csproj"/> | ||||||
|         <ProjectReference Include="..\DysonNetwork.Pass\DysonNetwork.Pass.csproj"/> |  | ||||||
|     </ItemGroup> |     </ItemGroup> | ||||||
|  |  | ||||||
| </Project> | </Project> | ||||||
|   | |||||||
| @@ -2,7 +2,6 @@ using System.ComponentModel.DataAnnotations; | |||||||
| using System.ComponentModel.DataAnnotations.Schema; | using System.ComponentModel.DataAnnotations.Schema; | ||||||
| using System.Text.Json; | using System.Text.Json; | ||||||
| using System.Text.Json.Serialization; | using System.Text.Json.Serialization; | ||||||
| using DysonNetwork.Pass.Account; |  | ||||||
| using DysonNetwork.Shared.Data; | using DysonNetwork.Shared.Data; | ||||||
| using NodaTime; | using NodaTime; | ||||||
|  |  | ||||||
| @@ -64,5 +63,5 @@ public class PollAnswer : ModelBase | |||||||
|     public Guid AccountId { get; set; } |     public Guid AccountId { get; set; } | ||||||
|     public Guid PollId { get; set; } |     public Guid PollId { get; set; } | ||||||
|     [JsonIgnore] public Poll? Poll { get; set; } |     [JsonIgnore] public Poll? Poll { get; set; } | ||||||
|     [NotMapped] public Account? Account { get; set; } |     [NotMapped] public AccountReference? Account { get; set; } | ||||||
| } | } | ||||||
|   | |||||||
| @@ -1,5 +1,6 @@ | |||||||
| using System.ComponentModel.DataAnnotations; | using System.ComponentModel.DataAnnotations; | ||||||
| using System.Text.Json; | using System.Text.Json; | ||||||
|  | using DysonNetwork.Shared.Data; | ||||||
| using DysonNetwork.Shared.Proto; | using DysonNetwork.Shared.Proto; | ||||||
| using DysonNetwork.Shared.Registry; | using DysonNetwork.Shared.Registry; | ||||||
| using Microsoft.AspNetCore.Authorization; | using Microsoft.AspNetCore.Authorization; | ||||||
| @@ -116,7 +117,7 @@ public class PollController( | |||||||
|             { |             { | ||||||
|                 var protoValue = answeredAccounts.FirstOrDefault(a => a.Id == answer.AccountId.ToString()); |                 var protoValue = answeredAccounts.FirstOrDefault(a => a.Id == answer.AccountId.ToString()); | ||||||
|                 if (protoValue is not null) |                 if (protoValue is not null) | ||||||
|                     answer.Account = Pass.Account.Account.FromProtoValue(protoValue); |                     answer.Account = AccountReference.FromProtoValue(protoValue); | ||||||
|             } |             } | ||||||
|         } |         } | ||||||
|  |  | ||||||
|   | |||||||
| @@ -7,7 +7,7 @@ using Microsoft.EntityFrameworkCore; | |||||||
| using NodaTime; | using NodaTime; | ||||||
| using NodaTime.Serialization.Protobuf; | using NodaTime.Serialization.Protobuf; | ||||||
| using VerificationMark = DysonNetwork.Shared.Data.VerificationMark; | using VerificationMark = DysonNetwork.Shared.Data.VerificationMark; | ||||||
| using Account = DysonNetwork.Pass.Account.Account; | using Account = DysonNetwork.Shared.Data.AccountReference; | ||||||
|  |  | ||||||
| namespace DysonNetwork.Sphere.Publisher; | namespace DysonNetwork.Sphere.Publisher; | ||||||
|  |  | ||||||
|   | |||||||
| @@ -34,7 +34,7 @@ public class PublisherController( | |||||||
|         var account = await accounts.GetAccountAsync( |         var account = await accounts.GetAccountAsync( | ||||||
|             new GetAccountRequest { Id = publisher.AccountId.Value.ToString() } |             new GetAccountRequest { Id = publisher.AccountId.Value.ToString() } | ||||||
|         ); |         ); | ||||||
|         publisher.Account = Pass.Account.Account.FromProtoValue(account); |         publisher.Account = AccountReference.FromProtoValue(account); | ||||||
|  |  | ||||||
|         return Ok(publisher); |         return Ok(publisher); | ||||||
|     } |     } | ||||||
|   | |||||||
| @@ -382,7 +382,7 @@ public class PublisherService( | |||||||
|     public async Task<PublisherMember> LoadMemberAccount(PublisherMember member) |     public async Task<PublisherMember> LoadMemberAccount(PublisherMember member) | ||||||
|     { |     { | ||||||
|         var account = await accountsHelper.GetAccount(member.AccountId); |         var account = await accountsHelper.GetAccount(member.AccountId); | ||||||
|         member.Account = Pass.Account.Account.FromProtoValue(account); |         member.Account = AccountReference.FromProtoValue(account); | ||||||
|         return member; |         return member; | ||||||
|     } |     } | ||||||
|  |  | ||||||
| @@ -394,7 +394,7 @@ public class PublisherService( | |||||||
|         return members.Select(m => |         return members.Select(m => | ||||||
|         { |         { | ||||||
|             if (accounts.TryGetValue(m.AccountId, out var account)) |             if (accounts.TryGetValue(m.AccountId, out var account)) | ||||||
|                 m.Account = Pass.Account.Account.FromProtoValue(account); |                 m.Account = AccountReference.FromProtoValue(account); | ||||||
|             return m; |             return m; | ||||||
|         }).ToList(); |         }).ToList(); | ||||||
|     } |     } | ||||||
|   | |||||||
| @@ -1,7 +1,6 @@ | |||||||
| using System.ComponentModel.DataAnnotations; | using System.ComponentModel.DataAnnotations; | ||||||
| using System.ComponentModel.DataAnnotations.Schema; | using System.ComponentModel.DataAnnotations.Schema; | ||||||
| using System.Text.Json.Serialization; | using System.Text.Json.Serialization; | ||||||
| using DysonNetwork.Pass.Account; |  | ||||||
| using DysonNetwork.Shared.Data; | using DysonNetwork.Shared.Data; | ||||||
| using DysonNetwork.Sphere.Chat; | using DysonNetwork.Sphere.Chat; | ||||||
| using Microsoft.EntityFrameworkCore; | using Microsoft.EntityFrameworkCore; | ||||||
| @@ -48,7 +47,7 @@ public class RealmMember : ModelBase | |||||||
|     public Guid RealmId { get; set; } |     public Guid RealmId { get; set; } | ||||||
|     public Realm Realm { get; set; } = null!; |     public Realm Realm { get; set; } = null!; | ||||||
|     public Guid AccountId { get; set; } |     public Guid AccountId { get; set; } | ||||||
|     [NotMapped] public Account? Account { get; set; } |     [NotMapped] public AccountReference? Account { get; set; } | ||||||
|     [NotMapped] public AccountStatusReference? Status { get; set; } |     [NotMapped] public AccountStatusReference? Status { get; set; } | ||||||
|  |  | ||||||
|     public int Role { get; set; } = RealmMemberRole.Normal; |     public int Role { get; set; } = RealmMemberRole.Normal; | ||||||
|   | |||||||
| @@ -1,5 +1,6 @@ | |||||||
| using DysonNetwork.Shared; | using DysonNetwork.Shared; | ||||||
| using DysonNetwork.Shared.Cache; | using DysonNetwork.Shared.Cache; | ||||||
|  | using DysonNetwork.Shared.Data; | ||||||
| using DysonNetwork.Shared.Proto; | using DysonNetwork.Shared.Proto; | ||||||
| using DysonNetwork.Shared.Registry; | using DysonNetwork.Shared.Registry; | ||||||
| using DysonNetwork.Sphere.Localization; | using DysonNetwork.Sphere.Localization; | ||||||
| @@ -73,7 +74,7 @@ public class RealmService( | |||||||
|     public async Task<RealmMember> LoadMemberAccount(RealmMember member) |     public async Task<RealmMember> LoadMemberAccount(RealmMember member) | ||||||
|     { |     { | ||||||
|         var account = await accountsHelper.GetAccount(member.AccountId); |         var account = await accountsHelper.GetAccount(member.AccountId); | ||||||
|         member.Account = Pass.Account.Account.FromProtoValue(account); |         member.Account = AccountReference.FromProtoValue(account); | ||||||
|         return member; |         return member; | ||||||
|     } |     } | ||||||
|  |  | ||||||
| @@ -85,7 +86,7 @@ public class RealmService( | |||||||
|         return members.Select(m => |         return members.Select(m => | ||||||
|         { |         { | ||||||
|             if (accounts.TryGetValue(m.AccountId, out var account)) |             if (accounts.TryGetValue(m.AccountId, out var account)) | ||||||
|                 m.Account = Pass.Account.Account.FromProtoValue(account); |                 m.Account = AccountReference.FromProtoValue(account); | ||||||
|             return m; |             return m; | ||||||
|         }).ToList(); |         }).ToList(); | ||||||
|     } |     } | ||||||
|   | |||||||
| @@ -1,7 +1,6 @@ | |||||||
| using System.ComponentModel.DataAnnotations; | using System.ComponentModel.DataAnnotations; | ||||||
| using System.ComponentModel.DataAnnotations.Schema; | using System.ComponentModel.DataAnnotations.Schema; | ||||||
| using System.Text.Json.Serialization; | using System.Text.Json.Serialization; | ||||||
| using DysonNetwork.Pass.Account; |  | ||||||
| using DysonNetwork.Shared.Data; | using DysonNetwork.Shared.Data; | ||||||
| using Microsoft.EntityFrameworkCore; | using Microsoft.EntityFrameworkCore; | ||||||
|  |  | ||||||
| @@ -46,5 +45,5 @@ public class StickerPackOwnership : ModelBase | |||||||
|     public Guid PackId { get; set; } |     public Guid PackId { get; set; } | ||||||
|     public StickerPack Pack { get; set; } = null!; |     public StickerPack Pack { get; set; } = null!; | ||||||
|     public Guid AccountId { get; set; } |     public Guid AccountId { get; set; } | ||||||
|     [NotMapped] public Account Account { get; set; } = null!; |     [NotMapped] public AccountReference Account { get; set; } = null!; | ||||||
| } | } | ||||||
|   | |||||||
| @@ -1,7 +1,6 @@ | |||||||
| using System.ComponentModel.DataAnnotations; | using System.ComponentModel.DataAnnotations; | ||||||
| using System.ComponentModel.DataAnnotations.Schema; | using System.ComponentModel.DataAnnotations.Schema; | ||||||
| using System.Text.Json.Serialization; | using System.Text.Json.Serialization; | ||||||
| using DysonNetwork.Pass.Account; |  | ||||||
| using DysonNetwork.Shared.Data; | using DysonNetwork.Shared.Data; | ||||||
|  |  | ||||||
| namespace DysonNetwork.Sphere.WebReader; | namespace DysonNetwork.Sphere.WebReader; | ||||||
| @@ -54,5 +53,5 @@ public class WebFeedSubscription : ModelBase | |||||||
|     public Guid FeedId { get; set; } |     public Guid FeedId { get; set; } | ||||||
|     public WebFeed Feed { get; set; } = null!; |     public WebFeed Feed { get; set; } = null!; | ||||||
|     public Guid AccountId { get; set; } |     public Guid AccountId { get; set; } | ||||||
|     [NotMapped] public Account Account { get; set; } = null!; |     [NotMapped] public AccountReference Account { get; set; } = null!; | ||||||
| } | } | ||||||
| @@ -22,6 +22,7 @@ | |||||||
| 	<s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003AClaim_002Ecs_002Fl_003A_002E_002E_003F_002E_002E_003F_002E_002E_003FLibrary_003FApplication_0020Support_003FJetBrains_003FRider2024_002E3_003Fresharper_002Dhost_003FDecompilerCache_003Fdecompiler_003Fa7fdc52b6e574ae7b9822133be91162a15800_003Ff7_003Feebffd8d_003FClaim_002Ecs/@EntryIndexedValue">ForceIncluded</s:String> | 	<s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003AClaim_002Ecs_002Fl_003A_002E_002E_003F_002E_002E_003F_002E_002E_003FLibrary_003FApplication_0020Support_003FJetBrains_003FRider2024_002E3_003Fresharper_002Dhost_003FDecompilerCache_003Fdecompiler_003Fa7fdc52b6e574ae7b9822133be91162a15800_003Ff7_003Feebffd8d_003FClaim_002Ecs/@EntryIndexedValue">ForceIncluded</s:String> | ||||||
| 	<s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003AClusterConfig_002Ecs_002Fl_003A_002E_002E_003F_002E_002E_003F_002E_002E_003FLibrary_003FApplication_0020Support_003FJetBrains_003FRider2025_002E1_003Fresharper_002Dhost_003FDecompilerCache_003Fdecompiler_003Fbf3f51607a3e4e76b5b91640cd7409195c430_003F3f_003F87f581ed_003FClusterConfig_002Ecs/@EntryIndexedValue">ForceIncluded</s:String> | 	<s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003AClusterConfig_002Ecs_002Fl_003A_002E_002E_003F_002E_002E_003F_002E_002E_003FLibrary_003FApplication_0020Support_003FJetBrains_003FRider2025_002E1_003Fresharper_002Dhost_003FDecompilerCache_003Fdecompiler_003Fbf3f51607a3e4e76b5b91640cd7409195c430_003F3f_003F87f581ed_003FClusterConfig_002Ecs/@EntryIndexedValue">ForceIncluded</s:String> | ||||||
| 	<s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003AConnectionMultiplexer_002Ecs_002Fl_003A_002E_002E_003F_002E_002E_003F_002E_002E_003FLibrary_003FApplication_0020Support_003FJetBrains_003FRider2025_002E1_003Fresharper_002Dhost_003FSourcesCache_003F2ed0e2f073b1d77b98dadb822da09ee8a9dfb91bf29bf2bbaecb8750d7e74cc9_003FConnectionMultiplexer_002Ecs/@EntryIndexedValue">ForceIncluded</s:String> | 	<s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003AConnectionMultiplexer_002Ecs_002Fl_003A_002E_002E_003F_002E_002E_003F_002E_002E_003FLibrary_003FApplication_0020Support_003FJetBrains_003FRider2025_002E1_003Fresharper_002Dhost_003FSourcesCache_003F2ed0e2f073b1d77b98dadb822da09ee8a9dfb91bf29bf2bbaecb8750d7e74cc9_003FConnectionMultiplexer_002Ecs/@EntryIndexedValue">ForceIncluded</s:String> | ||||||
|  | 	<s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003AContainerResourceBuilderExtensions_002Ecs_002Fl_003A_002E_002E_003F_002E_002E_003F_002E_002E_003FLibrary_003FApplication_0020Support_003FJetBrains_003FRider2025_002E2_003Fresharper_002Dhost_003FDecompilerCache_003Fdecompiler_003F19256b6d2a8a458692f07fe8d98d79e9161628_003Fd7_003F266d041b_003FContainerResourceBuilderExtensions_002Ecs/@EntryIndexedValue">ForceIncluded</s:String> | ||||||
| 	<s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003AControllerBase_002Ecs_002Fl_003A_002E_002E_003F_002E_002E_003F_002E_002E_003FLibrary_003FApplication_0020Support_003FJetBrains_003FRider2025_002E1_003Fresharper_002Dhost_003FDecompilerCache_003Fdecompiler_003F0b5acdd962e549369896cece0026e556214600_003Ff6_003Fdf150bb3_003FControllerBase_002Ecs/@EntryIndexedValue">ForceIncluded</s:String> | 	<s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003AControllerBase_002Ecs_002Fl_003A_002E_002E_003F_002E_002E_003F_002E_002E_003FLibrary_003FApplication_0020Support_003FJetBrains_003FRider2025_002E1_003Fresharper_002Dhost_003FDecompilerCache_003Fdecompiler_003F0b5acdd962e549369896cece0026e556214600_003Ff6_003Fdf150bb3_003FControllerBase_002Ecs/@EntryIndexedValue">ForceIncluded</s:String> | ||||||
| 	<s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003AController_002Ecs_002Fl_003A_002E_002E_003F_002E_002E_003F_002E_002E_003FLibrary_003FApplication_0020Support_003FJetBrains_003FRider2025_002E1_003Fresharper_002Dhost_003FDecompilerCache_003Fdecompiler_003Fb320290c1b964c3e88434ff5505d9086c9a00_003Fdf_003F95b535f9_003FController_002Ecs/@EntryIndexedValue">ForceIncluded</s:String> | 	<s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003AController_002Ecs_002Fl_003A_002E_002E_003F_002E_002E_003F_002E_002E_003FLibrary_003FApplication_0020Support_003FJetBrains_003FRider2025_002E1_003Fresharper_002Dhost_003FDecompilerCache_003Fdecompiler_003Fb320290c1b964c3e88434ff5505d9086c9a00_003Fdf_003F95b535f9_003FController_002Ecs/@EntryIndexedValue">ForceIncluded</s:String> | ||||||
| 	<s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003ACookieOptions_002Ecs_002Fl_003A_002E_002E_003F_002E_002E_003F_002E_002E_003FLibrary_003FApplication_0020Support_003FJetBrains_003FRider2025_002E1_003Fresharper_002Dhost_003FDecompilerCache_003Fdecompiler_003F663f33943e4c4e889dc7050c1e97e703e000_003F89_003Fb06980d7_003FCookieOptions_002Ecs/@EntryIndexedValue">ForceIncluded</s:String> | 	<s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003ACookieOptions_002Ecs_002Fl_003A_002E_002E_003F_002E_002E_003F_002E_002E_003FLibrary_003FApplication_0020Support_003FJetBrains_003FRider2025_002E1_003Fresharper_002Dhost_003FDecompilerCache_003Fdecompiler_003F663f33943e4c4e889dc7050c1e97e703e000_003F89_003Fb06980d7_003FCookieOptions_002Ecs/@EntryIndexedValue">ForceIncluded</s:String> | ||||||
| @@ -33,6 +34,7 @@ | |||||||
| 	<s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003ADbFunctionsExtensions_002Ecs_002Fl_003A_002E_002E_003F_002E_002E_003F_002E_002E_003FLibrary_003FApplication_0020Support_003FJetBrains_003FRider2025_002E1_003Fresharper_002Dhost_003FSourcesCache_003Fc1c46ed28c61e1caa79185e4375a8ae7cd11cd5ba8853dcb37577f93f2ca8d5_003FDbFunctionsExtensions_002Ecs/@EntryIndexedValue">ForceIncluded</s:String> | 	<s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003ADbFunctionsExtensions_002Ecs_002Fl_003A_002E_002E_003F_002E_002E_003F_002E_002E_003FLibrary_003FApplication_0020Support_003FJetBrains_003FRider2025_002E1_003Fresharper_002Dhost_003FSourcesCache_003Fc1c46ed28c61e1caa79185e4375a8ae7cd11cd5ba8853dcb37577f93f2ca8d5_003FDbFunctionsExtensions_002Ecs/@EntryIndexedValue">ForceIncluded</s:String> | ||||||
| 	<s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003ADiagnosticServiceCollectionExtensions_002Ecs_002Fl_003A_002E_002E_003F_002E_002E_003F_002E_002E_003FLibrary_003FApplication_0020Support_003FJetBrains_003FRider2025_002E1_003Fresharper_002Dhost_003FDecompilerCache_003Fdecompiler_003F47e01f36dea14a23aaea6e0391c1347ace00_003F3c_003F140e6d8b_003FDiagnosticServiceCollectionExtensions_002Ecs/@EntryIndexedValue">ForceIncluded</s:String> | 	<s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003ADiagnosticServiceCollectionExtensions_002Ecs_002Fl_003A_002E_002E_003F_002E_002E_003F_002E_002E_003FLibrary_003FApplication_0020Support_003FJetBrains_003FRider2025_002E1_003Fresharper_002Dhost_003FDecompilerCache_003Fdecompiler_003F47e01f36dea14a23aaea6e0391c1347ace00_003F3c_003F140e6d8b_003FDiagnosticServiceCollectionExtensions_002Ecs/@EntryIndexedValue">ForceIncluded</s:String> | ||||||
| 	<s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003ADirectory_002Ecs_002Fl_003A_002E_002E_003F_002E_002E_003F_002E_002E_003FLibrary_003FApplication_0020Support_003FJetBrains_003FRider2024_002E3_003Fresharper_002Dhost_003FDecompilerCache_003Fdecompiler_003Fb6f0571a6bc744b0b551fd4578292582e54c00_003Fde_003F94973e27_003FDirectory_002Ecs/@EntryIndexedValue">ForceIncluded</s:String> | 	<s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003ADirectory_002Ecs_002Fl_003A_002E_002E_003F_002E_002E_003F_002E_002E_003FLibrary_003FApplication_0020Support_003FJetBrains_003FRider2024_002E3_003Fresharper_002Dhost_003FDecompilerCache_003Fdecompiler_003Fb6f0571a6bc744b0b551fd4578292582e54c00_003Fde_003F94973e27_003FDirectory_002Ecs/@EntryIndexedValue">ForceIncluded</s:String> | ||||||
|  | 	<s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003ADockerComposeServiceExtensions_002Ecs_002Fl_003A_002E_002E_003F_002E_002E_003F_002E_002E_003FLibrary_003FApplication_0020Support_003FJetBrains_003FRider2025_002E2_003Fresharper_002Dhost_003FDecompilerCache_003Fdecompiler_003F4768773ea5864bf8b6fc7a1a3c6f6f311fc38_003F2d_003F5f83b17e_003FDockerComposeServiceExtensions_002Ecs/@EntryIndexedValue">ForceIncluded</s:String> | ||||||
| 	<s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003AEndpointConventionBuilderExtensions_002Ecs_002Fl_003A_002E_002E_003F_002E_002E_003F_002E_002E_003FLibrary_003FApplication_0020Support_003FJetBrains_003FRider2024_002E3_003Fresharper_002Dhost_003FDecompilerCache_003Fdecompiler_003F8bb08a178b5b43c5bac20a5a54159a5b2a800_003F8a_003F101938e3_003FEndpointConventionBuilderExtensions_002Ecs/@EntryIndexedValue">ForceIncluded</s:String> | 	<s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003AEndpointConventionBuilderExtensions_002Ecs_002Fl_003A_002E_002E_003F_002E_002E_003F_002E_002E_003FLibrary_003FApplication_0020Support_003FJetBrains_003FRider2024_002E3_003Fresharper_002Dhost_003FDecompilerCache_003Fdecompiler_003F8bb08a178b5b43c5bac20a5a54159a5b2a800_003F8a_003F101938e3_003FEndpointConventionBuilderExtensions_002Ecs/@EntryIndexedValue">ForceIncluded</s:String> | ||||||
| 	<s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003AEndpointHttpContextExtensions_002Ecs_002Fl_003A_002E_002E_003F_002E_002E_003F_002E_002E_003FLibrary_003FApplication_0020Support_003FJetBrains_003FRider2025_002E1_003Fresharper_002Dhost_003FDecompilerCache_003Fdecompiler_003Fc181aff8c6ec418494a7efcfec578fc154e00_003F81_003F048fd513_003FEndpointHttpContextExtensions_002Ecs/@EntryIndexedValue">ForceIncluded</s:String> | 	<s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003AEndpointHttpContextExtensions_002Ecs_002Fl_003A_002E_002E_003F_002E_002E_003F_002E_002E_003FLibrary_003FApplication_0020Support_003FJetBrains_003FRider2025_002E1_003Fresharper_002Dhost_003FDecompilerCache_003Fdecompiler_003Fc181aff8c6ec418494a7efcfec578fc154e00_003F81_003F048fd513_003FEndpointHttpContextExtensions_002Ecs/@EntryIndexedValue">ForceIncluded</s:String> | ||||||
| 	<s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003AEndpointReference_002Ecs_002Fl_003A_002E_002E_003F_002E_002E_003F_002E_002E_003FLibrary_003FApplication_0020Support_003FJetBrains_003FRider2025_002E2_003Fresharper_002Dhost_003FSourcesCache_003Fd5f877f8f192ec96518ae1b12604f822fe9d2d030cdf8c9ada29b2b831f442f_003FEndpointReference_002Ecs/@EntryIndexedValue">ForceIncluded</s:String> | 	<s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003AEndpointReference_002Ecs_002Fl_003A_002E_002E_003F_002E_002E_003F_002E_002E_003FLibrary_003FApplication_0020Support_003FJetBrains_003FRider2025_002E2_003Fresharper_002Dhost_003FSourcesCache_003Fd5f877f8f192ec96518ae1b12604f822fe9d2d030cdf8c9ada29b2b831f442f_003FEndpointReference_002Ecs/@EntryIndexedValue">ForceIncluded</s:String> | ||||||
|   | |||||||
							
								
								
									
										86
									
								
								compose.yaml
									
									
									
									
									
								
							
							
						
						
									
										86
									
								
								compose.yaml
									
									
									
									
									
								
							| @@ -1,86 +0,0 @@ | |||||||
| services: |  | ||||||
|   etcd: |  | ||||||
|     image: bitnami/etcd:latest |  | ||||||
|     ports: |  | ||||||
|       - "2379:2379" |  | ||||||
|       - "2380:2380" |  | ||||||
|     environment: |  | ||||||
|       - ETCD_ADVERTISE_CLIENT_URLS=http://etcd:2379 |  | ||||||
|       - ETCD_LISTEN_CLIENT_URLS=http://0.0.0.0:2379 |  | ||||||
|       - ETCD_LISTEN_PEER_URLS=http://0.0.0.0:2380 |  | ||||||
|       - ETCD_INITIAL_ADVERTISE_PEER_URLS=http://etcd:2380 |  | ||||||
|       - ETCD_INITIAL_CLUSTER_TOKEN=etcd-cluster |  | ||||||
|       - ETCD_INITIAL_CLUSTER_STATE=new |  | ||||||
|       - ETCD_INITIAL_CLUSTER=etcd=http://etcd:2380 |  | ||||||
|     healthcheck: |  | ||||||
|       test: ["CMD", "etcdctl", "get", "/health"] |  | ||||||
|       interval: 5s |  | ||||||
|       timeout: 5s |  | ||||||
|       retries: 5 |  | ||||||
|  |  | ||||||
|   gateway: |  | ||||||
|     image: xsheep2010/dyson-gateway:latest |  | ||||||
|     ports: |  | ||||||
|       - "8000:8080" |  | ||||||
|     environment: |  | ||||||
|       - ConnectionStrings__Etcd=http://etcd:2379 |  | ||||||
|       - Etcd__Insecure=true |  | ||||||
|       - Service__Name=DysonNetwork.Gateway |  | ||||||
|       - Service__Url=http://gateway:8080 |  | ||||||
|     depends_on: |  | ||||||
|       etcd: |  | ||||||
|         condition: service_healthy |  | ||||||
|  |  | ||||||
|   drive: |  | ||||||
|     image: xsheep2010/dyson-drive:latest |  | ||||||
|     ports: |  | ||||||
|       - "8001:8080" |  | ||||||
|     environment: |  | ||||||
|       - ConnectionStrings__Etcd=http://etcd:2379 |  | ||||||
|       - Etcd__Insecure=true |  | ||||||
|       - Service__Name=DysonNetwork.Drive |  | ||||||
|       - Service__Url=http://drive:8080 |  | ||||||
|     depends_on: |  | ||||||
|       etcd: |  | ||||||
|         condition: service_healthy |  | ||||||
|  |  | ||||||
|   pass: |  | ||||||
|     image: xsheep2010/dyson-pass:latest |  | ||||||
|     ports: |  | ||||||
|       - "8002:8080" |  | ||||||
|     environment: |  | ||||||
|       - ConnectionStrings__Etcd=http://etcd:2379 |  | ||||||
|       - Etcd__Insecure=true |  | ||||||
|       - Service__Name=DysonNetwork.Pass |  | ||||||
|       - Service__Url=http://pass:8080 |  | ||||||
|     depends_on: |  | ||||||
|       etcd: |  | ||||||
|         condition: service_healthy |  | ||||||
|  |  | ||||||
|   ring: |  | ||||||
|     image: xsheep2010/dyson-ring:latest |  | ||||||
|     ports: |  | ||||||
|       - "8003:8080" |  | ||||||
|     environment: |  | ||||||
|       - ConnectionStrings__Etcd=http://etcd:2379 |  | ||||||
|       - Etcd__Insecure=true |  | ||||||
|       - Service__Name=DysonNetwork.Ring |  | ||||||
|       - Service__Url=http://ring:8080 |  | ||||||
|     depends_on: |  | ||||||
|       etcd: |  | ||||||
|         condition: service_healthy |  | ||||||
|  |  | ||||||
|   sphere: |  | ||||||
|     image: xsheep2010/dyson-sphere:latest |  | ||||||
|     ports: |  | ||||||
|       - "8004:8080" |  | ||||||
|     environment: |  | ||||||
|       - ConnectionStrings__Etcd=http://etcd:2379 |  | ||||||
|       - Etcd__Insecure=true |  | ||||||
|       - Service__Name=DysonNetwork.Sphere |  | ||||||
|       - Service__Url=http://sphere:8080 |  | ||||||
|     volumes: |  | ||||||
|       - "./keys:/app/keys" |  | ||||||
|     depends_on: |  | ||||||
|       etcd: |  | ||||||
|         condition: service_healthy |  | ||||||
							
								
								
									
										217
									
								
								docker-compose.yaml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										217
									
								
								docker-compose.yaml
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,217 @@ | |||||||
|  | services: | ||||||
|  |   aspire-dashboard: | ||||||
|  |     image: "mcr.microsoft.com/dotnet/nightly/aspire-dashboard:latest" | ||||||
|  |     expose: | ||||||
|  |       - "18888" | ||||||
|  |       - "18889" | ||||||
|  |     networks: | ||||||
|  |       - "aspire" | ||||||
|  |     restart: "always" | ||||||
|  |   cache: | ||||||
|  |     image: "docker.io/library/redis:7.4" | ||||||
|  |     command: | ||||||
|  |       - "-c" | ||||||
|  |       - "redis-server --requirepass $$REDIS_PASSWORD" | ||||||
|  |     entrypoint: | ||||||
|  |       - "/bin/sh" | ||||||
|  |     environment: | ||||||
|  |       REDIS_PASSWORD: "${CACHE_PASSWORD}" | ||||||
|  |     expose: | ||||||
|  |       - "6379" | ||||||
|  |     networks: | ||||||
|  |       - "aspire" | ||||||
|  |   queue: | ||||||
|  |     image: "docker.io/library/nats:2.11" | ||||||
|  |     command: | ||||||
|  |       - "--user" | ||||||
|  |       - "nats" | ||||||
|  |       - "--pass" | ||||||
|  |       - "${QUEUE_PASSWORD}" | ||||||
|  |       - "-js" | ||||||
|  |     expose: | ||||||
|  |       - "4222" | ||||||
|  |     networks: | ||||||
|  |       - "aspire" | ||||||
|  |   ring: | ||||||
|  |     image: "${RING_IMAGE}" | ||||||
|  |     environment: | ||||||
|  |       OTEL_DOTNET_EXPERIMENTAL_OTLP_EMIT_EXCEPTION_LOG_ATTRIBUTES: "true" | ||||||
|  |       OTEL_DOTNET_EXPERIMENTAL_OTLP_EMIT_EVENT_LOG_ATTRIBUTES: "true" | ||||||
|  |       OTEL_DOTNET_EXPERIMENTAL_OTLP_RETRY: "in_memory" | ||||||
|  |       ASPNETCORE_FORWARDEDHEADERS_ENABLED: "true" | ||||||
|  |       HTTP_PORTS: "${RING_PORT}" | ||||||
|  |       HTTPS_PORTS: "5001" | ||||||
|  |       ConnectionStrings__queue: "nats://nats:${QUEUE_PASSWORD}@queue:4222" | ||||||
|  |       services__pass__http__0: "http://pass:${PASS_PORT}" | ||||||
|  |       services__pass__grpc__0: "https://pass:5001" | ||||||
|  |       OTEL_EXPORTER_OTLP_ENDPOINT: "http://aspire-dashboard:18889" | ||||||
|  |       OTEL_EXPORTER_OTLP_PROTOCOL: "grpc" | ||||||
|  |       OTEL_SERVICE_NAME: "ring" | ||||||
|  |     volumes: | ||||||
|  |       - "./Keys:/app/keys" | ||||||
|  |       - "./settings/ring.json:/app/appsettings.json" | ||||||
|  |     expose: | ||||||
|  |       - "${RING_PORT}" | ||||||
|  |       - "5001" | ||||||
|  |     networks: | ||||||
|  |       - "aspire" | ||||||
|  |   pass: | ||||||
|  |     image: "${PASS_IMAGE}" | ||||||
|  |     environment: | ||||||
|  |       OTEL_DOTNET_EXPERIMENTAL_OTLP_EMIT_EXCEPTION_LOG_ATTRIBUTES: "true" | ||||||
|  |       OTEL_DOTNET_EXPERIMENTAL_OTLP_EMIT_EVENT_LOG_ATTRIBUTES: "true" | ||||||
|  |       OTEL_DOTNET_EXPERIMENTAL_OTLP_RETRY: "in_memory" | ||||||
|  |       ASPNETCORE_FORWARDEDHEADERS_ENABLED: "true" | ||||||
|  |       HTTP_PORTS: "${PASS_PORT}" | ||||||
|  |       HTTPS_PORTS: "5001" | ||||||
|  |       ConnectionStrings__cache: "cache:6379,password=${CACHE_PASSWORD}" | ||||||
|  |       ConnectionStrings__queue: "nats://nats:${QUEUE_PASSWORD}@queue:4222" | ||||||
|  |       services__ring__http__0: "http://ring:${RING_PORT}" | ||||||
|  |       services__ring__grpc__0: "https://ring:5001" | ||||||
|  |       OTEL_EXPORTER_OTLP_ENDPOINT: "http://aspire-dashboard:18889" | ||||||
|  |       OTEL_EXPORTER_OTLP_PROTOCOL: "grpc" | ||||||
|  |       OTEL_SERVICE_NAME: "pass" | ||||||
|  |     volumes: | ||||||
|  |       - "./Keys:/app/keys" | ||||||
|  |       - "./settings/pass.json:/app/appsettings.json" | ||||||
|  |     expose: | ||||||
|  |       - "${PASS_PORT}" | ||||||
|  |       - "5001" | ||||||
|  |     networks: | ||||||
|  |       - "aspire" | ||||||
|  |   drive: | ||||||
|  |     image: "${DRIVE_IMAGE}" | ||||||
|  |     environment: | ||||||
|  |       OTEL_DOTNET_EXPERIMENTAL_OTLP_EMIT_EXCEPTION_LOG_ATTRIBUTES: "true" | ||||||
|  |       OTEL_DOTNET_EXPERIMENTAL_OTLP_EMIT_EVENT_LOG_ATTRIBUTES: "true" | ||||||
|  |       OTEL_DOTNET_EXPERIMENTAL_OTLP_RETRY: "in_memory" | ||||||
|  |       ASPNETCORE_FORWARDEDHEADERS_ENABLED: "true" | ||||||
|  |       HTTP_PORTS: "${DRIVE_PORT}" | ||||||
|  |       HTTPS_PORTS: "5001" | ||||||
|  |       ConnectionStrings__cache: "cache:6379,password=${CACHE_PASSWORD}" | ||||||
|  |       ConnectionStrings__queue: "nats://nats:${QUEUE_PASSWORD}@queue:4222" | ||||||
|  |       services__pass__http__0: "http://pass:${PASS_PORT}" | ||||||
|  |       services__pass__grpc__0: "https://pass:5001" | ||||||
|  |       services__ring__http__0: "http://ring:${RING_PORT}" | ||||||
|  |       services__ring__grpc__0: "https://ring:5001" | ||||||
|  |       OTEL_EXPORTER_OTLP_ENDPOINT: "http://aspire-dashboard:18889" | ||||||
|  |       OTEL_EXPORTER_OTLP_PROTOCOL: "grpc" | ||||||
|  |       OTEL_SERVICE_NAME: "drive" | ||||||
|  |     expose: | ||||||
|  |       - "${DRIVE_PORT}" | ||||||
|  |       - "5001" | ||||||
|  |     volumes: | ||||||
|  |       - "./settings/drive.json:/app/appsettings.json" | ||||||
|  |     networks: | ||||||
|  |       - "aspire" | ||||||
|  |   sphere: | ||||||
|  |     image: "${SPHERE_IMAGE}" | ||||||
|  |     environment: | ||||||
|  |       OTEL_DOTNET_EXPERIMENTAL_OTLP_EMIT_EXCEPTION_LOG_ATTRIBUTES: "true" | ||||||
|  |       OTEL_DOTNET_EXPERIMENTAL_OTLP_EMIT_EVENT_LOG_ATTRIBUTES: "true" | ||||||
|  |       OTEL_DOTNET_EXPERIMENTAL_OTLP_RETRY: "in_memory" | ||||||
|  |       ASPNETCORE_FORWARDEDHEADERS_ENABLED: "true" | ||||||
|  |       HTTP_PORTS: "${SPHERE_PORT}" | ||||||
|  |       HTTPS_PORTS: "5001" | ||||||
|  |       ConnectionStrings__cache: "cache:6379,password=${CACHE_PASSWORD}" | ||||||
|  |       ConnectionStrings__queue: "nats://nats:${QUEUE_PASSWORD}@queue:4222" | ||||||
|  |       services__pass__http__0: "http://pass:${PASS_PORT}" | ||||||
|  |       services__pass__grpc__0: "https://pass:5001" | ||||||
|  |       services__ring__http__0: "http://ring:${RING_PORT}" | ||||||
|  |       services__ring__grpc__0: "https://ring:5001" | ||||||
|  |       OTEL_EXPORTER_OTLP_ENDPOINT: "http://aspire-dashboard:18889" | ||||||
|  |       OTEL_EXPORTER_OTLP_PROTOCOL: "grpc" | ||||||
|  |       OTEL_SERVICE_NAME: "sphere" | ||||||
|  |     volumes: | ||||||
|  |       - "./Keys:/app/keys" | ||||||
|  |       - "./settings/sphere.json:/app/appsettings.json" | ||||||
|  |     expose: | ||||||
|  |       - "${SPHERE_PORT}" | ||||||
|  |       - "5001" | ||||||
|  |     networks: | ||||||
|  |       - "aspire" | ||||||
|  |   develop: | ||||||
|  |     image: "${DEVELOP_IMAGE}" | ||||||
|  |     environment: | ||||||
|  |       OTEL_DOTNET_EXPERIMENTAL_OTLP_EMIT_EXCEPTION_LOG_ATTRIBUTES: "true" | ||||||
|  |       OTEL_DOTNET_EXPERIMENTAL_OTLP_EMIT_EVENT_LOG_ATTRIBUTES: "true" | ||||||
|  |       OTEL_DOTNET_EXPERIMENTAL_OTLP_RETRY: "in_memory" | ||||||
|  |       ASPNETCORE_FORWARDEDHEADERS_ENABLED: "true" | ||||||
|  |       HTTP_PORTS: "${DEVELOP_PORT}" | ||||||
|  |       HTTPS_PORTS: "5001" | ||||||
|  |       ConnectionStrings__cache: "cache:6379,password=${CACHE_PASSWORD}" | ||||||
|  |       services__pass__http__0: "http://pass:${PASS_PORT}" | ||||||
|  |       services__pass__grpc__0: "https://pass:5001" | ||||||
|  |       services__ring__http__0: "http://ring:${RING_PORT}" | ||||||
|  |       services__ring__grpc__0: "https://ring:5001" | ||||||
|  |       OTEL_EXPORTER_OTLP_ENDPOINT: "http://aspire-dashboard:18889" | ||||||
|  |       OTEL_EXPORTER_OTLP_PROTOCOL: "grpc" | ||||||
|  |       OTEL_SERVICE_NAME: "develop" | ||||||
|  |     expose: | ||||||
|  |       - "${DEVELOP_PORT}" | ||||||
|  |       - "5001" | ||||||
|  |     networks: | ||||||
|  |       - "aspire" | ||||||
|  |   gateway: | ||||||
|  |     image: "mcr.microsoft.com/dotnet/nightly/yarp:2.3.0-preview.4" | ||||||
|  |     command: | ||||||
|  |       - "/app/yarp.dll" | ||||||
|  |     entrypoint: | ||||||
|  |       - "dotnet" | ||||||
|  |     environment: | ||||||
|  |       ASPNETCORE_ENVIRONMENT: "Production" | ||||||
|  |       services__ring__http__0: "http://ring:${RING_PORT}" | ||||||
|  |       services__ring__grpc__0: "https://ring:5001" | ||||||
|  |       REVERSEPROXY__ROUTES__route0__MATCH__PATH: "/ws" | ||||||
|  |       REVERSEPROXY__ROUTES__route0__CLUSTERID: "cluster_ring" | ||||||
|  |       REVERSEPROXY__ROUTES__route1__MATCH__PATH: "/ring/{**catch-all}" | ||||||
|  |       REVERSEPROXY__ROUTES__route1__CLUSTERID: "cluster_ring" | ||||||
|  |       REVERSEPROXY__ROUTES__route1__TRANSFORMS__0__PathRemovePrefix: "/ring" | ||||||
|  |       REVERSEPROXY__ROUTES__route1__TRANSFORMS__1__PathPrefix: "/api" | ||||||
|  |       REVERSEPROXY__ROUTES__route2__MATCH__PATH: "/.well-known/openid-configuration" | ||||||
|  |       REVERSEPROXY__ROUTES__route2__CLUSTERID: "cluster_pass" | ||||||
|  |       REVERSEPROXY__ROUTES__route3__MATCH__PATH: "/.well-known/jwks" | ||||||
|  |       REVERSEPROXY__ROUTES__route3__CLUSTERID: "cluster_pass" | ||||||
|  |       REVERSEPROXY__ROUTES__route4__MATCH__PATH: "/id/{**catch-all}" | ||||||
|  |       REVERSEPROXY__ROUTES__route4__CLUSTERID: "cluster_pass" | ||||||
|  |       REVERSEPROXY__ROUTES__route4__TRANSFORMS__0__PathRemovePrefix: "/id" | ||||||
|  |       REVERSEPROXY__ROUTES__route4__TRANSFORMS__1__PathPrefix: "/api" | ||||||
|  |       REVERSEPROXY__ROUTES__route5__MATCH__PATH: "/api/tus" | ||||||
|  |       REVERSEPROXY__ROUTES__route5__CLUSTERID: "cluster_drive" | ||||||
|  |       REVERSEPROXY__ROUTES__route6__MATCH__PATH: "/drive/{**catch-all}" | ||||||
|  |       REVERSEPROXY__ROUTES__route6__CLUSTERID: "cluster_drive" | ||||||
|  |       REVERSEPROXY__ROUTES__route6__TRANSFORMS__0__PathRemovePrefix: "/drive" | ||||||
|  |       REVERSEPROXY__ROUTES__route6__TRANSFORMS__1__PathPrefix: "/api" | ||||||
|  |       REVERSEPROXY__ROUTES__route7__MATCH__PATH: "/sphere/{**catch-all}" | ||||||
|  |       REVERSEPROXY__ROUTES__route7__CLUSTERID: "cluster_sphere" | ||||||
|  |       REVERSEPROXY__ROUTES__route7__TRANSFORMS__0__PathRemovePrefix: "/sphere" | ||||||
|  |       REVERSEPROXY__ROUTES__route7__TRANSFORMS__1__PathPrefix: "/api" | ||||||
|  |       REVERSEPROXY__ROUTES__route8__MATCH__PATH: "/develop/{**catch-all}" | ||||||
|  |       REVERSEPROXY__ROUTES__route8__CLUSTERID: "cluster_develop" | ||||||
|  |       REVERSEPROXY__ROUTES__route8__TRANSFORMS__0__PathRemovePrefix: "/develop" | ||||||
|  |       REVERSEPROXY__ROUTES__route8__TRANSFORMS__1__PathPrefix: "/api" | ||||||
|  |       REVERSEPROXY__CLUSTERS__cluster_ring__DESTINATIONS__destination1__ADDRESS: "http://_http.ring" | ||||||
|  |       REVERSEPROXY__CLUSTERS__cluster_pass__DESTINATIONS__destination1__ADDRESS: "http://_http.pass" | ||||||
|  |       REVERSEPROXY__CLUSTERS__cluster_drive__DESTINATIONS__destination1__ADDRESS: "http://_http.drive" | ||||||
|  |       REVERSEPROXY__CLUSTERS__cluster_sphere__DESTINATIONS__destination1__ADDRESS: "http://_http.sphere" | ||||||
|  |       REVERSEPROXY__CLUSTERS__cluster_develop__DESTINATIONS__destination1__ADDRESS: "http://_http.develop" | ||||||
|  |       services__pass__http__0: "http://pass:${PASS_PORT}" | ||||||
|  |       services__pass__grpc__0: "https://pass:5001" | ||||||
|  |       services__drive__http__0: "http://drive:${DRIVE_PORT}" | ||||||
|  |       services__drive__grpc__0: "https://drive:5001" | ||||||
|  |       services__sphere__http__0: "http://sphere:${SPHERE_PORT}" | ||||||
|  |       services__sphere__grpc__0: "https://sphere:5001" | ||||||
|  |       services__develop__http__0: "http://develop:${DEVELOP_PORT}" | ||||||
|  |       services__develop__grpc__0: "https://develop:5001" | ||||||
|  |       OTEL_EXPORTER_OTLP_ENDPOINT: "http://aspire-dashboard:18889" | ||||||
|  |       OTEL_EXPORTER_OTLP_PROTOCOL: "grpc" | ||||||
|  |       OTEL_SERVICE_NAME: "gateway" | ||||||
|  |     expose: | ||||||
|  |       - "5000" | ||||||
|  |     ports: | ||||||
|  |       - "5001:5000" | ||||||
|  |     networks: | ||||||
|  |       - "aspire" | ||||||
|  | networks: | ||||||
|  |   aspire: | ||||||
|  |     driver: "bridge" | ||||||
							
								
								
									
										35
									
								
								publish/.env
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										35
									
								
								publish/.env
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,35 @@ | |||||||
|  | # Default container port for ring | ||||||
|  | RING_PORT=8080 | ||||||
|  |  | ||||||
|  | # Default container port for pass | ||||||
|  | PASS_PORT=8080 | ||||||
|  |  | ||||||
|  | # Default container port for drive | ||||||
|  | DRIVE_PORT=8080 | ||||||
|  |  | ||||||
|  | # Default container port for sphere | ||||||
|  | SPHERE_PORT=8080 | ||||||
|  |  | ||||||
|  | # Default container port for develop | ||||||
|  | DEVELOP_PORT=8080 | ||||||
|  |  | ||||||
|  | # Parameter cache-password | ||||||
|  | CACHE_PASSWORD=KS3jSPaU9e | ||||||
|  |  | ||||||
|  | # Parameter queue-password | ||||||
|  | QUEUE_PASSWORD=8xEECa4ckz | ||||||
|  |  | ||||||
|  | # Container image name for ring | ||||||
|  | RING_IMAGE=ring:latest | ||||||
|  |  | ||||||
|  | # Container image name for pass | ||||||
|  | PASS_IMAGE=pass:latest | ||||||
|  |  | ||||||
|  | # Container image name for drive | ||||||
|  | DRIVE_IMAGE=drive:latest | ||||||
|  |  | ||||||
|  | # Container image name for sphere | ||||||
|  | SPHERE_IMAGE=sphere:latest | ||||||
|  |  | ||||||
|  | # Container image name for develop | ||||||
|  | DEVELOP_IMAGE=develop:latest | ||||||
							
								
								
									
										191
									
								
								publish/docker-compose.yaml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										191
									
								
								publish/docker-compose.yaml
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,191 @@ | |||||||
|  | services: | ||||||
|  |   docker-compose-dashboard: | ||||||
|  |     image: "mcr.microsoft.com/dotnet/nightly/aspire-dashboard:latest" | ||||||
|  |     expose: | ||||||
|  |       - "18888" | ||||||
|  |       - "18889" | ||||||
|  |     networks: | ||||||
|  |       - "aspire" | ||||||
|  |     restart: "always" | ||||||
|  |   cache: | ||||||
|  |     image: "docker.io/library/redis:7.4" | ||||||
|  |     command: | ||||||
|  |       - "-c" | ||||||
|  |       - "redis-server --requirepass $$REDIS_PASSWORD" | ||||||
|  |     entrypoint: | ||||||
|  |       - "/bin/sh" | ||||||
|  |     environment: | ||||||
|  |       REDIS_PASSWORD: "${CACHE_PASSWORD}" | ||||||
|  |     expose: | ||||||
|  |       - "6379" | ||||||
|  |     networks: | ||||||
|  |       - "aspire" | ||||||
|  |   queue: | ||||||
|  |     image: "docker.io/library/nats:2.11" | ||||||
|  |     command: | ||||||
|  |       - "--user" | ||||||
|  |       - "nats" | ||||||
|  |       - "--pass" | ||||||
|  |       - "${QUEUE_PASSWORD}" | ||||||
|  |       - "-js" | ||||||
|  |     expose: | ||||||
|  |       - "4222" | ||||||
|  |     networks: | ||||||
|  |       - "aspire" | ||||||
|  |   ring: | ||||||
|  |     image: "${RING_IMAGE}" | ||||||
|  |     environment: | ||||||
|  |       OTEL_DOTNET_EXPERIMENTAL_OTLP_EMIT_EXCEPTION_LOG_ATTRIBUTES: "true" | ||||||
|  |       OTEL_DOTNET_EXPERIMENTAL_OTLP_EMIT_EVENT_LOG_ATTRIBUTES: "true" | ||||||
|  |       OTEL_DOTNET_EXPERIMENTAL_OTLP_RETRY: "in_memory" | ||||||
|  |       ASPNETCORE_FORWARDEDHEADERS_ENABLED: "true" | ||||||
|  |       HTTP_PORTS: "${RING_PORT}" | ||||||
|  |       HTTPS_PORTS: "5001" | ||||||
|  |       ConnectionStrings__queue: "nats://nats:${QUEUE_PASSWORD}@queue:4222" | ||||||
|  |       services__pass__http__0: "http://pass:${PASS_PORT}" | ||||||
|  |       OTEL_EXPORTER_OTLP_ENDPOINT: "http://docker-compose-dashboard:18889" | ||||||
|  |       OTEL_EXPORTER_OTLP_PROTOCOL: "grpc" | ||||||
|  |       OTEL_SERVICE_NAME: "ring" | ||||||
|  |     expose: | ||||||
|  |       - "${RING_PORT}" | ||||||
|  |       - "5001" | ||||||
|  |     networks: | ||||||
|  |       - "aspire" | ||||||
|  |   pass: | ||||||
|  |     image: "${PASS_IMAGE}" | ||||||
|  |     environment: | ||||||
|  |       OTEL_DOTNET_EXPERIMENTAL_OTLP_EMIT_EXCEPTION_LOG_ATTRIBUTES: "true" | ||||||
|  |       OTEL_DOTNET_EXPERIMENTAL_OTLP_EMIT_EVENT_LOG_ATTRIBUTES: "true" | ||||||
|  |       OTEL_DOTNET_EXPERIMENTAL_OTLP_RETRY: "in_memory" | ||||||
|  |       ASPNETCORE_FORWARDEDHEADERS_ENABLED: "true" | ||||||
|  |       HTTP_PORTS: "${PASS_PORT}" | ||||||
|  |       HTTPS_PORTS: "5001" | ||||||
|  |       ConnectionStrings__cache: "cache:6379,password=${CACHE_PASSWORD}" | ||||||
|  |       ConnectionStrings__queue: "nats://nats:${QUEUE_PASSWORD}@queue:4222" | ||||||
|  |       services__ring__http__0: "http://ring:${RING_PORT}" | ||||||
|  |       OTEL_EXPORTER_OTLP_ENDPOINT: "http://docker-compose-dashboard:18889" | ||||||
|  |       OTEL_EXPORTER_OTLP_PROTOCOL: "grpc" | ||||||
|  |       OTEL_SERVICE_NAME: "pass" | ||||||
|  |     expose: | ||||||
|  |       - "${PASS_PORT}" | ||||||
|  |       - "5001" | ||||||
|  |     networks: | ||||||
|  |       - "aspire" | ||||||
|  |   drive: | ||||||
|  |     image: "${DRIVE_IMAGE}" | ||||||
|  |     environment: | ||||||
|  |       OTEL_DOTNET_EXPERIMENTAL_OTLP_EMIT_EXCEPTION_LOG_ATTRIBUTES: "true" | ||||||
|  |       OTEL_DOTNET_EXPERIMENTAL_OTLP_EMIT_EVENT_LOG_ATTRIBUTES: "true" | ||||||
|  |       OTEL_DOTNET_EXPERIMENTAL_OTLP_RETRY: "in_memory" | ||||||
|  |       ASPNETCORE_FORWARDEDHEADERS_ENABLED: "true" | ||||||
|  |       HTTP_PORTS: "${DRIVE_PORT}" | ||||||
|  |       HTTPS_PORTS: "5001" | ||||||
|  |       ConnectionStrings__cache: "cache:6379,password=${CACHE_PASSWORD}" | ||||||
|  |       ConnectionStrings__queue: "nats://nats:${QUEUE_PASSWORD}@queue:4222" | ||||||
|  |       services__pass__http__0: "http://pass:${PASS_PORT}" | ||||||
|  |       services__ring__http__0: "http://ring:${RING_PORT}" | ||||||
|  |       OTEL_EXPORTER_OTLP_ENDPOINT: "http://docker-compose-dashboard:18889" | ||||||
|  |       OTEL_EXPORTER_OTLP_PROTOCOL: "grpc" | ||||||
|  |       OTEL_SERVICE_NAME: "drive" | ||||||
|  |     expose: | ||||||
|  |       - "${DRIVE_PORT}" | ||||||
|  |       - "5001" | ||||||
|  |     networks: | ||||||
|  |       - "aspire" | ||||||
|  |   sphere: | ||||||
|  |     image: "${SPHERE_IMAGE}" | ||||||
|  |     environment: | ||||||
|  |       OTEL_DOTNET_EXPERIMENTAL_OTLP_EMIT_EXCEPTION_LOG_ATTRIBUTES: "true" | ||||||
|  |       OTEL_DOTNET_EXPERIMENTAL_OTLP_EMIT_EVENT_LOG_ATTRIBUTES: "true" | ||||||
|  |       OTEL_DOTNET_EXPERIMENTAL_OTLP_RETRY: "in_memory" | ||||||
|  |       ASPNETCORE_FORWARDEDHEADERS_ENABLED: "true" | ||||||
|  |       HTTP_PORTS: "${SPHERE_PORT}" | ||||||
|  |       HTTPS_PORTS: "5001" | ||||||
|  |       ConnectionStrings__cache: "cache:6379,password=${CACHE_PASSWORD}" | ||||||
|  |       ConnectionStrings__queue: "nats://nats:${QUEUE_PASSWORD}@queue:4222" | ||||||
|  |       services__pass__http__0: "http://pass:${PASS_PORT}" | ||||||
|  |       services__ring__http__0: "http://ring:${RING_PORT}" | ||||||
|  |       OTEL_EXPORTER_OTLP_ENDPOINT: "http://docker-compose-dashboard:18889" | ||||||
|  |       OTEL_EXPORTER_OTLP_PROTOCOL: "grpc" | ||||||
|  |       OTEL_SERVICE_NAME: "sphere" | ||||||
|  |     expose: | ||||||
|  |       - "${SPHERE_PORT}" | ||||||
|  |       - "5001" | ||||||
|  |     networks: | ||||||
|  |       - "aspire" | ||||||
|  |   develop: | ||||||
|  |     image: "${DEVELOP_IMAGE}" | ||||||
|  |     environment: | ||||||
|  |       OTEL_DOTNET_EXPERIMENTAL_OTLP_EMIT_EXCEPTION_LOG_ATTRIBUTES: "true" | ||||||
|  |       OTEL_DOTNET_EXPERIMENTAL_OTLP_EMIT_EVENT_LOG_ATTRIBUTES: "true" | ||||||
|  |       OTEL_DOTNET_EXPERIMENTAL_OTLP_RETRY: "in_memory" | ||||||
|  |       ASPNETCORE_FORWARDEDHEADERS_ENABLED: "true" | ||||||
|  |       HTTP_PORTS: "${DEVELOP_PORT}" | ||||||
|  |       HTTPS_PORTS: "5001" | ||||||
|  |       ConnectionStrings__cache: "cache:6379,password=${CACHE_PASSWORD}" | ||||||
|  |       services__pass__http__0: "http://pass:${PASS_PORT}" | ||||||
|  |       services__ring__http__0: "http://ring:${RING_PORT}" | ||||||
|  |       OTEL_EXPORTER_OTLP_ENDPOINT: "http://docker-compose-dashboard:18889" | ||||||
|  |       OTEL_EXPORTER_OTLP_PROTOCOL: "grpc" | ||||||
|  |       OTEL_SERVICE_NAME: "develop" | ||||||
|  |     expose: | ||||||
|  |       - "${DEVELOP_PORT}" | ||||||
|  |       - "5001" | ||||||
|  |     networks: | ||||||
|  |       - "aspire" | ||||||
|  |   gateway: | ||||||
|  |     image: "mcr.microsoft.com/dotnet/nightly/yarp:2.3.0-preview.4" | ||||||
|  |     command: | ||||||
|  |       - "/app/yarp.dll" | ||||||
|  |     entrypoint: | ||||||
|  |       - "dotnet" | ||||||
|  |     environment: | ||||||
|  |       ASPNETCORE_ENVIRONMENT: "Production" | ||||||
|  |       services__ring__http__0: "http://ring:${RING_PORT}" | ||||||
|  |       REVERSEPROXY__ROUTES__route0__MATCH__PATH: "/ws" | ||||||
|  |       REVERSEPROXY__ROUTES__route0__CLUSTERID: "cluster_ring" | ||||||
|  |       REVERSEPROXY__ROUTES__route1__MATCH__PATH: "/ring/{**catch-all}" | ||||||
|  |       REVERSEPROXY__ROUTES__route1__CLUSTERID: "cluster_ring" | ||||||
|  |       REVERSEPROXY__ROUTES__route1__TRANSFORMS__0__PathRemovePrefix: "/ring" | ||||||
|  |       REVERSEPROXY__ROUTES__route1__TRANSFORMS__1__PathPrefix: "/api" | ||||||
|  |       REVERSEPROXY__ROUTES__route2__MATCH__PATH: "/.well-known/openid-configuration" | ||||||
|  |       REVERSEPROXY__ROUTES__route2__CLUSTERID: "cluster_pass" | ||||||
|  |       REVERSEPROXY__ROUTES__route3__MATCH__PATH: "/.well-known/jwks" | ||||||
|  |       REVERSEPROXY__ROUTES__route3__CLUSTERID: "cluster_pass" | ||||||
|  |       REVERSEPROXY__ROUTES__route4__MATCH__PATH: "/id/{**catch-all}" | ||||||
|  |       REVERSEPROXY__ROUTES__route4__CLUSTERID: "cluster_pass" | ||||||
|  |       REVERSEPROXY__ROUTES__route4__TRANSFORMS__0__PathRemovePrefix: "/id" | ||||||
|  |       REVERSEPROXY__ROUTES__route4__TRANSFORMS__1__PathPrefix: "/api" | ||||||
|  |       REVERSEPROXY__ROUTES__route5__MATCH__PATH: "/api/tus" | ||||||
|  |       REVERSEPROXY__ROUTES__route5__CLUSTERID: "cluster_drive" | ||||||
|  |       REVERSEPROXY__ROUTES__route6__MATCH__PATH: "/drive/{**catch-all}" | ||||||
|  |       REVERSEPROXY__ROUTES__route6__CLUSTERID: "cluster_drive" | ||||||
|  |       REVERSEPROXY__ROUTES__route6__TRANSFORMS__0__PathRemovePrefix: "/drive" | ||||||
|  |       REVERSEPROXY__ROUTES__route6__TRANSFORMS__1__PathPrefix: "/api" | ||||||
|  |       REVERSEPROXY__ROUTES__route7__MATCH__PATH: "/sphere/{**catch-all}" | ||||||
|  |       REVERSEPROXY__ROUTES__route7__CLUSTERID: "cluster_sphere" | ||||||
|  |       REVERSEPROXY__ROUTES__route7__TRANSFORMS__0__PathRemovePrefix: "/sphere" | ||||||
|  |       REVERSEPROXY__ROUTES__route7__TRANSFORMS__1__PathPrefix: "/api" | ||||||
|  |       REVERSEPROXY__ROUTES__route8__MATCH__PATH: "/develop/{**catch-all}" | ||||||
|  |       REVERSEPROXY__ROUTES__route8__CLUSTERID: "cluster_develop" | ||||||
|  |       REVERSEPROXY__ROUTES__route8__TRANSFORMS__0__PathRemovePrefix: "/develop" | ||||||
|  |       REVERSEPROXY__ROUTES__route8__TRANSFORMS__1__PathPrefix: "/api" | ||||||
|  |       REVERSEPROXY__CLUSTERS__cluster_ring__DESTINATIONS__destination1__ADDRESS: "http://_http.ring" | ||||||
|  |       REVERSEPROXY__CLUSTERS__cluster_pass__DESTINATIONS__destination1__ADDRESS: "http://_http.pass" | ||||||
|  |       REVERSEPROXY__CLUSTERS__cluster_drive__DESTINATIONS__destination1__ADDRESS: "http://_http.drive" | ||||||
|  |       REVERSEPROXY__CLUSTERS__cluster_sphere__DESTINATIONS__destination1__ADDRESS: "http://_http.sphere" | ||||||
|  |       REVERSEPROXY__CLUSTERS__cluster_develop__DESTINATIONS__destination1__ADDRESS: "http://_http.develop" | ||||||
|  |       services__pass__http__0: "http://pass:${PASS_PORT}" | ||||||
|  |       services__drive__http__0: "http://drive:${DRIVE_PORT}" | ||||||
|  |       services__sphere__http__0: "http://sphere:${SPHERE_PORT}" | ||||||
|  |       services__develop__http__0: "http://develop:${DEVELOP_PORT}" | ||||||
|  |       OTEL_EXPORTER_OTLP_ENDPOINT: "http://docker-compose-dashboard:18889" | ||||||
|  |       OTEL_EXPORTER_OTLP_PROTOCOL: "grpc" | ||||||
|  |       OTEL_SERVICE_NAME: "gateway" | ||||||
|  |     expose: | ||||||
|  |       - "5000" | ||||||
|  |     networks: | ||||||
|  |       - "aspire" | ||||||
|  | networks: | ||||||
|  |   aspire: | ||||||
|  |     driver: "bridge" | ||||||
							
								
								
									
										23
									
								
								publish/settings/develop.json
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										23
									
								
								publish/settings/develop.json
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,23 @@ | |||||||
|  | { | ||||||
|  |   "Debug": true, | ||||||
|  |   "BaseUrl": "http://localhost:5071", | ||||||
|  |   "SiteUrl": "https://solian.app", | ||||||
|  |   "Logging": { | ||||||
|  |     "LogLevel": { | ||||||
|  |       "Default": "Information", | ||||||
|  |       "Microsoft.AspNetCore": "Warning" | ||||||
|  |     } | ||||||
|  |   }, | ||||||
|  |   "AllowedHosts": "*", | ||||||
|  |   "ConnectionStrings": { | ||||||
|  |     "App": "Host=host.docker.internal;Port=5432;Database=dyson_network_dev;Username=postgres;Password=postgres;Include Error Detail=True;Maximum Pool Size=20;Connection Idle Lifetime=60" | ||||||
|  |   }, | ||||||
|  |   "KnownProxies": ["127.0.0.1", "::1"], | ||||||
|  |   "Etcd": { | ||||||
|  |     "Insecure": true | ||||||
|  |   }, | ||||||
|  |   "Service": { | ||||||
|  |     "Name": "DysonNetwork.Develop", | ||||||
|  |     "Url": "https://localhost:7192" | ||||||
|  |   } | ||||||
|  | } | ||||||
							
								
								
									
										127
									
								
								publish/settings/drive.json
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										127
									
								
								publish/settings/drive.json
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,127 @@ | |||||||
|  | { | ||||||
|  |   "Debug": true, | ||||||
|  |   "BaseUrl": "http://localhost:5090", | ||||||
|  |   "GatewayUrl": "http://localhost:5094", | ||||||
|  |   "Logging": { | ||||||
|  |     "LogLevel": { | ||||||
|  |       "Default": "Information", | ||||||
|  |       "Microsoft.AspNetCore": "Warning" | ||||||
|  |     } | ||||||
|  |   }, | ||||||
|  |   "AllowedHosts": "*", | ||||||
|  |   "ConnectionStrings": { | ||||||
|  |     "App": "Host=host.docker.internal;Port=5432;Database=dyson_drive;Username=postgres;Password=postgres;Include Error Detail=True;Maximum Pool Size=20;Connection Idle Lifetime=60" | ||||||
|  |   }, | ||||||
|  |   "Authentication": { | ||||||
|  |     "Schemes": { | ||||||
|  |       "Bearer": { | ||||||
|  |         "ValidAudiences": ["http://localhost:5071", "https://localhost:7099"], | ||||||
|  |         "ValidIssuer": "solar-network" | ||||||
|  |       } | ||||||
|  |     } | ||||||
|  |   }, | ||||||
|  |   "AuthToken": { | ||||||
|  |     "PublicKeyPath": "Keys/PublicKey.pem", | ||||||
|  |     "PrivateKeyPath": "Keys/PrivateKey.pem" | ||||||
|  |   }, | ||||||
|  |   "OidcProvider": { | ||||||
|  |     "IssuerUri": "https://nt.solian.app", | ||||||
|  |     "PublicKeyPath": "Keys/PublicKey.pem", | ||||||
|  |     "PrivateKeyPath": "Keys/PrivateKey.pem", | ||||||
|  |     "AccessTokenLifetime": "01:00:00", | ||||||
|  |     "RefreshTokenLifetime": "30.00:00:00", | ||||||
|  |     "AuthorizationCodeLifetime": "00:30:00", | ||||||
|  |     "RequireHttpsMetadata": true | ||||||
|  |   }, | ||||||
|  |   "Tus": { | ||||||
|  |     "StorePath": "Uploads" | ||||||
|  |   }, | ||||||
|  |   "Storage": { | ||||||
|  |     "PreferredRemote": "2adceae3-981a-4564-9b8d-5d71a211c873", | ||||||
|  |     "Remote": [ | ||||||
|  |       { | ||||||
|  |         "Id": "minio", | ||||||
|  |         "Label": "Minio", | ||||||
|  |         "Region": "auto", | ||||||
|  |         "Bucket": "solar-network-development", | ||||||
|  |         "Endpoint": "localhost:9000", | ||||||
|  |         "SecretId": "littlesheep", | ||||||
|  |         "SecretKey": "password", | ||||||
|  |         "EnabledSigned": true, | ||||||
|  |         "EnableSsl": false | ||||||
|  |       }, | ||||||
|  |       { | ||||||
|  |         "Id": "cloudflare", | ||||||
|  |         "Label": "Cloudflare R2", | ||||||
|  |         "Region": "auto", | ||||||
|  |         "Bucket": "solar-network", | ||||||
|  |         "Endpoint": "0a70a6d1b7128888c823359d0008f4e1.r2.cloudflarestorage.com", | ||||||
|  |         "SecretId": "8ff5d06c7b1639829d60bc6838a542e6", | ||||||
|  |         "SecretKey": "fd58158c5201be16d1872c9209d9cf199421dae3c2f9972f94b2305976580d67", | ||||||
|  |         "EnableSigned": true, | ||||||
|  |         "EnableSsl": true | ||||||
|  |       } | ||||||
|  |     ] | ||||||
|  |   }, | ||||||
|  |   "Captcha": { | ||||||
|  |     "Provider": "cloudflare", | ||||||
|  |     "ApiKey": "0x4AAAAAABCDUdOujj4feOb_", | ||||||
|  |     "ApiSecret": "0x4AAAAAABCDUWABiJQweqlB7tYq-IqIm8U" | ||||||
|  |   }, | ||||||
|  |   "Notifications": { | ||||||
|  |     "Topic": "dev.solsynth.solian", | ||||||
|  |     "Endpoint": "http://localhost:8088" | ||||||
|  |   }, | ||||||
|  |   "Email": { | ||||||
|  |     "Server": "smtp4dev.orb.local", | ||||||
|  |     "Port": 25, | ||||||
|  |     "UseSsl": false, | ||||||
|  |     "Username": "no-reply@mail.solsynth.dev", | ||||||
|  |     "Password": "password", | ||||||
|  |     "FromAddress": "no-reply@mail.solsynth.dev", | ||||||
|  |     "FromName": "Alphabot", | ||||||
|  |     "SubjectPrefix": "Solar Network" | ||||||
|  |   }, | ||||||
|  |   "RealtimeChat": { | ||||||
|  |     "Endpoint": "https://solar-network-im44o8gq.livekit.cloud", | ||||||
|  |     "ApiKey": "APIs6TiL8wj3A4j", | ||||||
|  |     "ApiSecret": "SffxRneIwTnlHPtEf3zicmmv3LUEl7xXael4PvWZrEhE" | ||||||
|  |   }, | ||||||
|  |   "GeoIp": { | ||||||
|  |     "DatabasePath": "./Keys/GeoLite2-City.mmdb" | ||||||
|  |   }, | ||||||
|  |   "Oidc": { | ||||||
|  |     "Google": { | ||||||
|  |       "ClientId": "961776991058-963m1qin2vtp8fv693b5fdrab5hmpl89.apps.googleusercontent.com", | ||||||
|  |       "ClientSecret": "" | ||||||
|  |     }, | ||||||
|  |     "Apple": { | ||||||
|  |       "ClientId": "dev.solsynth.solian", | ||||||
|  |       "TeamId": "W7HPZ53V6B", | ||||||
|  |       "KeyId": "B668YP4KBG", | ||||||
|  |       "PrivateKeyPath": "./Keys/Solarpass.p8" | ||||||
|  |     }, | ||||||
|  |     "Microsoft": { | ||||||
|  |       "ClientId": "YOUR_MICROSOFT_CLIENT_ID", | ||||||
|  |       "ClientSecret": "YOUR_MICROSOFT_CLIENT_SECRET", | ||||||
|  |       "DiscoveryEndpoint": "YOUR_MICROSOFT_DISCOVERY_ENDPOINT" | ||||||
|  |     } | ||||||
|  |   }, | ||||||
|  |   "Payment": { | ||||||
|  |     "Auth": { | ||||||
|  |       "Afdian": "<token here>" | ||||||
|  |     }, | ||||||
|  |     "Subscriptions": { | ||||||
|  |       "Afdian": { | ||||||
|  |         "7d17aae23c9611f0b5705254001e7c00": "solian.stellar.primary", | ||||||
|  |         "7dfae4743c9611f0b3a55254001e7c00": "solian.stellar.nova", | ||||||
|  |         "141713ee3d6211f085b352540025c377": "solian.stellar.supernova" | ||||||
|  |       } | ||||||
|  |     } | ||||||
|  |   }, | ||||||
|  |   "KnownProxies": ["127.0.0.1", "::1"], | ||||||
|  |   "Service": { | ||||||
|  |     "Name": "DysonNetwork.Drive", | ||||||
|  |     "Url": "https://localhost:7092" | ||||||
|  |   } | ||||||
|  | } | ||||||
							
								
								
									
										82
									
								
								publish/settings/pass.json
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										82
									
								
								publish/settings/pass.json
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,82 @@ | |||||||
|  | { | ||||||
|  |   "Debug": true, | ||||||
|  |   "BaseUrl": "http://localhost:5216", | ||||||
|  |   "SiteUrl": "https://id.solian.app", | ||||||
|  |   "Logging": { | ||||||
|  |     "LogLevel": { | ||||||
|  |       "Default": "Information", | ||||||
|  |       "Microsoft.AspNetCore": "Warning" | ||||||
|  |     } | ||||||
|  |   }, | ||||||
|  |   "AllowedHosts": "*", | ||||||
|  |   "ConnectionStrings": { | ||||||
|  |     "App": "Host=host.docker.internal;Port=5432;Database=dyson_pass;Username=postgres;Password=postgres;Include Error Detail=True;Maximum Pool Size=20;Connection Idle Lifetime=60" | ||||||
|  |   }, | ||||||
|  |   "Authentication": { | ||||||
|  |     "Schemes": { | ||||||
|  |       "Bearer": { | ||||||
|  |         "ValidAudiences": ["http://localhost:5071", "https://localhost:7099"], | ||||||
|  |         "ValidIssuer": "solar-network" | ||||||
|  |       } | ||||||
|  |     } | ||||||
|  |   }, | ||||||
|  |   "AuthToken": { | ||||||
|  |     "CookieDomain": "localhost", | ||||||
|  |     "PublicKeyPath": "Keys/PublicKey.pem", | ||||||
|  |     "PrivateKeyPath": "Keys/PrivateKey.pem" | ||||||
|  |   }, | ||||||
|  |   "OidcProvider": { | ||||||
|  |     "IssuerUri": "https://nt.solian.app", | ||||||
|  |     "PublicKeyPath": "Keys/PublicKey.pem", | ||||||
|  |     "PrivateKeyPath": "Keys/PrivateKey.pem", | ||||||
|  |     "AccessTokenLifetime": "01:00:00", | ||||||
|  |     "RefreshTokenLifetime": "30.00:00:00", | ||||||
|  |     "AuthorizationCodeLifetime": "00:30:00", | ||||||
|  |     "RequireHttpsMetadata": true | ||||||
|  |   }, | ||||||
|  |   "Captcha": { | ||||||
|  |     "Provider": "cloudflare", | ||||||
|  |     "ApiKey": "0x4AAAAAABCDUdOujj4feOb_", | ||||||
|  |     "ApiSecret": "0x4AAAAAABCDUWABiJQweqlB7tYq-IqIm8U" | ||||||
|  |   }, | ||||||
|  |   "GeoIp": { | ||||||
|  |     "DatabasePath": "./Keys/GeoLite2-City.mmdb" | ||||||
|  |   }, | ||||||
|  |   "Oidc": { | ||||||
|  |     "Google": { | ||||||
|  |       "ClientId": "961776991058-963m1qin2vtp8fv693b5fdrab5hmpl89.apps.googleusercontent.com", | ||||||
|  |       "ClientSecret": "" | ||||||
|  |     }, | ||||||
|  |     "Apple": { | ||||||
|  |       "ClientId": "dev.solsynth.solian", | ||||||
|  |       "TeamId": "W7HPZ53V6B", | ||||||
|  |       "KeyId": "B668YP4KBG", | ||||||
|  |       "PrivateKeyPath": "./Keys/Solarpass.p8" | ||||||
|  |     }, | ||||||
|  |     "Microsoft": { | ||||||
|  |       "ClientId": "YOUR_MICROSOFT_CLIENT_ID", | ||||||
|  |       "ClientSecret": "YOUR_MICROSOFT_CLIENT_SECRET", | ||||||
|  |       "DiscoveryEndpoint": "YOUR_MICROSOFT_DISCOVERY_ENDPOINT" | ||||||
|  |     } | ||||||
|  |   }, | ||||||
|  |   "Payment": { | ||||||
|  |     "Auth": { | ||||||
|  |       "Afdian": "<token here>" | ||||||
|  |     }, | ||||||
|  |     "Subscriptions": { | ||||||
|  |       "Afdian": { | ||||||
|  |         "7d17aae23c9611f0b5705254001e7c00": "solian.stellar.primary", | ||||||
|  |         "7dfae4743c9611f0b3a55254001e7c00": "solian.stellar.nova", | ||||||
|  |         "141713ee3d6211f085b352540025c377": "solian.stellar.supernova" | ||||||
|  |       } | ||||||
|  |     } | ||||||
|  |   }, | ||||||
|  |   "KnownProxies": ["127.0.0.1", "::1"], | ||||||
|  |   "Service": { | ||||||
|  |     "Name": "DysonNetwork.Pass", | ||||||
|  |     "Url": "https://localhost:7058" | ||||||
|  |   }, | ||||||
|  |   "Etcd": { | ||||||
|  |     "Insecure": true | ||||||
|  |   } | ||||||
|  | } | ||||||
							
								
								
									
										47
									
								
								publish/settings/ring.json
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										47
									
								
								publish/settings/ring.json
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,47 @@ | |||||||
|  | { | ||||||
|  |   "Debug": true, | ||||||
|  |   "BaseUrl": "http://localhost:5212", | ||||||
|  |   "Logging": { | ||||||
|  |     "LogLevel": { | ||||||
|  |       "Default": "Information", | ||||||
|  |       "Microsoft.AspNetCore": "Warning" | ||||||
|  |     } | ||||||
|  |   }, | ||||||
|  |   "AllowedHosts": "*", | ||||||
|  |   "ConnectionStrings": { | ||||||
|  |     "App": "Host=host.docker.internal;Port=5432;Database=dyson_pusher;Username=postgres;Password=postgres;Include Error Detail=True;Maximum Pool Size=20;Connection Idle Lifetime=60" | ||||||
|  |   }, | ||||||
|  |   "Notifications": { | ||||||
|  |     "Push": { | ||||||
|  |       "Production": true, | ||||||
|  |       "Google": "./Keys/Solian.json", | ||||||
|  |       "Apple": { | ||||||
|  |         "PrivateKey": "./Keys/Solian.p8", | ||||||
|  |         "PrivateKeyId": "4US4KSX4W6", | ||||||
|  |         "TeamId": "W7HPZ53V6B", | ||||||
|  |         "BundleIdentifier": "dev.solsynth.solian" | ||||||
|  |       } | ||||||
|  |     } | ||||||
|  |   }, | ||||||
|  |   "Email": { | ||||||
|  |     "Server": "smtp4dev.orb.local", | ||||||
|  |     "Port": 25, | ||||||
|  |     "UseSsl": false, | ||||||
|  |     "Username": "no-reply@mail.solsynth.dev", | ||||||
|  |     "Password": "password", | ||||||
|  |     "FromAddress": "no-reply@mail.solsynth.dev", | ||||||
|  |     "FromName": "Alphabot", | ||||||
|  |     "SubjectPrefix": "Solar Network" | ||||||
|  |   }, | ||||||
|  |   "GeoIp": { | ||||||
|  |     "DatabasePath": "./Keys/GeoLite2-City.mmdb" | ||||||
|  |   }, | ||||||
|  |   "KnownProxies": ["127.0.0.1", "::1"], | ||||||
|  |   "Service": { | ||||||
|  |     "Name": "DysonNetwork.Ring", | ||||||
|  |     "Url": "https://localhost:7259" | ||||||
|  |   }, | ||||||
|  |   "Etcd": { | ||||||
|  |     "Insecure": true | ||||||
|  |   } | ||||||
|  | } | ||||||
							
								
								
									
										38
									
								
								publish/settings/sphere.json
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										38
									
								
								publish/settings/sphere.json
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,38 @@ | |||||||
|  | { | ||||||
|  |   "Debug": true, | ||||||
|  |   "BaseUrl": "http://localhost:5071", | ||||||
|  |   "SiteUrl": "https://solian.app", | ||||||
|  |   "Logging": { | ||||||
|  |     "LogLevel": { | ||||||
|  |       "Default": "Information", | ||||||
|  |       "Microsoft.AspNetCore": "Warning" | ||||||
|  |     } | ||||||
|  |   }, | ||||||
|  |   "AllowedHosts": "*", | ||||||
|  |   "ConnectionStrings": { | ||||||
|  |     "App": "Host=host.docker.internal;Port=5432;Database=dyson_network;Username=postgres;Password=postgres;Include Error Detail=True;Maximum Pool Size=20;Connection Idle Lifetime=60" | ||||||
|  |   }, | ||||||
|  |   "GeoIp": { | ||||||
|  |     "DatabasePath": "./Keys/GeoLite2-City.mmdb" | ||||||
|  |   }, | ||||||
|  |   "RealtimeChat": { | ||||||
|  |     "Endpoint": "https://solar-network-im44o8gq.livekit.cloud", | ||||||
|  |     "ApiKey": "", | ||||||
|  |     "ApiSecret": "" | ||||||
|  |   }, | ||||||
|  |   "Translation": { | ||||||
|  |     "Provider": "Tencent", | ||||||
|  |     "Region": "ap-hongkong", | ||||||
|  |     "ProjectId": "0", | ||||||
|  |     "SecretId": "", | ||||||
|  |     "SecretKey": "" | ||||||
|  |   }, | ||||||
|  |   "KnownProxies": ["127.0.0.1", "::1"], | ||||||
|  |   "Etcd": { | ||||||
|  |     "Insecure": true | ||||||
|  |   }, | ||||||
|  |   "Service": { | ||||||
|  |     "Name": "DysonNetwork.Sphere", | ||||||
|  |     "Url": "https://localhost:7099" | ||||||
|  |   } | ||||||
|  | } | ||||||
							
								
								
									
										23
									
								
								settings/develop.json
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										23
									
								
								settings/develop.json
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,23 @@ | |||||||
|  | { | ||||||
|  |   "Debug": true, | ||||||
|  |   "BaseUrl": "http://localhost:5071", | ||||||
|  |   "SiteUrl": "https://solian.app", | ||||||
|  |   "Logging": { | ||||||
|  |     "LogLevel": { | ||||||
|  |       "Default": "Information", | ||||||
|  |       "Microsoft.AspNetCore": "Warning" | ||||||
|  |     } | ||||||
|  |   }, | ||||||
|  |   "AllowedHosts": "*", | ||||||
|  |   "ConnectionStrings": { | ||||||
|  |     "App": "Host=host.docker.internal;Port=5432;Database=dyson_network_dev;Username=postgres;Password=postgres;Include Error Detail=True;Maximum Pool Size=20;Connection Idle Lifetime=60" | ||||||
|  |   }, | ||||||
|  |   "KnownProxies": ["127.0.0.1", "::1"], | ||||||
|  |   "Etcd": { | ||||||
|  |     "Insecure": true | ||||||
|  |   }, | ||||||
|  |   "Service": { | ||||||
|  |     "Name": "DysonNetwork.Develop", | ||||||
|  |     "Url": "https://localhost:7192" | ||||||
|  |   } | ||||||
|  | } | ||||||
							
								
								
									
										127
									
								
								settings/drive.json
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										127
									
								
								settings/drive.json
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,127 @@ | |||||||
|  | { | ||||||
|  |   "Debug": true, | ||||||
|  |   "BaseUrl": "http://localhost:5090", | ||||||
|  |   "GatewayUrl": "http://localhost:5094", | ||||||
|  |   "Logging": { | ||||||
|  |     "LogLevel": { | ||||||
|  |       "Default": "Information", | ||||||
|  |       "Microsoft.AspNetCore": "Warning" | ||||||
|  |     } | ||||||
|  |   }, | ||||||
|  |   "AllowedHosts": "*", | ||||||
|  |   "ConnectionStrings": { | ||||||
|  |     "App": "Host=host.docker.internal;Port=5432;Database=dyson_drive;Username=postgres;Password=postgres;Include Error Detail=True;Maximum Pool Size=20;Connection Idle Lifetime=60" | ||||||
|  |   }, | ||||||
|  |   "Authentication": { | ||||||
|  |     "Schemes": { | ||||||
|  |       "Bearer": { | ||||||
|  |         "ValidAudiences": ["http://localhost:5071", "https://localhost:7099"], | ||||||
|  |         "ValidIssuer": "solar-network" | ||||||
|  |       } | ||||||
|  |     } | ||||||
|  |   }, | ||||||
|  |   "AuthToken": { | ||||||
|  |     "PublicKeyPath": "app/keys/PublicKey.pem", | ||||||
|  |     "PrivateKeyPath": "app/keys/PrivateKey.pem" | ||||||
|  |   }, | ||||||
|  |   "OidcProvider": { | ||||||
|  |     "IssuerUri": "https://nt.solian.app", | ||||||
|  |     "PublicKeyPath": "Keys/PublicKey.pem", | ||||||
|  |     "PrivateKeyPath": "Keys/PrivateKey.pem", | ||||||
|  |     "AccessTokenLifetime": "01:00:00", | ||||||
|  |     "RefreshTokenLifetime": "30.00:00:00", | ||||||
|  |     "AuthorizationCodeLifetime": "00:30:00", | ||||||
|  |     "RequireHttpsMetadata": true | ||||||
|  |   }, | ||||||
|  |   "Tus": { | ||||||
|  |     "StorePath": "Uploads" | ||||||
|  |   }, | ||||||
|  |   "Storage": { | ||||||
|  |     "PreferredRemote": "2adceae3-981a-4564-9b8d-5d71a211c873", | ||||||
|  |     "Remote": [ | ||||||
|  |       { | ||||||
|  |         "Id": "minio", | ||||||
|  |         "Label": "Minio", | ||||||
|  |         "Region": "auto", | ||||||
|  |         "Bucket": "solar-network-development", | ||||||
|  |         "Endpoint": "localhost:9000", | ||||||
|  |         "SecretId": "littlesheep", | ||||||
|  |         "SecretKey": "password", | ||||||
|  |         "EnabledSigned": true, | ||||||
|  |         "EnableSsl": false | ||||||
|  |       }, | ||||||
|  |       { | ||||||
|  |         "Id": "cloudflare", | ||||||
|  |         "Label": "Cloudflare R2", | ||||||
|  |         "Region": "auto", | ||||||
|  |         "Bucket": "solar-network", | ||||||
|  |         "Endpoint": "0a70a6d1b7128888c823359d0008f4e1.r2.cloudflarestorage.com", | ||||||
|  |         "SecretId": "8ff5d06c7b1639829d60bc6838a542e6", | ||||||
|  |         "SecretKey": "fd58158c5201be16d1872c9209d9cf199421dae3c2f9972f94b2305976580d67", | ||||||
|  |         "EnableSigned": true, | ||||||
|  |         "EnableSsl": true | ||||||
|  |       } | ||||||
|  |     ] | ||||||
|  |   }, | ||||||
|  |   "Captcha": { | ||||||
|  |     "Provider": "cloudflare", | ||||||
|  |     "ApiKey": "0x4AAAAAABCDUdOujj4feOb_", | ||||||
|  |     "ApiSecret": "0x4AAAAAABCDUWABiJQweqlB7tYq-IqIm8U" | ||||||
|  |   }, | ||||||
|  |   "Notifications": { | ||||||
|  |     "Topic": "dev.solsynth.solian", | ||||||
|  |     "Endpoint": "http://localhost:8088" | ||||||
|  |   }, | ||||||
|  |   "Email": { | ||||||
|  |     "Server": "smtp4dev.orb.local", | ||||||
|  |     "Port": 25, | ||||||
|  |     "UseSsl": false, | ||||||
|  |     "Username": "no-reply@mail.solsynth.dev", | ||||||
|  |     "Password": "password", | ||||||
|  |     "FromAddress": "no-reply@mail.solsynth.dev", | ||||||
|  |     "FromName": "Alphabot", | ||||||
|  |     "SubjectPrefix": "Solar Network" | ||||||
|  |   }, | ||||||
|  |   "RealtimeChat": { | ||||||
|  |     "Endpoint": "https://solar-network-im44o8gq.livekit.cloud", | ||||||
|  |     "ApiKey": "APIs6TiL8wj3A4j", | ||||||
|  |     "ApiSecret": "SffxRneIwTnlHPtEf3zicmmv3LUEl7xXael4PvWZrEhE" | ||||||
|  |   }, | ||||||
|  |   "GeoIp": { | ||||||
|  |     "DatabasePath": "./Keys/GeoLite2-City.mmdb" | ||||||
|  |   }, | ||||||
|  |   "Oidc": { | ||||||
|  |     "Google": { | ||||||
|  |       "ClientId": "961776991058-963m1qin2vtp8fv693b5fdrab5hmpl89.apps.googleusercontent.com", | ||||||
|  |       "ClientSecret": "" | ||||||
|  |     }, | ||||||
|  |     "Apple": { | ||||||
|  |       "ClientId": "dev.solsynth.solian", | ||||||
|  |       "TeamId": "W7HPZ53V6B", | ||||||
|  |       "KeyId": "B668YP4KBG", | ||||||
|  |       "PrivateKeyPath": "./Keys/Solarpass.p8" | ||||||
|  |     }, | ||||||
|  |     "Microsoft": { | ||||||
|  |       "ClientId": "YOUR_MICROSOFT_CLIENT_ID", | ||||||
|  |       "ClientSecret": "YOUR_MICROSOFT_CLIENT_SECRET", | ||||||
|  |       "DiscoveryEndpoint": "YOUR_MICROSOFT_DISCOVERY_ENDPOINT" | ||||||
|  |     } | ||||||
|  |   }, | ||||||
|  |   "Payment": { | ||||||
|  |     "Auth": { | ||||||
|  |       "Afdian": "<token here>" | ||||||
|  |     }, | ||||||
|  |     "Subscriptions": { | ||||||
|  |       "Afdian": { | ||||||
|  |         "7d17aae23c9611f0b5705254001e7c00": "solian.stellar.primary", | ||||||
|  |         "7dfae4743c9611f0b3a55254001e7c00": "solian.stellar.nova", | ||||||
|  |         "141713ee3d6211f085b352540025c377": "solian.stellar.supernova" | ||||||
|  |       } | ||||||
|  |     } | ||||||
|  |   }, | ||||||
|  |   "KnownProxies": ["127.0.0.1", "::1"], | ||||||
|  |   "Service": { | ||||||
|  |     "Name": "DysonNetwork.Drive", | ||||||
|  |     "Url": "https://localhost:7092" | ||||||
|  |   } | ||||||
|  | } | ||||||
							
								
								
									
										82
									
								
								settings/pass.json
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										82
									
								
								settings/pass.json
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,82 @@ | |||||||
|  | { | ||||||
|  |   "Debug": true, | ||||||
|  |   "BaseUrl": "http://localhost:5216", | ||||||
|  |   "SiteUrl": "https://id.solian.app", | ||||||
|  |   "Logging": { | ||||||
|  |     "LogLevel": { | ||||||
|  |       "Default": "Information", | ||||||
|  |       "Microsoft.AspNetCore": "Warning" | ||||||
|  |     } | ||||||
|  |   }, | ||||||
|  |   "AllowedHosts": "*", | ||||||
|  |   "ConnectionStrings": { | ||||||
|  |     "App": "Host=host.docker.internal;Port=5432;Database=dyson_pass;Username=postgres;Password=postgres;Include Error Detail=True;Maximum Pool Size=20;Connection Idle Lifetime=60" | ||||||
|  |   }, | ||||||
|  |   "Authentication": { | ||||||
|  |     "Schemes": { | ||||||
|  |       "Bearer": { | ||||||
|  |         "ValidAudiences": ["http://localhost:5071", "https://localhost:7099"], | ||||||
|  |         "ValidIssuer": "solar-network" | ||||||
|  |       } | ||||||
|  |     } | ||||||
|  |   }, | ||||||
|  |   "AuthToken": { | ||||||
|  |     "CookieDomain": "localhost", | ||||||
|  |     "PublicKeyPath": "Keys/PublicKey.pem", | ||||||
|  |     "PrivateKeyPath": "Keys/PrivateKey.pem" | ||||||
|  |   }, | ||||||
|  |   "OidcProvider": { | ||||||
|  |     "IssuerUri": "https://nt.solian.app", | ||||||
|  |     "PublicKeyPath": "Keys/PublicKey.pem", | ||||||
|  |     "PrivateKeyPath": "Keys/PrivateKey.pem", | ||||||
|  |     "AccessTokenLifetime": "01:00:00", | ||||||
|  |     "RefreshTokenLifetime": "30.00:00:00", | ||||||
|  |     "AuthorizationCodeLifetime": "00:30:00", | ||||||
|  |     "RequireHttpsMetadata": true | ||||||
|  |   }, | ||||||
|  |   "Captcha": { | ||||||
|  |     "Provider": "cloudflare", | ||||||
|  |     "ApiKey": "0x4AAAAAABCDUdOujj4feOb_", | ||||||
|  |     "ApiSecret": "0x4AAAAAABCDUWABiJQweqlB7tYq-IqIm8U" | ||||||
|  |   }, | ||||||
|  |   "GeoIp": { | ||||||
|  |     "DatabasePath": "./Keys/GeoLite2-City.mmdb" | ||||||
|  |   }, | ||||||
|  |   "Oidc": { | ||||||
|  |     "Google": { | ||||||
|  |       "ClientId": "961776991058-963m1qin2vtp8fv693b5fdrab5hmpl89.apps.googleusercontent.com", | ||||||
|  |       "ClientSecret": "" | ||||||
|  |     }, | ||||||
|  |     "Apple": { | ||||||
|  |       "ClientId": "dev.solsynth.solian", | ||||||
|  |       "TeamId": "W7HPZ53V6B", | ||||||
|  |       "KeyId": "B668YP4KBG", | ||||||
|  |       "PrivateKeyPath": "./Keys/Solarpass.p8" | ||||||
|  |     }, | ||||||
|  |     "Microsoft": { | ||||||
|  |       "ClientId": "YOUR_MICROSOFT_CLIENT_ID", | ||||||
|  |       "ClientSecret": "YOUR_MICROSOFT_CLIENT_SECRET", | ||||||
|  |       "DiscoveryEndpoint": "YOUR_MICROSOFT_DISCOVERY_ENDPOINT" | ||||||
|  |     } | ||||||
|  |   }, | ||||||
|  |   "Payment": { | ||||||
|  |     "Auth": { | ||||||
|  |       "Afdian": "<token here>" | ||||||
|  |     }, | ||||||
|  |     "Subscriptions": { | ||||||
|  |       "Afdian": { | ||||||
|  |         "7d17aae23c9611f0b5705254001e7c00": "solian.stellar.primary", | ||||||
|  |         "7dfae4743c9611f0b3a55254001e7c00": "solian.stellar.nova", | ||||||
|  |         "141713ee3d6211f085b352540025c377": "solian.stellar.supernova" | ||||||
|  |       } | ||||||
|  |     } | ||||||
|  |   }, | ||||||
|  |   "KnownProxies": ["127.0.0.1", "::1"], | ||||||
|  |   "Service": { | ||||||
|  |     "Name": "DysonNetwork.Pass", | ||||||
|  |     "Url": "https://localhost:7058" | ||||||
|  |   }, | ||||||
|  |   "Etcd": { | ||||||
|  |     "Insecure": true | ||||||
|  |   } | ||||||
|  | } | ||||||
							
								
								
									
										47
									
								
								settings/ring.json
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										47
									
								
								settings/ring.json
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,47 @@ | |||||||
|  | { | ||||||
|  |   "Debug": true, | ||||||
|  |   "BaseUrl": "http://localhost:5212", | ||||||
|  |   "Logging": { | ||||||
|  |     "LogLevel": { | ||||||
|  |       "Default": "Information", | ||||||
|  |       "Microsoft.AspNetCore": "Warning" | ||||||
|  |     } | ||||||
|  |   }, | ||||||
|  |   "AllowedHosts": "*", | ||||||
|  |   "ConnectionStrings": { | ||||||
|  |     "App": "Host=host.docker.internal;Port=5432;Database=dyson_pusher;Username=postgres;Password=postgres;Include Error Detail=True;Maximum Pool Size=20;Connection Idle Lifetime=60" | ||||||
|  |   }, | ||||||
|  |   "Notifications": { | ||||||
|  |     "Push": { | ||||||
|  |       "Production": true, | ||||||
|  |       "Google": "/app/keys/Solian.json", | ||||||
|  |       "Apple": { | ||||||
|  |         "PrivateKey": "./Keys/Solian.p8", | ||||||
|  |         "PrivateKeyId": "4US4KSX4W6", | ||||||
|  |         "TeamId": "W7HPZ53V6B", | ||||||
|  |         "BundleIdentifier": "dev.solsynth.solian" | ||||||
|  |       } | ||||||
|  |     } | ||||||
|  |   }, | ||||||
|  |   "Email": { | ||||||
|  |     "Server": "smtp4dev.orb.local", | ||||||
|  |     "Port": 25, | ||||||
|  |     "UseSsl": false, | ||||||
|  |     "Username": "no-reply@mail.solsynth.dev", | ||||||
|  |     "Password": "password", | ||||||
|  |     "FromAddress": "no-reply@mail.solsynth.dev", | ||||||
|  |     "FromName": "Alphabot", | ||||||
|  |     "SubjectPrefix": "Solar Network" | ||||||
|  |   }, | ||||||
|  |   "GeoIp": { | ||||||
|  |     "DatabasePath": "/app/keys/GeoLite2-City.mmdb" | ||||||
|  |   }, | ||||||
|  |   "KnownProxies": ["127.0.0.1", "::1"], | ||||||
|  |   "Service": { | ||||||
|  |     "Name": "DysonNetwork.Ring", | ||||||
|  |     "Url": "https://localhost:7259" | ||||||
|  |   }, | ||||||
|  |   "Etcd": { | ||||||
|  |     "Insecure": true | ||||||
|  |   } | ||||||
|  | } | ||||||
							
								
								
									
										38
									
								
								settings/sphere.json
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										38
									
								
								settings/sphere.json
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,38 @@ | |||||||
|  | { | ||||||
|  |   "Debug": true, | ||||||
|  |   "BaseUrl": "http://localhost:5071", | ||||||
|  |   "SiteUrl": "https://solian.app", | ||||||
|  |   "Logging": { | ||||||
|  |     "LogLevel": { | ||||||
|  |       "Default": "Information", | ||||||
|  |       "Microsoft.AspNetCore": "Warning" | ||||||
|  |     } | ||||||
|  |   }, | ||||||
|  |   "AllowedHosts": "*", | ||||||
|  |   "ConnectionStrings": { | ||||||
|  |     "App": "Host=host.docker.internal;Port=5432;Database=dyson_network;Username=postgres;Password=postgres;Include Error Detail=True;Maximum Pool Size=20;Connection Idle Lifetime=60" | ||||||
|  |   }, | ||||||
|  |   "GeoIp": { | ||||||
|  |     "DatabasePath": "/app/keys/GeoLite2-City.mmdb" | ||||||
|  |   }, | ||||||
|  |   "RealtimeChat": { | ||||||
|  |     "Endpoint": "https://solar-network-im44o8gq.livekit.cloud", | ||||||
|  |     "ApiKey": "", | ||||||
|  |     "ApiSecret": "" | ||||||
|  |   }, | ||||||
|  |   "Translation": { | ||||||
|  |     "Provider": "Tencent", | ||||||
|  |     "Region": "ap-hongkong", | ||||||
|  |     "ProjectId": "0", | ||||||
|  |     "SecretId": "", | ||||||
|  |     "SecretKey": "" | ||||||
|  |   }, | ||||||
|  |   "KnownProxies": ["127.0.0.1", "::1"], | ||||||
|  |   "Etcd": { | ||||||
|  |     "Insecure": true | ||||||
|  |   }, | ||||||
|  |   "Service": { | ||||||
|  |     "Name": "DysonNetwork.Sphere", | ||||||
|  |     "Url": "https://localhost:7099" | ||||||
|  |   } | ||||||
|  | } | ||||||
		Reference in New Issue
	
	Block a user