### A. Request Json
Dabory ERP의 모든 API는 단순성과 보안성을 지향하므로 모든 API REST 'POST' 만 사용한다.


```json
{
  "ClientId": "855636142382-PPJLtr9Nv6", // Client Id from DaborySSO
  "BeforeBase64": "FHMpL8A/WGPqZn+dv29mPY0hRk3C9SVZ5kfZi01g80Cib+ogu27EIjk5vAyK9PgJi/N1U0fO6qkhPaMb8YSyyLuUUsrM2AjYA4j4xf8FyY8ZMc0rqkBI55RfQl6EFVThfj0a48lf6v1S3sA3TdCzGorV0Js7IuhlrhU3eP7qrTGAz0BYh7u4gEp4VBrk3g9Ep1X+x7GA/yLGBg/Sw0qw7qqkfUVuV/lLxdbL1WKOfA1wmOv8Jxq8tRT0sRti2LlE6JuMF6Jq86gnuGLDGrNk", // Encryped Info
}
```

### H. 개별 Field  설명

B. Response Json
{GateToken string}

B.1. example:
{"GateToken":"C12xyir30STeqLDHaPhM"}

### B. GateToken 의 개요.
1. Dabory ERP는 one DB vs one API model 이 아니라  Multi DB vs one API 로서
REST API 내에 API Gateway 와 개별 업체의 여러가지 API를 동시에 처리하는 구조로 설계되어 있다.
Dabory ERP API has a structure that numerous company can access their own DB using only one REST API server.

즉 하나의 API Instance 가 다수개의 Frontend 에 대한 Request 를 동시에 처리하며 해당 Frontend 의 Request 에 대해 각각 다른 DB로 접근이 가능하도록 되어 있다.
That is, many API clients access only one API server and the Server API has a gateway for accessing each of DB connecting for many clients.

따라서
(1) Frontend 은 최초에 사용 DB에 대한 접속 config를 암호화해서 보내주면
Once API client encrypts DB connection info and send it to API server.

(2) Backend는 해당 정보를 복호화해서 서버에 저장하면서 해당 정보 주소를 GateToken 으로 보내주고
API server(Backend) decrypts and save the info  it in memory DB of API server while sending back the address of memory DB (GateToken)

(3) 그 이후 부터는 모든 Request에 GateToken을 포함시켜 보내면
the frontend client includes GateToken in API Header everytime when it requests service to backend.

(4) Backend는 해당 DB 에 대해 자동 처리할 수 있게 한 JWT  구조를 사용한다.
backend  fetch client DB connection info from memory DB which enable for backend to access to client DB.
(similar like JWT)

### 2. ClientId와 PublicKey 는 Dabory SSO 에서 발급 받은 정보이다. ( .env.dabory)

ClientId and PublicKey are from Dabory SSO published and they are saved in config/app.php

(1) 제공된 PrivateKey 와 DB 접속정보를 이용하여 암호한 정보를  Base64로  Encoding 한 정보를 BeforeBase64 에 넣는다.

Provided ClientId and PublicKey are supposed to be encrypted by "Sodium of PHP" and ended into Base64 to send to API server.

!! Caution : GateToken has valid period and  API client should have functions to auto-check and re-create Gate Token if it lost connection.
(2) PHP code 예제

$msg = '{

        "Driver":"mysql",

        "Host":"13.124.2.254",

        "Port": 3306,

        "Username":"weberp_db",

        "Database":"weberp_db",

        "Password":"xxxxxxxxx"

       }';

$before_base64 = base64_encode(sodium_crypto_box_seal($msg, $publicKey));

(3) detail sequence Diagram :

<object data="dabory_gateway_token_process.pdf.pdf" type="application/pdf" width="100%" >
</object>