Skip to content
Snippets Groups Projects
identity_api.hh 3.1 KiB
Newer Older
  • Learn to ignore specific revisions
  • #ifndef __VEREIGN_GRPC_IDENTITY_API_HH
    #define __VEREIGN_GRPC_IDENTITY_API_HH
    
    #include <vereign/grpc/gen/identity_api.hh>
    
    
    #include <vereign/grpc/error_code.hh>
    #include <vereign/kvstore/errors.hh>
    #include <vereign/client_library/common_types.pb.h>
    #include <vereign/client_library/identity_types.pb.h>
    
    #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 kvstore::InvalidPinCodeError& e) {
          resp->set_code(ErrorCodeAsString(ErrorCode::InvalidPinCode));
          resp->set_status(ClientErrorStatus);
          resp->set_error(e.what());
    
    
        } catch (const std::exception& e) {
    
          resp->set_code(ErrorCodeAsString(ErrorCode::ClientError));
          resp->set_status(ClientErrorStatus);
    
          resp->set_error(e.what());
    
        } catch (...) {
    
          resp->set_code(ErrorCodeAsString(ErrorCode::UnexpectedError));
          resp->set_status(ClientErrorStatus);
          resp->set_error(ClientErrorStatus);
    
        }
    
        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 kvstore::StorageNotInitializedError& e) {
          resp->set_code(ErrorCodeAsString(ErrorCode::DeviceNotRegistered));
          resp->set_status(ClientErrorStatus);
          resp->set_error(e.what());
    
        } catch (const kvstore::InvalidPinCodeError& e) {
          resp->set_code(ErrorCodeAsString(ErrorCode::InvalidPinCode));
          resp->set_status(ClientErrorStatus);
          resp->set_error(e.what());
    
        } catch (const kvstore::InvalidIdentityError& e) {
          resp->set_code(ErrorCodeAsString(ErrorCode::InvalidIdentity));
          resp->set_status(ClientErrorStatus);
          resp->set_error(e.what());
    
    
        } catch (const std::exception& e) {
    
          resp->set_code(ErrorCodeAsString(ErrorCode::ClientError));
          resp->set_status(ClientErrorStatus);
    
          resp->set_error(e.what());
    
        } catch (...) {
    
          resp->set_code(ErrorCodeAsString(ErrorCode::UnexpectedError));
          resp->set_status(ClientErrorStatus);
          resp->set_error(ClientErrorStatus);
    
        }
    
        return ::grpc::Status::OK;
      }
    };
    
    } // namespace vereign::grpc
    
    #endif // __VEREIGN_GRPC_IDENTITY_API_HH