diff --git a/Akari.Prototype.Server/Akari.Prototype.Server.csproj b/Akari.Prototype.Server/Akari.Prototype.Server.csproj index c7e1787..3880de8 100644 --- a/Akari.Prototype.Server/Akari.Prototype.Server.csproj +++ b/Akari.Prototype.Server/Akari.Prototype.Server.csproj @@ -5,7 +5,7 @@ - + diff --git a/Akari.Prototype.Server/Protos/akari.proto b/Akari.Prototype.Server/Protos/akari.proto new file mode 100644 index 0000000..b94c3c3 --- /dev/null +++ b/Akari.Prototype.Server/Protos/akari.proto @@ -0,0 +1,37 @@ +syntax = "proto3"; + +option csharp_namespace = "Akari.Prototype.Protos"; + +package akari; + +service AkariApi { + rpc Encrypt (EncryptRequest) returns (EncryptResponse); + + rpc Decrypt (DecryptRequest) returns (DecryptResponse); +} + +message EncryptRequest { + string application = 1; + string token = 2; + bytes plain = 3; +} + +message EncryptResponse { + oneof response { + string error_message = 1; + bytes encrypted = 2; + } +} + +message DecryptRequest { + string application = 1; + string token = 2; + bytes encrypted = 3; +} + +message DecryptResponse { + oneof response { + string error_message = 1; + bytes plain = 2; + } +} diff --git a/Akari.Prototype.Server/Services/AkariService.cs b/Akari.Prototype.Server/Services/AkariService.cs new file mode 100644 index 0000000..4da6fe3 --- /dev/null +++ b/Akari.Prototype.Server/Services/AkariService.cs @@ -0,0 +1,89 @@ +using Akari.Prototype.Protos; +using Akari.Prototype.Server.Services; +using Akari.Prototype.Server.Utils; +using Google.Protobuf; +using Grpc.Core; +using Microsoft.Extensions.Logging; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Threading.Tasks; + +namespace Akari.Prototype.Server +{ + public class AkariService : AkariApi.AkariApiBase + { + private readonly ILogger _logger; + private readonly IApplicationsManager _applications; + + public AkariService(ILogger logger, IApplicationsManager applications) + { + _logger = logger; + _applications = applications; + } + + public override Task Decrypt(DecryptRequest request, ServerCallContext context) + { + if (!_applications.Contains(request.Application)) + { + return Task.FromResult(new DecryptResponse() + { + ErrorMessage = "Application not found" + }); + } + + if (!_applications.VerifyToken(request.Application, request.Token)) + { + return Task.FromResult(new DecryptResponse() + { + ErrorMessage = "Wrong token" + }); + } + + if (_applications.TryRetrieveKey(request.Application, request.Token, out var key)) + { + return Task.FromResult(new DecryptResponse() + { + Plain = ByteString.CopyFrom(Security.AesGcmDecrypt(key, request.Encrypted.ToByteArray())) + }); + } + + return Task.FromResult(new DecryptResponse() + { + ErrorMessage = "No fingerprint auth found for this application" + }); + } + + public override Task Encrypt(EncryptRequest request, ServerCallContext context) + { + if (!_applications.Contains(request.Application)) + { + return Task.FromResult(new EncryptResponse() + { + ErrorMessage = "Application not found" + }); + } + + if (!_applications.VerifyToken(request.Application, request.Token)) + { + return Task.FromResult(new EncryptResponse() + { + ErrorMessage = "Wrong token" + }); + } + + if (_applications.TryRetrieveKey(request.Application, request.Token, out var key)) + { + return Task.FromResult(new EncryptResponse() + { + Encrypted = ByteString.CopyFrom(Security.AesGcmEncrypt(key, request.Plain.ToByteArray())) + }); + } + + return Task.FromResult(new EncryptResponse() + { + ErrorMessage = "No fingerprint auth found for this application" + }); + } + } +} diff --git a/Akari.Prototype.Server/Services/GreeterService.cs b/Akari.Prototype.Server/Services/GreeterService.cs deleted file mode 100644 index 1154b6f..0000000 --- a/Akari.Prototype.Server/Services/GreeterService.cs +++ /dev/null @@ -1,26 +0,0 @@ -using Grpc.Core; -using Microsoft.Extensions.Logging; -using System; -using System.Collections.Generic; -using System.Linq; -using System.Threading.Tasks; - -namespace Akari.Prototype.Server -{ - public class GreeterService : Greeter.GreeterBase - { - private readonly ILogger _logger; - public GreeterService(ILogger logger) - { - _logger = logger; - } - - public override Task SayHello(HelloRequest request, ServerCallContext context) - { - return Task.FromResult(new HelloReply - { - Message = "Hello " + request.Name - }); - } - } -} diff --git a/Akari.Prototype.Server/Startup.cs b/Akari.Prototype.Server/Startup.cs index af7c474..5c54724 100644 --- a/Akari.Prototype.Server/Startup.cs +++ b/Akari.Prototype.Server/Startup.cs @@ -64,7 +64,7 @@ namespace Akari.Prototype.Server app.UseEndpoints(endpoints => { - endpoints.MapGrpcService(); + endpoints.MapGrpcService(); endpoints.MapGet("/", async context => {