From e15e63b79706f0ce1edb47213a7cc54e90ccdaa1 Mon Sep 17 00:00:00 2001 From: Vincent Young Date: Tue, 16 Apr 2024 14:54:18 -0400 Subject: [PATCH] feat: support access token-protected in `/v2/translate` --- README.md | 20 +++++++++++++++++--- main.go | 22 +++++++++++++++++++--- 2 files changed, 36 insertions(+), 6 deletions(-) diff --git a/README.md b/README.md index a6ad481c..e0d95a92 100644 --- a/README.md +++ b/README.md @@ -2,7 +2,7 @@ * @Author: Vincent Young * @Date: 2022-10-18 07:32:29 * @LastEditors: Vincent Young - * @LastEditTime: 2023-11-28 00:24:20 + * @LastEditTime: 2024-04-16 14:52:46 * @FilePath: /DeepLX/README.md * @Telegram: https://t.me/missuo * @@ -69,9 +69,23 @@ - `-port` or `-p` : Listening port. Default is `1188`. - `-token` : Access token. If you have set it up, each request needs to include `Authorization` in the **Headers** or `token` parameter in the **URL Params**. - `-authkey` : DeepL Official `AuthKey`. If you have set it up, after the 429 response, the official AuthKey will be used for the request. If multiple authKeys are used simultaneously, they need to be separated by commas. +- `/v2/translate` : This endpoint is fully compatible with the DeepL official API. When using this endpoint, please strictly adhere to the request styles outlined in the official DeepL documentation. Note that in this endpoint, please use `DeepL-Auth-Key $token` in the `Authorization`, which is actually the Access Token, not the official `Auth Key` of DeepL. -#### Requesting a token-protected **DeepLX API** instance using the `curl` +```bash +# Example of requesting a token-protected /v2/translate endpoint +curl -X POST 'http://127.0.0.1:1188/v2/translate' \ +--header 'Authorization: DeepL-Auth-Key [yourAccessToken]' \ +--header 'Content-Type: application/json' \ +--data '{ + "text": [ + "Hello, world!" + ], + "target_lang": "DE" +}' ``` + +#### Requesting a token-protected **DeepLX API** instance using the `curl` +```bash curl -X POST http://localhost:1188/translate \ -H "Content-Type: application/json" \ -H "Authorization: Bearer your_access_token" \ @@ -82,7 +96,7 @@ curl -X POST http://localhost:1188/translate \ }' ``` or -``` +```bash curl -X POST http://localhost:1188/translate?token=your_access_token \ -H "Content-Type: application/json" \ -d '{ diff --git a/main.go b/main.go index ae43941b..1a2d02e5 100644 --- a/main.go +++ b/main.go @@ -1,8 +1,8 @@ /* * @Author: Vincent Yang * @Date: 2023-07-01 21:45:34 - * @LastEditors: Vincent Yang - * @LastEditTime: 2024-04-13 18:50:25 + * @LastEditors: Vincent Young + * @LastEditTime: 2024-04-16 14:47:43 * @FilePath: /DeepLX/main.go * @Telegram: https://t.me/missuo * @GitHub: https://github.com/missuo @@ -343,7 +343,22 @@ func authMiddleware(cfg *Config) gin.HandlerFunc { if cfg.Token != "" { providedTokenInQuery := c.Query("token") providedTokenInHeader := c.GetHeader("Authorization") - if providedTokenInHeader != "Bearer "+cfg.Token && providedTokenInQuery != cfg.Token { + + // Compatability with the Bearer token format + if providedTokenInHeader != "" { + parts := strings.Split(providedTokenInHeader, " ") + if len(parts) == 2 { + if parts[0] == "Bearer" || parts[0] == "DeepL-Auth-Key" { + providedTokenInHeader = parts[1] + } else { + providedTokenInHeader = "" + } + } else { + providedTokenInHeader = "" + } + } + + if providedTokenInHeader != cfg.Token && providedTokenInQuery != cfg.Token { c.JSON(http.StatusUnauthorized, gin.H{ "code": http.StatusUnauthorized, "message": "Invalid access token", @@ -352,6 +367,7 @@ func authMiddleware(cfg *Config) gin.HandlerFunc { return } } + c.Next() } }