Skip to content
Snippets Groups Projects
identity_api.hh 2.12 KiB
Newer Older
  • Learn to ignore specific revisions
  • #ifndef __VEREIGN_GRPC_IDENTITY_API_HH
    #define __VEREIGN_GRPC_IDENTITY_API_HH
    
    #include "vereign/client_library/common_types.pb.h"
    #include "vereign/client_library/identity_types.pb.h"
    #include <vereign/grpc/gen/identity_api.hh>
    #include <boost/core/ignore_unused.hpp>
    
    namespace vereign::grpc {
    
    template <class VereignService>
    class IdentityAPI final : public gen::IdentityAPI<VereignService> {
    public:
      static constexpr const char* Name = gen::IdentityAPI<VereignService>::Name;
    
      using VereignServiceType = VereignService;
      using VereignServicePtr = std::unique_ptr<VereignService>;
    
      IdentityAPI(VereignServicePtr&& service)
        : gen::IdentityAPI<VereignService>{std::move(service)}
      {}
    
      IdentityAPI(const IdentityAPI&) = delete;
      auto operator=(const IdentityAPI&) -> IdentityAPI& = delete;
    
      auto LoginWithNewDevice(
        ::grpc::ServerContext* ctx,
        const client_library::LoginFormNewDevice* req,
        client_library::LoginFormNewDeviceResponse* resp
      ) -> ::grpc::Status override {
        boost::ignore_unused(ctx);
    
        try {
          this->service_->LoginWithNewDevice(req, resp);
        } catch (const std::exception& e) {
          resp->set_code("500");
          resp->set_status("Internal Service Error");
          resp->set_error(e.what());
        } catch (...) {
          resp->set_code("500");
          resp->set_status("Internal Service Error");
          resp->set_error("Internal Service Error");
        }
    
        return ::grpc::Status::OK;
      }
    
      auto LoginWithPreviouslyAddedDevice(
        ::grpc::ServerContext* ctx,
        const client_library::LoginFormPreviousAddedDevice* req,
        client_library::EmptyResponse* resp
      ) -> ::grpc::Status override {
        boost::ignore_unused(ctx);
    
        try {
          this->service_->LoginWithPreviouslyAddedDevice(req, resp);
        } catch (const std::exception& e) {
          resp->set_code("500");
          resp->set_status("Internal Service Error");
          resp->set_error(e.what());
        } catch (...) {
          resp->set_code("500");
          resp->set_status("Internal Service Error");
          resp->set_error("Internal Service Error");
        }
    
        return ::grpc::Status::OK;
      }
    };
    
    } // namespace vereign::grpc
    
    #endif // __VEREIGN_GRPC_IDENTITY_API_HH