diff --git a/apps/accounts/api/account/application.py b/apps/accounts/api/account/application.py index 3905fa53d..54a18572d 100644 --- a/apps/accounts/api/account/application.py +++ b/apps/accounts/api/account/application.py @@ -27,6 +27,12 @@ class IntegrationApplicationViewSet(OrgBulkModelViewSet): 'get_account_secret': 'accounts.view_integrationapplication' } + def read_file(self, path): + if os.path.exists(path): + with open(path, 'r', encoding='utf-8') as file: + return file.read() + return '' + @action( ['GET'], detail=False, url_path='sdks', permission_classes=[IsValidUser] @@ -36,21 +42,18 @@ class IntegrationApplicationViewSet(OrgBulkModelViewSet): 'python': 'py', 'java': 'java', 'go': 'go', - 'javascript': 'js', - 'php': 'php', + 'node': 'js', + 'curl': 'sh', } sdk_language = request.query_params.get('language','python') sdk_path = os.path.join(settings.APPS_DIR, 'accounts', 'demos', sdk_language) readme_path = os.path.join(sdk_path, f'readme.{get_language()}.md') demo_path = os.path.join(sdk_path, f'demo.{code_suffix_mapper[sdk_language]}') - def read_file(path): - if os.path.exists(path): - with open(path, 'r', encoding='utf-8') as f: - return f.read() - return '' + readme_content = self.read_file(readme_path) + demo_content = self.read_file(demo_path) - return Response(data={'readme': read_file(readme_path), 'code': read_file(demo_path)}) + return Response(data={'readme': readme_content, 'code': demo_content}) @action( ['GET'], detail=True, url_path='secret', diff --git a/apps/accounts/demos/curl/README.en.md b/apps/accounts/demos/curl/README.en.md new file mode 100644 index 000000000..3cc315d97 --- /dev/null +++ b/apps/accounts/demos/curl/README.en.md @@ -0,0 +1,41 @@ +# Instructions + +## 1. Introduction + +This API provides PAM asset account viewing service, supports RESTful style calls, and returns data in JSON format. + +## 2. Environment Requirements + +- `cURL` + +## 3. Usage + +**Request Method**: `GET api/v1/accounts/integration-applications/account-secret/` + +**Request Parameters** + +| Parameter Name | Type | Required | Description | +|----------------|------|----------|-------------------| +| asset | str | Yes | Asset ID / Name | +| account | str | Yes | Account ID / Name | + +**响应示例**: +```json +{ + "id": "72b0b0aa-ad82-4182-a631-ae4865e8ae0e", + "secret": "123456" +} +``` + +## Frequently Asked Questions (FAQ) + +Q: How to obtain the API Key? + +A: You can create an application in PAM - Application Management to generate KEY_ID and KEY_SECRET. + +## Changelog + + +| Version | Changes | Date | +|---------|------------------------|------------| +| 1.0.0 | Initial version | 2025-02-11 | diff --git a/apps/accounts/demos/curl/README.ja.md b/apps/accounts/demos/curl/README.ja.md new file mode 100644 index 000000000..e9a32ced7 --- /dev/null +++ b/apps/accounts/demos/curl/README.ja.md @@ -0,0 +1,42 @@ +# 使用方法 + +## 1. 概要 + +本 API は PAM 資産アカウントサービスの表示を提供し、RESTful スタイルの呼び出しをサポートし、データは JSON 形式で返されます。 + +## 2. 環境要件 + +- `cURL` + +## 3. 使用方法 + +**リクエスト方法**: `GET api/v1/accounts/integration-applications/account-secret/` + +**リクエストパラメータ** + +| パラメータ名 | タイプ | 必須 | 説明 | +|-------------|------|----|----------------| +| asset | str | はい | 資産 ID / 資産名 | +| account | str | はい | アカウント ID / アカウント名 | + + +**レスポンス例**: +```json +{ + "id": "72b0b0aa-ad82-4182-a631-ae4865e8ae0e", + "secret": "123456" +} +``` + +## よくある質問(FAQ) + +Q: APIキーはどのように取得しますか? + +A: PAM - アプリケーション管理でアプリケーションを作成し、KEY_IDとKEY_SECRETを生成できます。 + +## バージョン履歴(Changelog) + + +| バージョン | 変更内容 | 日付 | +| -------- | ----------------- |------------| +| 1.0.0 | 初期バージョン | 2025-02-11 | diff --git a/apps/accounts/demos/curl/README.zh-hans.md b/apps/accounts/demos/curl/README.zh-hans.md new file mode 100644 index 000000000..0df2adeff --- /dev/null +++ b/apps/accounts/demos/curl/README.zh-hans.md @@ -0,0 +1,40 @@ +# 使用说明 + +## 1. 简介 + +本 API 提供了 PAM 查看资产账号服务,支持 RESTful 风格的调用,返回数据采用 JSON 格式。 + +## 2. 环境要求 + +- `cURL` + +## 3. 使用方法 + +**请求方式**: `GET api/v1/accounts/integration-applications/account-secret/` + +**请求参数** + +| 参数名 | 类型 | 必填 | 说明 | +|----------|------|-----|---------------| +| asset | str | 是 | 资产 ID / 资产名称 | +| account | str | 是 | 账号 ID / 账号名称 | + +**响应示例**: +```json +{ + "id": "72b0b0aa-ad82-4182-a631-ae4865e8ae0e", + "secret": "123456" +} +``` + +## 常见问题(FAQ) + +Q: API Key 如何获取? + +A: 你可以在 PAM - 应用管理 创建应用生成 KEY_ID 和 KEY_SECRET。 + +## 版本历史(Changelog) + +| 版本号 | 变更内容 | 日期 | +| ----- | ----------------- |------------| +| 1.0.0 | 初始版本 | 2025-02-11 | diff --git a/apps/accounts/demos/curl/README.zh-hant.md b/apps/accounts/demos/curl/README.zh-hant.md new file mode 100644 index 000000000..414f821f6 --- /dev/null +++ b/apps/accounts/demos/curl/README.zh-hant.md @@ -0,0 +1,39 @@ +## 1. 簡介 + +本 API 提供了 PAM 查看資產賬號服務,支持 RESTful 風格的調用,返回數據採用 JSON 格式。 + +## 2. 環境要求 + +- `cURL` + +## 3. 使用方法 + +**請求方式**: `GET api/v1/accounts/integration-applications/account-secret/` + +**請求參數** + +| 參數名 | 類型 | 必填 | 說明 | +|----------|------|-----|---------------| +| asset | str | 是 | 資產 ID / 資產名稱 | +| account | str | 是 | 賬號 ID / 賬號名稱 | + +**响应示例**: +```json +{ + "id": "72b0b0aa-ad82-4182-a631-ae4865e8ae0e", + "secret": "123456" +} +``` + +## 常見問題(FAQ) + +Q: API Key 如何獲取? + +A: 你可以在 PAM - 應用管理 創建應用生成 KEY_ID 和 KEY_SECRET。 + +## 版本歷史(Changelog) + + +| 版本號 | 變更內容 | 日期 | +| ----- | ----------------- |------------| +| 1.0.0 | 初始版本 | 2025-02-11 | \ No newline at end of file diff --git a/apps/accounts/demos/curl/demo.sh b/apps/accounts/demos/curl/demo.sh new file mode 100644 index 000000000..de1efa4b9 --- /dev/null +++ b/apps/accounts/demos/curl/demo.sh @@ -0,0 +1,37 @@ +#!/bin/bash + +# 配置参数 +API_URL=${API_URL:-"http://127.0.0.1:8080"} +KEY_ID=${API_KEY_ID:-"72b0b0aa-ad82-4182-a631-ae4865e8ae0e"} +KEY_SECRET=${API_KEY_SECRET:-"6fuSO7P1m4cj8SSlgaYdblOjNAmnxDVD7tr8"} +ORG_ID=${ORG_ID:-"00000000-0000-0000-0000-000000000002"} + +# 查询参数 +ASSET="ubuntu_docker" +ACCOUNT="root" +QUERY_STRING="asset=${ASSET}&account=${ACCOUNT}" + +# 计算时间戳 +DATE=$(date -u +"%a, %d %b %Y %H:%M:%S GMT") + +# 计算 (request-target) 需要包含查询参数 +REQUEST_TARGET="get /api/v1/accounts/integration-applications/account-secret/?${QUERY_STRING}" + +# 生成签名字符串 +SIGNING_STRING="(request-target): $REQUEST_TARGET +accept: application/json +date: $DATE +x-jms-org: $ORG_ID" + +# 计算 HMAC-SHA256 签名 +SIGNATURE=$(echo -n "$SIGNING_STRING" | openssl dgst -sha256 -hmac "$KEY_SECRET" -binary | base64) + +# 发送请求 +curl -G "$API_URL/api/v1/accounts/integration-applications/account-secret/" \ + -H "Accept: application/json" \ + -H "Date: $DATE" \ + -H "X-JMS-ORG: $ORG_ID" \ + -H "X-Source: jms-pam" \ + -H "Authorization: Signature keyId=\"$KEY_ID\",algorithm=\"hmac-sha256\",headers=\"(request-target) accept date x-jms-org\",signature=\"$SIGNATURE\"" \ + --data-urlencode "asset=$ASSET" \ + --data-urlencode "account=$ACCOUNT" \ No newline at end of file diff --git a/apps/accounts/demos/go/README.en.md b/apps/accounts/demos/go/README.en.md index 960b23f2d..c72ed9922 100644 --- a/apps/accounts/demos/go/README.en.md +++ b/apps/accounts/demos/go/README.en.md @@ -1,133 +1,45 @@ -# JumpServer PAM Client +# Instructions -This package provides a Go client for interacting with the JumpServer PAM API to retrieve secrets for various assets. It simplifies the process of sending requests and handling responses. +## 1. Introduction -## Features +This API provides the PAM asset account service, supports RESTful style calls, and returns data in JSON format. -- Validate parameters before sending requests. -- Support for both asset and account-based secret retrieval. -- Easy integration with JumpServer PAM API using HMAC-SHA256 signatures for authentication. - -## Usage Instructions - -1. **Download Go Code Files**: - Download the code files into your project directory. - -2. **Import the Package**: - Import the package in your Go file, and you can directly use its functionalities. - -## Requirements +## 2. Environment Requirements - `Go 1.16+` -- `github.com/google/uuid` -- `gopkg.in/twindagger/httpsig.v1` +- `crypto/hmac` +- `crypto/sha256` +- `encoding/base64` +- `net/http` -## Usage +## 3. Usage -### Initialization +**Request Method**: `GET api/v1/accounts/integration-applications/account-secret/` -To use the JumpServer PAM client, create an instance by providing the required `endpoint`, `keyID`, and `keySecret`. +**Request Parameters** -```go -package main +| Parameter Name | Type | Required | Description | +|----------------|------|----------|-------------------| +| asset | str | Yes | Asset ID / Asset Name | +| account | str | Yes | Account ID / Account Name | -import ( - "fmt" - - "your_module_path/jms_pam" -) - -func main() { - client := jms_pam.NewJumpServerPAM( - "http://127.0.0.1", // Replace with your JumpServer endpoint - "your-key-id", // Replace with your actual Key ID - "your-key-secret", // Replace with your actual Key Secret - "", // Leave empty for default organization ID - ) +**Response Example**: +```json +{ + "id": "72b0b0aa-ad82-4182-a631-ae4865e8ae0e", + "secret": "123456" } ``` -### Creating a Secret Request +## Frequently Asked Questions (FAQ) -You can create a request for a secret by specifying the asset or account information. +Q: How to obtain the API Key? -```go -request, err := jms_pam.NewSecretRequest("Linux", "", "root", "") -if err != nil { - fmt.Println("Error creating request:", err) - return -} -``` +A: You can create an application in PAM - Application Management to generate KEY_ID and KEY_SECRET. -### Sending the Request +## Changelog -Send the request using the `Send` method of the client. -```go -secretObj, err := client.Send(request) -if err != nil { - fmt.Println("Error sending request:", err) - return -} -``` - -### Handling the Response - -Check if the secret was retrieved successfully and handle the response accordingly. - -```go -if secretObj.Valid { - fmt.Println("Secret:", secretObj.Secret) -} else { - fmt.Println("Get secret failed:", string(secretObj.Desc)) -} -``` - -### Complete Example - -Here’s a complete example of how to use the client: - -```go -package main - -import ( - "fmt" - - "your_module_path/jms_pam" -) - -func main() { - client := jms_pam.NewJumpServerPAM( - "http://127.0.0.1", - "your-key-id", - "your-key-secret", - "", - ) - - request, err := jms_pam.NewSecretRequest("Linux", "", "root", "") - if err != nil { - fmt.Println("Error creating request:", err) - return - } - - secretObj, err := client.Send(request) - if err != nil { - fmt.Println("Error sending request:", err) - return - } - - if secretObj.Valid { - fmt.Println("Secret:", secretObj.Secret) - } else { - fmt.Println("Get secret failed:", string(secretObj.Desc)) - } -} -``` - -## Error Handling - -The library returns errors for invalid parameters when creating a `SecretRequest`. This includes checks for valid UUIDs and ensuring that required parameters are provided. - -## Contributing - -Contributions are welcome! Please open an issue or submit a pull request for any enhancements or bug fixes. +| Version | Changes | Date | +|---------|------------------------|------------| +| 1.0.0 | Initial version | 2025-02-11 | diff --git a/apps/accounts/demos/go/README.ja.md b/apps/accounts/demos/go/README.ja.md index 6539c4317..da50b1203 100644 --- a/apps/accounts/demos/go/README.ja.md +++ b/apps/accounts/demos/go/README.ja.md @@ -1,133 +1,45 @@ -# JumpServer PAM クライアント +# 使用方法 -このパッケージは、JumpServer PAM API と対話し、さまざまな資産のパスワードを取得するための Go クライアントを提供します。リクエストの送信とレスポンスの処理を簡素化します。 +## 1. 概要 -## 機能 +このAPIは、PAMの資産アカウントサービスの表示を提供し、RESTfulスタイルの呼び出しをサポートし、データはJSON形式で返されます。 -- リクエスト送信前にパラメータを検証します。 -- 資産およびアカウントに基づくパスワード取得をサポートします。 -- HMAC-SHA256 署名を使用して認証を行い、JumpServer PAM API との統合を容易にします。 - -## 使用手順 - -1. **Go コードファイルのダウンロード**: - コードファイルをプロジェクトディレクトリにダウンロードします。 - -2. **パッケージのインポート**: - Go ファイルにパッケージをインポートすると、その機能を直接使用できます。 - -## 要件 +## 2. 環境要件 - `Go 1.16+` -- `github.com/google/uuid` -- `gopkg.in/twindagger/httpsig.v1` +- `crypto/hmac` +- `crypto/sha256` +- `encoding/base64` +- `net/http` -## 使用方法 +## 3. 使用方法 -### 初期化 +**リクエスト方法**: `GET api/v1/accounts/integration-applications/account-secret/` -JumpServer PAM クライアントを使用するには、必要な `endpoint`、`keyID`、および `keySecret` を提供してインスタンスを作成します。 +**リクエストパラメータ** -```go -package main +| パラメータ名 | タイプ | 必須 | 説明 | +|-------------|-------|----|--------------| +| asset | str | はい | 資産ID / 資産名 | +| account | str | はい | アカウントID / アカウント名 | -import ( - "fmt" - - "your_module_path/jms_pam" -) - -func main() { - client := jms_pam.NewJumpServerPAM( - "http://127.0.0.1", // あなたの JumpServer エンドポイントに置き換えてください - "your-key-id", // 実際の Key ID に置き換えてください - "your-key-secret", // 実際の Key Secret に置き換えてください - "", // デフォルトの組織 ID を使用するには空のままにします - ) +**レスポンス例**: +```json +{ + "id": "72b0b0aa-ad82-4182-a631-ae4865e8ae0e", + "secret": "123456" } ``` -### パスワードリクエストの作成 +## よくある質問(FAQ) -資産またはアカウント情報を指定してリクエストを作成できます。 +Q: APIキーはどのように取得しますか? -```go -request, err := jms_pam.NewSecretRequest("Linux", "", "root", "") -if err != nil { - fmt.Println("リクエスト作成中にエラー:", err) - return -} -``` +A: PAM - アプリケーション管理でアプリケーションを作成し、KEY_IDとKEY_SECRETを生成できます。 -### リクエストの送信 +## バージョン履歴(Changelog) -クライアントの `Send` メソッドを使用してリクエストを送信します。 -```go -secretObj, err := client.Send(request) -if err != nil { - fmt.Println("リクエスト送信中にエラー:", err) - return -} -``` - -### レスポンスの処理 - -パスワードが正常に取得されたかどうかを確認し、それに応じてレスポンスを処理します。 - -```go -if secretObj.Valid { - fmt.Println("パスワード:", secretObj.Secret) -} else { - fmt.Println("パスワードの取得に失敗:", string(secretObj.Desc)) -} -``` - -### 完全な例 - -以下は、クライアントの使用方法に関する完全な例です。 - -```go -package main - -import ( - "fmt" - - "your_module_path/jms_pam" -) - -func main() { - client := jms_pam.NewJumpServerPAM( - "http://127.0.0.1", - "your-key-id", - "your-key-secret", - "", - ) - - request, err := jms_pam.NewSecretRequest("Linux", "", "root", "") - if err != nil { - fmt.Println("リクエスト作成中にエラー:", err) - return - } - - secretObj, err := client.Send(request) - if err != nil { - fmt.Println("リクエスト送信中にエラー:", err) - return - } - - if secretObj.Valid { - fmt.Println("パスワード:", secretObj.Secret) - } else { - fmt.Println("パスワードの取得に失敗:", string(secretObj.Desc)) - } -} -``` - -## エラーハンドリング - -このライブラリは、`SecretRequest` を作成する際に無効なパラメータに対するエラーを返します。これには、有効な UUID の確認や、必要なパラメータが提供されていることの確認が含まれます。 - -## 貢献 - -貢献を歓迎します!改善やバグ修正のために問題を提起したり、プルリクエストを送信してください。 +| バージョン | 変更内容 | 日付 | +| -------- | ----------------- |------------| +| 1.0.0 | 初期バージョン | 2025-02-11 | diff --git a/apps/accounts/demos/go/README.zh-hant.md b/apps/accounts/demos/go/README.zh-hant.md index 1e6163191..0d4c44e3e 100644 --- a/apps/accounts/demos/go/README.zh-hant.md +++ b/apps/accounts/demos/go/README.zh-hant.md @@ -1,26 +1,46 @@ -# JumpServer PAM 客戶端 +## 1. 簡介 -該包提供了一個 Go 客戶端,用於與 JumpServer PAM API 交互,以檢索各種資產的密碼。它簡化了發送請求和處理響應的過程。 +本 API 提供了 PAM 查看資產賬號服務,支持 RESTful 風格的調用,返回數據採用 JSON 格式。 -## 功能 - -- 在發送請求之前驗證參數。 -- 支持基於資產和帳戶的密碼檢索。 -- 使用 HMAC-SHA256 簽名進行身份驗證,方便與 JumpServer PAM API 集成。 - -## 使用說明 - -1. **下載 Go 代碼文件**: - 將代碼文件下載到您的項目目錄中。 - -2. **導入包**: - 在您的 Go 文件中導入該包,您即可直接使用其功能。 - -## 需求 +## 2. 環境要求 - `Go 1.16+` -- `github.com/google/uuid` -- `gopkg.in/twindagger/httpsig.v1` +- `crypto/hmac` +- `crypto/sha256` +- `encoding/base64` +- `net/http` + +## 3. 使用方法 + +**請求方式**: `GET api/v1/accounts/integration-applications/account-secret/` + +**請求參數** + +| 參數名 | 類型 | 必填 | 說明 | +|----------|------|-----|---------------| +| asset | str | 是 | 資產 ID / 資產名稱 | +| account | str | 是 | 賬號 ID / 賬號名稱 | + +**響應示例**: +```json +{ + "id": "72b0b0aa-ad82-4182-a631-ae4865e8ae0e", + "secret": "123456" +} +``` + +## 常見問題(FAQ) + +Q: API Key 如何獲取? + +A: 你可以在 PAM - 應用管理 創建應用生成 KEY_ID 和 KEY_SECRET。 + +## 版本歷史(Changelog) + + +| 版本號 | 變更內容 | 日期 | +| ----- | ----------------- |------------| +| 1.0.0 | 初始版本 | 2025-02-11 | ## 使用方法 diff --git a/apps/accounts/demos/java/Demo.java b/apps/accounts/demos/java/Demo.java new file mode 100644 index 000000000..ca15aeaa7 --- /dev/null +++ b/apps/accounts/demos/java/Demo.java @@ -0,0 +1,78 @@ +import java.net.URI; +import java.net.http.HttpClient; +import java.net.http.HttpRequest; +import java.net.http.HttpResponse; +import java.nio.charset.StandardCharsets; +import java.time.ZonedDateTime; +import java.time.format.DateTimeFormatter; +import java.util.Base64; +import javax.crypto.Mac; +import javax.crypto.spec.SecretKeySpec; +import java.net.URLEncoder; + +public class Demo { + private static final String API_URL = System.getenv().getOrDefault("API_URL", "http://127.0.0.1:8080"); + private static final String KEY_ID = System.getenv().getOrDefault("API_KEY_ID", "72b0b0aa-ad82-4182-a631-ae4865e8ae0e"); + private static final String KEY_SECRET = System.getenv().getOrDefault("API_KEY_SECRET", "6fuSO7P1m4cj8SSlgaYdblOjNAmnxDVD7tr8"); + private static final String ORG_ID = System.getenv().getOrDefault("ORG_ID", "00000000-0000-0000-0000-000000000002"); + + public static void main(String[] args) throws Exception { + APIClient client = new APIClient(); + String result = client.getAccountSecret("ubuntu_docker", "root"); + System.out.println(result); + } + + static class APIClient { + private final HttpClient httpClient = HttpClient.newHttpClient(); + + public String getAccountSecret(String asset, String account) throws Exception { + // 编码 URL 参数 + String queryString = "asset=" + URLEncoder.encode(asset, StandardCharsets.UTF_8) + + "&account=" + URLEncoder.encode(account, StandardCharsets.UTF_8); + + // 完整的 URL(带参数) + String url = API_URL + "/api/v1/accounts/integration-applications/account-secret/?" + queryString; + + // 获取当前 UTC 时间 + String date = ZonedDateTime.now().format(DateTimeFormatter.RFC_1123_DATE_TIME); + + // 构造 (request-target),包括查询参数 + String requestTarget = "get /api/v1/accounts/integration-applications/account-secret/?" + queryString; + + // 生成签名字符串 + String signingString = "(request-target): " + requestTarget + "\n" + + "accept: application/json\n" + + "date: " + date + "\n" + + "x-jms-org: " + ORG_ID; + String signature = sign(signingString, KEY_SECRET); + + // 构造 HTTP 请求 + HttpRequest request = HttpRequest.newBuilder() + .uri(URI.create(url)) + .header("Accept", "application/json") + .header("Date", date) + .header("X-JMS-ORG", ORG_ID) + .header("X-Source", "jms-pam") + .header("Authorization", "Signature keyId=\"" + KEY_ID + "\",algorithm=\"hmac-sha256\",headers=\"(request-target) accept date x-jms-org\",signature=\"" + signature + "\"") + .build(); + + // 发送请求 + HttpResponse response = httpClient.send(request, HttpResponse.BodyHandlers.ofString()); + if (response.statusCode() == 200) { + return response.body(); + } else { + System.err.println("API 请求失败: " + response.statusCode()); + return null; + } + } + + // HMAC-SHA256 签名计算 + private String sign(String data, String key) throws Exception { + Mac mac = Mac.getInstance("HmacSHA256"); + SecretKeySpec secretKeySpec = new SecretKeySpec(key.getBytes(StandardCharsets.UTF_8), "HmacSHA256"); + mac.init(secretKeySpec); + byte[] rawHmac = mac.doFinal(data.getBytes(StandardCharsets.UTF_8)); + return Base64.getEncoder().encodeToString(rawHmac); + } + } +} \ No newline at end of file diff --git a/apps/accounts/demos/java/README.en.md b/apps/accounts/demos/java/README.en.md new file mode 100644 index 000000000..8e0375148 --- /dev/null +++ b/apps/accounts/demos/java/README.en.md @@ -0,0 +1,42 @@ +# Instructions + +## 1. Introduction + +This API provides PAM asset account viewing service, supports RESTful style calls, and returns data in JSON format. + +## 2. Environment Requirements + +- `Java 8+` +- `HttpClient` + +## 3. Usage + +**Request Method**: `GET api/v1/accounts/integration-applications/account-secret/` + +**Request Parameters** + +| Parameter Name | Type | Required | Description | +|----------------|------|----------|-------------------| +| asset | str | Yes | Asset ID / Name | +| account | str | Yes | Account ID / Name | + +**Response Example**: +```json +{ + "id": "72b0b0aa-ad82-4182-a631-ae4865e8ae0e", + "secret": "123456" +} +``` + +## Frequently Asked Questions (FAQ) + +Q: How to obtain the API Key? + +A: You can create an application in PAM - Application Management to generate KEY_ID and KEY_SECRET. + +## Changelog + + +| Version | Changes | Date | +|---------|------------------------|------------| +| 1.0.0 | Initial version | 2025-02-11 | diff --git a/apps/accounts/demos/java/README.ja.md b/apps/accounts/demos/java/README.ja.md new file mode 100644 index 000000000..ad4ea63e2 --- /dev/null +++ b/apps/accounts/demos/java/README.ja.md @@ -0,0 +1,42 @@ +# 使用方法 + +## 1. 概要 + +本 API は PAM 資産アカウントサービスの表示を提供し、RESTful スタイルの呼び出しをサポートし、データは JSON 形式で返されます。 + +## 2. 環境要件 + +- `Java 8+` +- `HttpClient` + +## 3. 使用方法 + +**リクエスト方法**: `GET api/v1/accounts/integration-applications/account-secret/` + +**リクエストパラメータ** + +| パラメータ名 | タイプ | 必須 | 説明 | +|-------------|------|----|----------------| +| asset | str | はい | 資産 ID / 資産名 | +| account | str | はい | アカウント ID / アカウント名 | + +**レスポンス例**: +```json +{ + "id": "72b0b0aa-ad82-4182-a631-ae4865e8ae0e", + "secret": "123456" +} +``` + +## よくある質問(FAQ) + +Q: APIキーはどのように取得しますか? + +A: PAM - アプリケーション管理でアプリケーションを作成し、KEY_IDとKEY_SECRETを生成できます。 + +## バージョン履歴(Changelog) + + +| バージョン | 変更内容 | 日付 | +| -------- | ----------------- |------------| +| 1.0.0 | 初期バージョン | 2025-02-11 | diff --git a/apps/accounts/demos/java/README.zh-hans.md b/apps/accounts/demos/java/README.zh-hans.md new file mode 100644 index 000000000..d4581a9ac --- /dev/null +++ b/apps/accounts/demos/java/README.zh-hans.md @@ -0,0 +1,41 @@ +# 使用说明 + +## 1. 简介 + +本 API 提供了 PAM 查看资产账号服务,支持 RESTful 风格的调用,返回数据采用 JSON 格式。 + +## 2. 环境要求 + +- `Java 8+` +- `HttpClient` + +## 3. 使用方法 + +**请求方式**: `GET api/v1/accounts/integration-applications/account-secret/` + +**请求参数** + +| 参数名 | 类型 | 必填 | 说明 | +|----------|------|-----|---------------| +| asset | str | 是 | 资产 ID / 资产名称 | +| account | str | 是 | 账号 ID / 账号名称 | + +**响应示例**: +```json +{ + "id": "72b0b0aa-ad82-4182-a631-ae4865e8ae0e", + "secret": "123456" +} +``` + +## 常见问题(FAQ) + +Q: API Key 如何获取? + +A: 你可以在 PAM - 应用管理 创建应用生成 KEY_ID 和 KEY_SECRET。 + +## 版本历史(Changelog) + +| 版本号 | 变更内容 | 日期 | +| ----- | ----------------- |------------| +| 1.0.0 | 初始版本 | 2025-02-11 | diff --git a/apps/accounts/demos/java/README.zh-hant.md b/apps/accounts/demos/java/README.zh-hant.md new file mode 100644 index 000000000..693a8e1ea --- /dev/null +++ b/apps/accounts/demos/java/README.zh-hant.md @@ -0,0 +1,40 @@ +## 1. 簡介 + +本 API 提供了 PAM 查看資產賬號服務,支持 RESTful 風格的調用,返回數據採用 JSON 格式。 + +## 2. 環境要求 + +- `Java 8+` +- `HttpClient` + +## 3. 使用方法 + +**請求方式**: `GET api/v1/accounts/integration-applications/account-secret/` + +**請求參數** + +| 參數名 | 類型 | 必填 | 說明 | +|----------|------|-----|---------------| +| asset | str | 是 | 資產 ID / 資產名稱 | +| account | str | 是 | 賬號 ID / 賬號名稱 | + +**響應示例**: +```json +{ + "id": "72b0b0aa-ad82-4182-a631-ae4865e8ae0e", + "secret": "123456" +} +``` + +## 常見問題(FAQ) + +Q: API Key 如何獲取? + +A: 你可以在 PAM - 應用管理 創建應用生成 KEY_ID 和 KEY_SECRET。 + +## 版本歷史(Changelog) + + +| 版本號 | 變更內容 | 日期 | +| ----- | ----------------- |------------| +| 1.0.0 | 初始版本 | 2025-02-11 | \ No newline at end of file diff --git a/apps/accounts/demos/node/README.en.md b/apps/accounts/demos/node/README.en.md new file mode 100644 index 000000000..93f431237 --- /dev/null +++ b/apps/accounts/demos/node/README.en.md @@ -0,0 +1,43 @@ +# Instructions + +## 1. Introduction + +This API provides PAM asset account viewing service, supports RESTful style calls, and returns data in JSON format. + +## 2. Environment Requirements + +- `Node.js 16+` +- `axios ^1.7.9` +- `moment ^2.30.1` + +## 3. Usage + +**Request Method**: `GET api/v1/accounts/integration-applications/account-secret/` + +**Request Parameters** + +| Parameter Name | Type | Required | Description | +|----------------|------|----------|-------------------| +| asset | str | Yes | Asset ID / Name | +| account | str | Yes | Account ID / Name | + +**Response Example**: +```json +{ + "id": "72b0b0aa-ad82-4182-a631-ae4865e8ae0e", + "secret": "123456" +} +``` + +## Frequently Asked Questions (FAQ) + +Q: How to obtain the API Key? + +A: You can create an application in PAM - Application Management to generate KEY_ID and KEY_SECRET. + +## Changelog + + +| Version | Changes | Date | +|---------|------------------------|------------| +| 1.0.0 | Initial version | 2025-02-11 | diff --git a/apps/accounts/demos/node/README.ja.md b/apps/accounts/demos/node/README.ja.md new file mode 100644 index 000000000..4916fb0e8 --- /dev/null +++ b/apps/accounts/demos/node/README.ja.md @@ -0,0 +1,41 @@ +# 使用方法 + +## 1. 概要 + +本 API は PAM 資産アカウントサービスの表示を提供し、RESTful スタイルの呼び出しをサポートし、データは JSON 形式で返されます。 + +## 2. 環境要件 + +- `Node.js 16+` +- `axios ^1.7.9` +- `moment ^2.30.1` + +## 3. 使用方法 + +**リクエスト方法**: `GET api/v1/accounts/integration-applications/account-secret/` + +**リクエストパラメータ** + +| パラメータ名 | タイプ | 必須 | 説明 | +|-------------|------|----|----------------| +| asset | str | はい | 資産 ID / 資産名 | +| account | str | はい | アカウント ID / アカウント名 | + +**レスポンス例**: +```json +{ + "id": "72b0b0aa-ad82-4182-a631-ae4865e8ae0e", + "secret": "123456" +} +``` +よくある質問(FAQ) + +Q: API キーはどのように取得しますか? + +A: PAM - アプリケーション管理でアプリケーションを作成し、KEY_ID と KEY_SECRET を生成できます。 + +バージョン履歴(Changelog) + +| バージョン | 変更内容 | 日付 | +| ----- | ----------------- |------------| +| 1.0.0 | 初始版本 | 2025-02-11 | \ No newline at end of file diff --git a/apps/accounts/demos/node/README.zh-hans.md b/apps/accounts/demos/node/README.zh-hans.md new file mode 100644 index 000000000..42f0b68bf --- /dev/null +++ b/apps/accounts/demos/node/README.zh-hans.md @@ -0,0 +1,42 @@ +# 使用说明 + +## 1. 简介 + +本 API 提供了 PAM 查看资产账号服务,支持 RESTful 风格的调用,返回数据采用 JSON 格式。 + +## 2. 环境要求 + +- `Node.js 16+` +- `axios ^1.7.9` +- `moment ^2.30.1` + +## 3. 使用方法 + +**请求方式**: `GET api/v1/accounts/integration-applications/account-secret/` + +**请求参数** + +| 参数名 | 类型 | 必填 | 说明 | +|----------|------|-----|---------------| +| asset | str | 是 | 资产 ID / 资产名称 | +| account | str | 是 | 账号 ID / 账号名称 | + +**响应示例**: +```json +{ + "id": "72b0b0aa-ad82-4182-a631-ae4865e8ae0e", + "secret": "123456" +} +``` + +## 常见问题(FAQ) + +Q: API Key 如何获取? + +A: 你可以在 PAM - 应用管理 创建应用生成 KEY_ID 和 KEY_SECRET。 + +## 版本历史(Changelog) + +| 版本号 | 变更内容 | 日期 | +| ----- | ----------------- |------------| +| 1.0.0 | 初始版本 | 2025-02-11 | diff --git a/apps/accounts/demos/node/README.zh-hant.md b/apps/accounts/demos/node/README.zh-hant.md new file mode 100644 index 000000000..92d683bf4 --- /dev/null +++ b/apps/accounts/demos/node/README.zh-hant.md @@ -0,0 +1,41 @@ +## 1. 簡介 + +本 API 提供了 PAM 查看資產賬號服務,支持 RESTful 風格的調用,返回數據採用 JSON 格式。 + +## 2. 環境要求 + +- `Node.js 16+` +- `axios ^1.7.9` +- `moment ^2.30.1` + +## 3. 使用方法 + +**請求方式**: `GET api/v1/accounts/integration-applications/account-secret/` + +**請求參數** + +| 參數名 | 類型 | 必填 | 說明 | +|----------|------|-----|---------------| +| asset | str | 是 | 資產 ID / 資產名稱 | +| account | str | 是 | 賬號 ID / 賬號名稱 | + +**響應示例**: +```json +{ + "id": "72b0b0aa-ad82-4182-a631-ae4865e8ae0e", + "secret": "123456" +} +``` + +## 常見問題(FAQ) + +Q: API Key 如何獲取? + +A: 你可以在 PAM - 應用管理 創建應用生成 KEY_ID 和 KEY_SECRET。 + +## 版本歷史(Changelog) + + +| 版本號 | 變更內容 | 日期 | +| ----- | ----------------- |------------| +| 1.0.0 | 初始版本 | 2025-02-11 | \ No newline at end of file diff --git a/apps/accounts/demos/node/demo.js b/apps/accounts/demos/node/demo.js new file mode 100644 index 000000000..db8afcd4b --- /dev/null +++ b/apps/accounts/demos/node/demo.js @@ -0,0 +1,56 @@ +const axios = require('axios'); +const crypto = require('crypto'); +const moment = require('moment'); + +const API_URL = process.env.API_URL || "http://127.0.0.1:8080"; +const KEY_ID = process.env.API_KEY_ID || "72b0b0aa-ad82-4182-a631-ae4865e8ae0e"; +const KEY_SECRET = process.env.API_KEY_SECRET || "6fuSO7P1m4cj8SSlgaYdblOjNAmnxDVD7tr8"; +const ORG_ID = process.env.ORG_ID || "00000000-0000-0000-0000-000000000002"; + +class APIClient { + constructor() { + this.apiUrl = API_URL; + this.keyId = KEY_ID; + this.keySecret = KEY_SECRET; + this.orgId = ORG_ID; + } + + signRequest(method, url, params, headers) { + const date = moment().utc().format('ddd, DD MMM YYYY HH:mm:ss [GMT]'); + const queryString = Object.keys(params).length ? `?${new URLSearchParams(params).toString()}` : ""; + const requestTarget = `${method.toLowerCase()} ${url}${queryString}`; + headers['Date'] = date; + headers['X-JMS-ORG'] = this.orgId; + const signingString = `(request-target): ${requestTarget}\naccept: application/json\ndate: ${date}\nx-jms-org: ${this.orgId}`; + const signature = crypto.createHmac('sha256', this.keySecret).update(signingString).digest('base64'); + headers['Authorization'] = `Signature keyId="${this.keyId}",algorithm="hmac-sha256",headers="(request-target) accept date x-jms-org",signature="${signature}"`; + } + + async getAccountSecret(asset, account) { + const url = `/api/v1/accounts/integration-applications/account-secret/`; + const params = { asset: asset, account: account }; + const headers = { + 'Accept': 'application/json', + 'X-Source': 'jms-pam' + }; + this.signRequest('GET', url, params, headers); + + try { + const response = await axios.get(`${this.apiUrl}${url}`, { + headers: headers, + params: params, + timeout: 10000 + }); + return response.data; + } catch (error) { + console.error(`API 请求失败: ${error}`); + return null; + } + } +} + +(async () => { + const client = new APIClient(); + const result = await client.getAccountSecret("ubuntu_docker", "root"); + console.log(result); +})(); diff --git a/apps/accounts/demos/python/README.en.md b/apps/accounts/demos/python/README.en.md index e996b6576..a479b35e9 100644 --- a/apps/accounts/demos/python/README.en.md +++ b/apps/accounts/demos/python/README.en.md @@ -1,96 +1,42 @@ -# JumpServer PAM Client +# Instructions -This package provides a Python client for interacting with the JumpServer PAM API to retrieve secrets for various assets. It simplifies the process of sending requests and handling responses. +## 1. Introduction -## Features +This API provides the PAM asset account service, supports RESTful style calls, and returns data in JSON format. -- Validate parameters before sending requests. -- Support for both asset and account-based secret retrieval. -- Easy integration with JumpServer PAM API using HTTP signatures for authentication. +## 2. Environment Requirements -## Installation +- `Python 3.11+` +- `requests==2.31.0` +- `httpsig==1.3.0` -You can install the package via pip: +## 3. Usage +**Request Method**: `GET api/v1/accounts/integration-applications/account-secret/` -```bash -pip install jms_pam-0.0.1-py3-none-any.whl +**Request Parameters** + +| Parameter Name | Type | Required | Description | +|----------------|------|----------|-------------------| +| asset | str | Yes | Asset ID / Asset Name | +| account | str | Yes | Account ID / Account Name | + +**Response Example**: +```json +{ + "id": "72b0b0aa-ad82-4182-a631-ae4865e8ae0e", + "secret": "123456" +} ``` -## Requirements +## Frequently Asked Questions (FAQ) -- `Python 3.6+` -- `requests` -- `httpsig` +Q: How to obtain the API Key? -## Usage +A: You can create an application in PAM - Application Management to generate KEY_ID and KEY_SECRET. -### Initialization +## Changelog -To use the JumpServer PAM client, create an instance by providing the required `endpoint`, `key_id`, and `key_secret`. -```python -from jms_pam import JumpServerPAM, SecretRequest - -client = JumpServerPAM( - endpoint='http://127.0.0.1', - key_id='your-key-id', - key_secret='your-key-secret' -) -``` - -### Creating a Secret Request - -You can create a request for a secret by specifying the asset or account information. - -```python -request = SecretRequest(asset='Linux', account='root') -``` - -### Sending the Request - -Send the request using the `send` method of the client. - -```python -secret_obj = client.send(request) -``` - -### Handling the Response - -Check if the secret was retrieved successfully and handle the response accordingly. - -```python -if secret_obj.valid: - print('Secret: %s' % secret_obj.secret) -else: - print('Get secret failed: %s' % secret_obj.desc) -``` - -### Complete Example - -Here’s a complete example of how to use the client: - -```python -from jumpserver_pam_client import JumpServerPAM, SecretRequest - -client = JumpServerPAM( - endpoint='http://127.0.0.1', - key_id='your-key-id', - key_secret='your-key-secret' -) - -request = SecretRequest(asset='Linux', account='root') -secret_obj = client.send(request) - -if secret_obj.valid: - print('Secret: %s' % secret_obj.secret) -else: - print('Get secret failed: %s' % secret_obj.desc) -``` - -## Error Handling - -The library raises `RequestParamsError` if the parameters provided do not meet the validation requirements. This includes checks for valid UUIDs and interdependencies between parameters. - -## Contributing - -Contributions are welcome! Please open an issue or submit a pull request for any enhancements or bug fixes. +| Version | Changes | Date | +|---------|------------------------|------------| +| 1.0.0 | Initial version | 2025-02-11 | diff --git a/apps/accounts/demos/python/README.ja.md b/apps/accounts/demos/python/README.ja.md index 346ac2bc1..ec0b357bc 100644 --- a/apps/accounts/demos/python/README.ja.md +++ b/apps/accounts/demos/python/README.ja.md @@ -1,96 +1,42 @@ -# JumpServer PAM クライアント +# 使用方法 -このパッケージは、JumpServer PAM API と対話し、さまざまなアセットのシークレットを取得するための Python クライアントを提供します。リクエストを送信し、レスポンスを処理するプロセスを簡素化します。 +## 1. 概要 -## 特徴 +このAPIは、PAMの資産アカウントサービスの表示を提供し、RESTfulスタイルの呼び出しをサポートし、データはJSON形式で返されます。 -- リクエストを送信する前にパラメータを検証します。 -- アセットおよびアカウントベースのシークレット取得をサポートします。 -- HTTP 署名を使用して JumpServer PAM API と簡単に統合できます。 +## 2. 環境要件 -## インストール +- `Python 3.11+` +- `requests==2.31.0` +- `httpsig==1.3.0` -以下のコマンドを使用して、パッケージを pip でインストールできます: +## 3. 使用方法 +**リクエスト方法**: `GET api/v1/accounts/integration-applications/account-secret/` -```bash -pip install jms_pam-0.0.1-py3-none-any.whl +**リクエストパラメータ** + +| パラメータ名 | タイプ | 必須 | 説明 | +|-------------|-------|----|--------------| +| asset | str | はい | 資産ID / 資産名 | +| account | str | はい | アカウントID / アカウント名 | + +**レスポンス例**: +```json +{fi + "id": "72b0b0aa-ad82-4182-a631-ae4865e8ae0e", + "secret": "123456" +} ``` -## 要件 +## よくある質問(FAQ) -- `Python 3.6+` -- `requests` -- `httpsig` +Q: APIキーはどのように取得しますか? -## 使用方法 +A: PAM - アプリケーション管理でアプリケーションを作成し、KEY_IDとKEY_SECRETを生成できます。 -### 初期化 +## バージョン履歴(Changelog) -JumpServer PAM クライアントを使用するには、必要な `endpoint`、`key_id`、および `key_secret` を提供してインスタンスを作成します。 -```python -from jms_pam import JumpServerPAM, SecretRequest - -client = JumpServerPAM( - endpoint='http://127.0.0.1', - key_id='your-key-id', - key_secret='your-key-secret' -) -``` - -### シークレットリクエストの作成 - -アセットまたはアカウント情報を指定して、シークレットのリクエストを作成できます。 - -```python -request = SecretRequest(asset='Linux', account='root') -``` - -### リクエストの送信 - -クライアントの `send` メソッドを使用してリクエストを送信します。 - -```python -secret_obj = client.send(request) -``` - -### レスポンスの処理 - -シークレットが正常に取得されたかどうかを確認し、レスポンスを適切に処理します。 - -```python -if secret_obj.valid: - print('秘密: %s' % secret_obj.secret) -else: - print('シークレットの取得に失敗しました: %s' % secret_obj.desc) -``` - -### 完全な例 - -以下は、クライアントの使用方法の完全な例です: - -```python -from jumpserver_pam_client import JumpServerPAM, SecretRequest - -client = JumpServerPAM( - endpoint='http://127.0.0.1', - key_id='your-key-id', - key_secret='your-key-secret' -) - -request = SecretRequest(asset='Linux', account='root') -secret_obj = client.send(request) - -if secret_obj.valid: - print('秘密: %s' % secret_obj.secret) -else: - print('シークレットの取得に失敗しました: %s' % secret_obj.desc) -``` - -## エラーハンドリング - -ライブラリは、提供されたパラメータが検証要件を満たしていない場合に `RequestParamsError` を発生させます。これには、有効な UUID の確認やパラメータ間の相互依存性のチェックが含まれます。 - -## 貢献 - -貢献を歓迎します!改善やバグ修正のために、問題を開くかプルリクエストを送信してください。 +| バージョン | 変更内容 | 日付 | +| -------- | ----------------- |------------| +| 1.0.0 | 初期バージョン | 2025-02-11 | diff --git a/apps/accounts/demos/python/README.zh-hant.md b/apps/accounts/demos/python/README.zh-hant.md index 538cc6c83..b899d3bda 100644 --- a/apps/accounts/demos/python/README.zh-hant.md +++ b/apps/accounts/demos/python/README.zh-hant.md @@ -1,96 +1,42 @@ -# JumpServer PAM 客戶端 +# 使用說明 -此套件提供了一個 Python 客戶端,用於與 JumpServer PAM API 互動,以檢索各種資產的秘密。它簡化了發送請求和處理響應的過程。 +## 1. 簡介 -## 特性 +本 API 提供了 PAM 查看資產賬號服務,支持 RESTful 風格的調用,返回數據採用 JSON 格式。 -- 在發送請求之前驗證參數。 -- 支持基於資產和帳戶的秘密檢索。 -- 通過 HTTP 簽名輕鬆集成 JumpServer PAM API。 +## 2. 環境要求 -## 安裝 +- `Python 3.11+` +- `requests==2.31.0` +- `httpsig==1.3.0` -您可以通過 pip 安裝此套件: +## 3. 使用方法 +**請求方式**: `GET api/v1/accounts/integration-applications/account-secret/` -```bash -pip install jms_pam-0.0.1-py3-none-any.whl +**請求參數** + +| 參數名 | 類型 | 必填 | 說明 | +|------------|------|----|--------------| +| asset | str | 是 | 資產 ID / 資產名稱 | +| account | str | 是 | 賬號 ID / 賬號名稱 | + +**響應示例**: +```json +{ + "id": "72b0b0aa-ad82-4182-a631-ae4865e8ae0e", + "secret": "123456" +} ``` -## 需求 +## 常見問題(FAQ) -- `Python 3.6+` -- `requests` -- `httpsig` +Q: API Key 如何獲取? -## 使用方法 +A: 你可以在 PAM - 應用管理 創建應用生成 KEY_ID 和 KEY_SECRET。 -### 初始化 +## 版本歷史(Changelog) -要使用 JumpServer PAM 客戶端,通過提供所需的 `endpoint`、`key_id` 和 `key_secret` 創建一個實例。 -```python -from jms_pam import JumpServerPAM, SecretRequest - -client = JumpServerPAM( - endpoint='http://127.0.0.1', - key_id='your-key-id', - key_secret='your-key-secret' -) -``` - -### 創建秘密請求 - -您可以通過指定資產或帳戶信息來創建一個秘密請求。 - -```python -request = SecretRequest(asset='Linux', account='root') -``` - -### 發送請求 - -使用客戶端的 `send` 方法發送請求。 - -```python -secret_obj = client.send(request) -``` - -### 處理響應 - -檢查秘密是否成功檢索,並相應地處理響應。 - -```python -if secret_obj.valid: - print('秘密: %s' % secret_obj.secret) -else: - print('獲取秘密失敗: %s' % secret_obj.desc) -``` - -### 完整示例 - -以下是如何使用該客戶端的完整示例: - -```python -from jumpserver_pam_client import JumpServerPAM, SecretRequest - -client = JumpServerPAM( - endpoint='http://127.0.0.1', - key_id='your-key-id', - key_secret='your-key-secret' -) - -request = SecretRequest(asset='Linux', account='root') -secret_obj = client.send(request) - -if secret_obj.valid: - print('秘密: %s' % secret_obj.secret) -else: - print('獲取秘密失敗: %s' % secret_obj.desc) -``` - -## 錯誤處理 - -如果提供的參數不符合驗證要求,該庫將引發 `RequestParamsError`。這包括對有效 UUID 的檢查和參數之間的相互依賴性檢查。 - -## 貢獻 - -歡迎貢獻!請打開一個問題或提交拉取請求,以進行任何增強或修復錯誤。 +| 版本號 | 變更內容 | 日期 | +| ----- | ----------------- |------------| +| 1.0.0 | 初始版本 | 2025-02-11 | diff --git a/apps/i18n/lina/en.json b/apps/i18n/lina/en.json index 774e13a9e..06bc20d98 100644 --- a/apps/i18n/lina/en.json +++ b/apps/i18n/lina/en.json @@ -15,7 +15,6 @@ "AccountBackupDetail": "Backup account details", "AccountBackupList": "Backup account", "AccountBackupUpdate": "Update account backup", - "AccountChangeSecret": "Change account secret", "AccountChangeSecretDetail": "Change account secret details", "AccountDeleteConfirmMsg": "Delete account, continue?", "AccountDiscoverDetail": "Gather account details", @@ -1401,7 +1400,7 @@ "WebUpdate": "Update the asset - web", "Wednesday": "Wed", "Week": "Week", - "WeekAdd": "Weekly add", + "WeekAdd": "New this week", "WeekOrTime": "Day/time", "WildcardsAllowed": "Allowed wildcards", "WindowsPushHelpText": "Windows assets temporarily do not support key push", @@ -1464,5 +1463,8 @@ "FailCount": "Failure Count", "ChangeSecretFailAccounts": "Secret Change Failed Accounts", "OngoingPwdChange": "Ongoing Secret Change", - "AccountResult": "Account Success/Failure" + "AccountResult": "Account Success/Failure", + "ResetSecret": "Reset secret", + "Connectable": "Connectable", + "AccountRecord": "Account record" } \ No newline at end of file diff --git a/apps/i18n/lina/zh.json b/apps/i18n/lina/zh.json index b3222a440..f0c414b4a 100644 --- a/apps/i18n/lina/zh.json +++ b/apps/i18n/lina/zh.json @@ -14,7 +14,6 @@ "AccountBackupDetail": "账号备份详情", "AccountBackupList": "账号备份列表", "AccountBackupUpdate": "更新账号备份", - "AccountChangeSecret": "账号改密", "AccountChangeSecretDetail": "账号改密详情", "AccountDeleteConfirmMsg": "删除账号,是否继续?", "AccountDiscoverDetail": "账号发现详情", @@ -1469,5 +1468,13 @@ "FailCount": "失败数", "ChangeSecretFailAccounts": "改密失败账号", "OngoingPwdChange": "当前正在改密情况", - "AccountResult": "账号成功/失败情况" + "AccountResult": "账号成功/失败情况", + "ResetSecret": "可改密", + "Connectable": "可连接", + "AccountRecord": "账号记录", + "RiskDetection": "风险检测", + "DetectResults": "检测结果", + "DetectTasks": "检测任务", + "DetectEngines": "检测引擎", + "ChangeSecret": "账号改密" } \ No newline at end of file