feat(work): 新增可信设备管理相关接口

This commit is contained in:
Fu Diwei 2024-06-01 10:44:13 +08:00
parent 53d18df6fd
commit 402b58f86b
24 changed files with 715 additions and 0 deletions

View File

@ -32,6 +32,146 @@ namespace SKIT.FlurlHttpClient.Wechat.Work
return await client.SendFlurlRequestAsJsonAsync<Models.CgibinSecurityGetFileOperateRecordResponse>(flurlReq, data: request, cancellationToken: cancellationToken).ConfigureAwait(false);
}
#region TrustDevice
/// <summary>
/// <para>异步调用 [POST] /cgi-bin/security/trustdevice/import 接口。</para>
/// <para>
/// REF: <br/>
/// <![CDATA[ https://developer.work.weixin.qq.com/document/path/98920 ]]>
/// </para>
/// </summary>
/// <param name="client"></param>
/// <param name="request"></param>
/// <param name="cancellationToken"></param>
/// <returns></returns>
public static async Task<Models.CgibinSecurityTrustDeviceImportResponse> ExecuteCgibinSecurityTrustDeviceImportAsync(this WechatWorkClient client, Models.CgibinSecurityTrustDeviceImportRequest request, CancellationToken cancellationToken = default)
{
if (client is null) throw new ArgumentNullException(nameof(client));
if (request is null) throw new ArgumentNullException(nameof(request));
IFlurlRequest flurlReq = client
.CreateFlurlRequest(request, HttpMethod.Post, "cgi-bin", "security", "trustdevice", "import")
.SetQueryParam("access_token", request.AccessToken);
return await client.SendFlurlRequestAsJsonAsync<Models.CgibinSecurityTrustDeviceImportResponse>(flurlReq, data: request, cancellationToken: cancellationToken).ConfigureAwait(false);
}
/// <summary>
/// <para>异步调用 [POST] /cgi-bin/security/trustdevice/list 接口。</para>
/// <para>
/// REF: <br/>
/// <![CDATA[ https://developer.work.weixin.qq.com/document/path/98920 ]]>
/// </para>
/// </summary>
/// <param name="client"></param>
/// <param name="request"></param>
/// <param name="cancellationToken"></param>
/// <returns></returns>
public static async Task<Models.CgibinSecurityTrustDeviceListResponse> ExecuteCgibinSecurityTrustDeviceListAsync(this WechatWorkClient client, Models.CgibinSecurityTrustDeviceListRequest request, CancellationToken cancellationToken = default)
{
if (client is null) throw new ArgumentNullException(nameof(client));
if (request is null) throw new ArgumentNullException(nameof(request));
IFlurlRequest flurlReq = client
.CreateFlurlRequest(request, HttpMethod.Post, "cgi-bin", "security", "trustdevice", "list")
.SetQueryParam("access_token", request.AccessToken);
return await client.SendFlurlRequestAsJsonAsync<Models.CgibinSecurityTrustDeviceListResponse>(flurlReq, data: request, cancellationToken: cancellationToken).ConfigureAwait(false);
}
/// <summary>
/// <para>异步调用 [POST] /cgi-bin/security/trustdevice/get_by_user 接口。</para>
/// <para>
/// REF: <br/>
/// <![CDATA[ https://developer.work.weixin.qq.com/document/path/98920 ]]>
/// </para>
/// </summary>
/// <param name="client"></param>
/// <param name="request"></param>
/// <param name="cancellationToken"></param>
/// <returns></returns>
public static async Task<Models.CgibinSecurityTrustDeviceGetByUserResponse> ExecuteCgibinSecurityTrustDeviceGetByUserAsync(this WechatWorkClient client, Models.CgibinSecurityTrustDeviceGetByUserRequest request, CancellationToken cancellationToken = default)
{
if (client is null) throw new ArgumentNullException(nameof(client));
if (request is null) throw new ArgumentNullException(nameof(request));
IFlurlRequest flurlReq = client
.CreateFlurlRequest(request, HttpMethod.Post, "cgi-bin", "security", "trustdevice", "get_by_user")
.SetQueryParam("access_token", request.AccessToken);
return await client.SendFlurlRequestAsJsonAsync<Models.CgibinSecurityTrustDeviceGetByUserResponse>(flurlReq, data: request, cancellationToken: cancellationToken).ConfigureAwait(false);
}
/// <summary>
/// <para>异步调用 [POST] /cgi-bin/security/trustdevice/delete 接口。</para>
/// <para>
/// REF: <br/>
/// <![CDATA[ https://developer.work.weixin.qq.com/document/path/98920 ]]>
/// </para>
/// </summary>
/// <param name="client"></param>
/// <param name="request"></param>
/// <param name="cancellationToken"></param>
/// <returns></returns>
public static async Task<Models.CgibinSecurityTrustDeviceDeleteResponse> ExecuteCgibinSecurityTrustDeviceDeleteAsync(this WechatWorkClient client, Models.CgibinSecurityTrustDeviceDeleteRequest request, CancellationToken cancellationToken = default)
{
if (client is null) throw new ArgumentNullException(nameof(client));
if (request is null) throw new ArgumentNullException(nameof(request));
IFlurlRequest flurlReq = client
.CreateFlurlRequest(request, HttpMethod.Post, "cgi-bin", "security", "trustdevice", "delete")
.SetQueryParam("access_token", request.AccessToken);
return await client.SendFlurlRequestAsJsonAsync<Models.CgibinSecurityTrustDeviceDeleteResponse>(flurlReq, data: request, cancellationToken: cancellationToken).ConfigureAwait(false);
}
/// <summary>
/// <para>异步调用 [POST] /cgi-bin/security/trustdevice/approve 接口。</para>
/// <para>
/// REF: <br/>
/// <![CDATA[ https://developer.work.weixin.qq.com/document/path/98920 ]]>
/// </para>
/// </summary>
/// <param name="client"></param>
/// <param name="request"></param>
/// <param name="cancellationToken"></param>
/// <returns></returns>
public static async Task<Models.CgibinSecurityTrustDeviceApproveResponse> ExecuteCgibinSecurityTrustDeviceApproveAsync(this WechatWorkClient client, Models.CgibinSecurityTrustDeviceApproveRequest request, CancellationToken cancellationToken = default)
{
if (client is null) throw new ArgumentNullException(nameof(client));
if (request is null) throw new ArgumentNullException(nameof(request));
IFlurlRequest flurlReq = client
.CreateFlurlRequest(request, HttpMethod.Post, "cgi-bin", "security", "trustdevice", "approve")
.SetQueryParam("access_token", request.AccessToken);
return await client.SendFlurlRequestAsJsonAsync<Models.CgibinSecurityTrustDeviceApproveResponse>(flurlReq, data: request, cancellationToken: cancellationToken).ConfigureAwait(false);
}
/// <summary>
/// <para>异步调用 [POST] /cgi-bin/security/trustdevice/reject 接口。</para>
/// <para>
/// REF: <br/>
/// <![CDATA[ https://developer.work.weixin.qq.com/document/path/98920 ]]>
/// </para>
/// </summary>
/// <param name="client"></param>
/// <param name="request"></param>
/// <param name="cancellationToken"></param>
/// <returns></returns>
public static async Task<Models.CgibinSecurityTrustDeviceRejectResponse> ExecuteCgibinSecurityTrustDeviceRejectAsync(this WechatWorkClient client, Models.CgibinSecurityTrustDeviceRejectRequest request, CancellationToken cancellationToken = default)
{
if (client is null) throw new ArgumentNullException(nameof(client));
if (request is null) throw new ArgumentNullException(nameof(request));
IFlurlRequest flurlReq = client
.CreateFlurlRequest(request, HttpMethod.Post, "cgi-bin", "security", "trustdevice", "reject")
.SetQueryParam("access_token", request.AccessToken);
return await client.SendFlurlRequestAsJsonAsync<Models.CgibinSecurityTrustDeviceRejectResponse>(flurlReq, data: request, cancellationToken: cancellationToken).ConfigureAwait(false);
}
#endregion
#region Vip
/// <summary>
/// <para>异步调用 [POST] /cgi-bin/security/vip/submit_batch_add_job 接口。</para>

View File

@ -0,0 +1,17 @@
using System.Collections.Generic;
namespace SKIT.FlurlHttpClient.Wechat.Work.Models
{
/// <summary>
/// <para>表示 [POST] /cgi-bin/security/trustdevice/approve 接口的请求。</para>
/// </summary>
public class CgibinSecurityTrustDeviceApproveRequest : WechatWorkRequest
{
/// <summary>
/// 获取或设置设备唯一标识列表。
/// </summary>
[Newtonsoft.Json.JsonProperty("device_code_list")]
[System.Text.Json.Serialization.JsonPropertyName("device_code_list")]
public IList<string> DeviceCodeList { get; set; } = new List<string>();
}
}

View File

@ -0,0 +1,22 @@
namespace SKIT.FlurlHttpClient.Wechat.Work.Models
{
/// <summary>
/// <para>表示 [POST] /cgi-bin/security/trustdevice/approve 接口的响应。</para>
/// </summary>
public class CgibinSecurityTrustDeviceApproveResponse : WechatWorkResponse
{
/// <summary>
/// 获取或设置操作成功的设备唯一标识列表。
/// </summary>
[Newtonsoft.Json.JsonProperty("success_list")]
[System.Text.Json.Serialization.JsonPropertyName("success_list")]
public string[]? SucceededDeviceCodeList { get; set; }
/// <summary>
/// 获取或设置操作失败的设备唯一标识列表。
/// </summary>
[Newtonsoft.Json.JsonProperty("fail_list")]
[System.Text.Json.Serialization.JsonPropertyName("fail_list")]
public string[]? FailedDeviceCodeList { get; set; }
}
}

View File

@ -0,0 +1,24 @@
using System.Collections.Generic;
namespace SKIT.FlurlHttpClient.Wechat.Work.Models
{
/// <summary>
/// <para>表示 [POST] /cgi-bin/security/trustdevice/delete 接口的请求。</para>
/// </summary>
public class CgibinSecurityTrustDeviceDeleteRequest : WechatWorkRequest
{
/// <summary>
/// 获取或设置设备类型。
/// </summary>
[Newtonsoft.Json.JsonProperty("type")]
[System.Text.Json.Serialization.JsonPropertyName("type")]
public int Type { get; set; }
/// <summary>
/// 获取或设置设备唯一标识列表。
/// </summary>
[Newtonsoft.Json.JsonProperty("device_code_list")]
[System.Text.Json.Serialization.JsonPropertyName("device_code_list")]
public IList<string> DeviceCodeList { get; set; } = new List<string>();
}
}

View File

@ -0,0 +1,9 @@
namespace SKIT.FlurlHttpClient.Wechat.Work.Models
{
/// <summary>
/// <para>表示 [POST] /cgi-bin/security/trustdevice/delete 接口的响应。</para>
/// </summary>
public class CgibinSecurityTrustDeviceDeleteResponse : WechatWorkResponse
{
}
}

View File

@ -0,0 +1,22 @@
namespace SKIT.FlurlHttpClient.Wechat.Work.Models
{
/// <summary>
/// <para>表示 [POST] /cgi-bin/security/trustdevice/get_by_user 接口的请求。</para>
/// </summary>
public class CgibinSecurityTrustDeviceGetByUserRequest : WechatWorkRequest
{
/// <summary>
/// 获取或设置设备类型。
/// </summary>
[Newtonsoft.Json.JsonProperty("type")]
[System.Text.Json.Serialization.JsonPropertyName("type")]
public int Type { get; set; }
/// <summary>
/// 获取或设置最后登录成员账号。
/// </summary>
[Newtonsoft.Json.JsonProperty("last_login_userid")]
[System.Text.Json.Serialization.JsonPropertyName("last_login_userid")]
public string LastLoginUserId { get; set; } = string.Empty;
}
}

View File

@ -0,0 +1,22 @@
namespace SKIT.FlurlHttpClient.Wechat.Work.Models
{
/// <summary>
/// <para>表示 [POST] /cgi-bin/security/trustdevice/get_by_user 接口的响应。</para>
/// </summary>
public class CgibinSecurityTrustDeviceGetByUserResponse : WechatWorkResponse
{
public static class Types
{
public class Device : CgibinSecurityTrustDeviceListResponse.Types.Device
{
}
}
/// <summary>
/// 获取或设置设备列表。
/// </summary>
[Newtonsoft.Json.JsonProperty("device_list")]
[System.Text.Json.Serialization.JsonPropertyName("device_list")]
public Types.Device[] DeviceList { get; set; } = default!;
}
}

View File

@ -0,0 +1,72 @@
using System.Collections.Generic;
namespace SKIT.FlurlHttpClient.Wechat.Work.Models
{
/// <summary>
/// <para>表示 [POST] /cgi-bin/security/trustdevice/import 接口的请求。</para>
/// </summary>
public class CgibinSecurityTrustDeviceImportRequest : WechatWorkRequest
{
public static class Types
{
public class Device
{
/// <summary>
/// 获取或设置设备系统。
/// </summary>
[Newtonsoft.Json.JsonProperty("system")]
[System.Text.Json.Serialization.JsonPropertyName("system")]
public string System { get; set; } = string.Empty;
/// <summary>
/// 获取或设置 MAC 地址列表。
/// </summary>
[Newtonsoft.Json.JsonProperty("mac_addr")]
[System.Text.Json.Serialization.JsonPropertyName("mac_addr")]
public IList<string>? MacAddressList { get; set; }
/// <summary>
/// 获取或设置主板 UUID。
/// </summary>
[Newtonsoft.Json.JsonProperty("motherboard_uuid")]
[System.Text.Json.Serialization.JsonPropertyName("motherboard_uuid")]
public string? MotherboardUUID { get; set; }
/// <summary>
/// 获取或设置硬盘 UUID 列表。
/// </summary>
[Newtonsoft.Json.JsonProperty("harddisk_uuid")]
[System.Text.Json.Serialization.JsonPropertyName("harddisk_uuid")]
public IList<string>? HardDistUUIDList { get; set; }
/// <summary>
/// 获取或设置域名。
/// </summary>
[Newtonsoft.Json.JsonProperty("domain")]
[System.Text.Json.Serialization.JsonPropertyName("domain")]
public string? Domain { get; set; }
/// <summary>
/// 获取或设置计算机名。
/// </summary>
[Newtonsoft.Json.JsonProperty("pc_name")]
[System.Text.Json.Serialization.JsonPropertyName("pc_name")]
public string? PCName { get; set; }
/// <summary>
/// 获取或设置序列号。
/// </summary>
[Newtonsoft.Json.JsonProperty("seq_no")]
[System.Text.Json.Serialization.JsonPropertyName("seq_no")]
public string? SequenceNumber { get; set; }
}
}
/// <summary>
/// 获取或设置设备列表。
/// </summary>
[Newtonsoft.Json.JsonProperty("device_list")]
[System.Text.Json.Serialization.JsonPropertyName("device_list")]
public IList<Types.Device> DeviceList { get; set; } = new List<Types.Device>();
}
}

View File

@ -0,0 +1,49 @@
namespace SKIT.FlurlHttpClient.Wechat.Work.Models
{
/// <summary>
/// <para>表示 [POST] /cgi-bin/security/trustdevice/import 接口的响应。</para>
/// </summary>
public class CgibinSecurityTrustDeviceImportResponse : WechatWorkResponse
{
public static class Types
{
public class Result
{
/// <summary>
/// 获取或设置导入设备记录的顺序。
/// </summary>
[Newtonsoft.Json.JsonProperty("device_index")]
[System.Text.Json.Serialization.JsonPropertyName("device_index")]
public int DeviceIndex { get; set; }
/// <summary>
/// 获取或设置设备的唯一标识。
/// </summary>
[Newtonsoft.Json.JsonProperty("device_code")]
[System.Text.Json.Serialization.JsonPropertyName("device_code")]
public string? DeviceCode { get; set; }
/// <summary>
/// 获取或设置冲突设备的唯一标识。
/// </summary>
[Newtonsoft.Json.JsonProperty("duplicated_device_code")]
[System.Text.Json.Serialization.JsonPropertyName("duplicated_device_code")]
public string? DuplicatedDeviceCode { get; set; }
/// <summary>
/// 获取或设置导入结果。
/// </summary>
[Newtonsoft.Json.JsonProperty("status")]
[System.Text.Json.Serialization.JsonPropertyName("status")]
public int Status { get; set; }
}
}
/// <summary>
/// 获取或设置结果列表。
/// </summary>
[Newtonsoft.Json.JsonProperty("result")]
[System.Text.Json.Serialization.JsonPropertyName("result")]
public Types.Result[] ResultList { get; set; } = default!;
}
}

View File

@ -0,0 +1,29 @@
namespace SKIT.FlurlHttpClient.Wechat.Work.Models
{
/// <summary>
/// <para>表示 [POST] /cgi-bin/security/trustdevice/list 接口的请求。</para>
/// </summary>
public class CgibinSecurityTrustDeviceListRequest : WechatWorkRequest
{
/// <summary>
/// 获取或设置设备类型。
/// </summary>
[Newtonsoft.Json.JsonProperty("type")]
[System.Text.Json.Serialization.JsonPropertyName("type")]
public int Type { get; set; }
/// <summary>
/// 获取或设置分页游标。
/// </summary>
[Newtonsoft.Json.JsonProperty("cursor")]
[System.Text.Json.Serialization.JsonPropertyName("cursor")]
public string? Cursor { get; set; }
/// <summary>
/// 获取或设置分页每页数量。
/// </summary>
[Newtonsoft.Json.JsonProperty("limit")]
[System.Text.Json.Serialization.JsonPropertyName("limit")]
public int? Limit { get; set; }
}
}

View File

@ -0,0 +1,133 @@
namespace SKIT.FlurlHttpClient.Wechat.Work.Models
{
/// <summary>
/// <para>表示 [POST] /cgi-bin/security/trustdevice/list 接口的响应。</para>
/// </summary>
public class CgibinSecurityTrustDeviceListResponse : WechatWorkResponse
{
public static class Types
{
public class Device
{
/// <summary>
/// 获取或设置设备的唯一标识。
/// </summary>
[Newtonsoft.Json.JsonProperty("device_code")]
[System.Text.Json.Serialization.JsonPropertyName("device_code")]
public string DeviceCode { get; set; } = default!;
/// <summary>
/// 获取或设置设备系统。
/// </summary>
[Newtonsoft.Json.JsonProperty("system")]
[System.Text.Json.Serialization.JsonPropertyName("system")]
public string System { get; set; } = default!;
/// <summary>
/// 获取或设置 MAC 地址列表。
/// </summary>
[Newtonsoft.Json.JsonProperty("mac_addr")]
[System.Text.Json.Serialization.JsonPropertyName("mac_addr")]
public string[]? MacAddressList { get; set; }
/// <summary>
/// 获取或设置主板 UUID。
/// </summary>
[Newtonsoft.Json.JsonProperty("motherboard_uuid")]
[System.Text.Json.Serialization.JsonPropertyName("motherboard_uuid")]
public string? MotherboardUUID { get; set; }
/// <summary>
/// 获取或设置硬盘 UUID 列表。
/// </summary>
[Newtonsoft.Json.JsonProperty("harddisk_uuid")]
[System.Text.Json.Serialization.JsonPropertyName("harddisk_uuid")]
public string[]? HarddistUUIDList { get; set; }
/// <summary>
/// 获取或设置域名。
/// </summary>
[Newtonsoft.Json.JsonProperty("domain")]
[System.Text.Json.Serialization.JsonPropertyName("domain")]
public string? Domain { get; set; }
/// <summary>
/// 获取或设置计算机名。
/// </summary>
[Newtonsoft.Json.JsonProperty("pc_name")]
[System.Text.Json.Serialization.JsonPropertyName("pc_name")]
public string? PCName { get; set; }
/// <summary>
/// 获取或设置序列号。
/// </summary>
[Newtonsoft.Json.JsonProperty("seq_no")]
[System.Text.Json.Serialization.JsonPropertyName("seq_no")]
public string? SequenceNumber { get; set; }
/// <summary>
/// 获取或设置最后登录时间戳。
/// </summary>
[Newtonsoft.Json.JsonProperty("last_login_time")]
[System.Text.Json.Serialization.JsonPropertyName("last_login_time")]
public long? LastLoginTimestamp { get; set; }
/// <summary>
/// 获取或设置最后登录成员账号。
/// </summary>
[Newtonsoft.Json.JsonProperty("last_login_userid")]
[System.Text.Json.Serialization.JsonPropertyName("last_login_userid")]
public string? LastLoginUserId { get; set; }
/// <summary>
/// 获取或设置归属确认时间戳。
/// </summary>
[Newtonsoft.Json.JsonProperty("confirm_timestamp")]
[System.Text.Json.Serialization.JsonPropertyName("confirm_timestamp")]
public long? ConfirmTimestamp { get; set; }
/// <summary>
/// 获取或设置归属确认成员账号。
/// </summary>
[Newtonsoft.Json.JsonProperty("confirm_userid")]
[System.Text.Json.Serialization.JsonPropertyName("confirm_userid")]
public string? ConfirmUserId { get; set; }
/// <summary>
/// 获取或设置通过申报的管理员成员账号。
/// </summary>
[Newtonsoft.Json.JsonProperty("approved_userid")]
[System.Text.Json.Serialization.JsonPropertyName("approved_userid")]
public string? ApprovedUserId { get; set; }
/// <summary>
/// 获取或设置设备来源。
/// </summary>
[Newtonsoft.Json.JsonProperty("source")]
[System.Text.Json.Serialization.JsonPropertyName("source")]
public int Source { get; set; }
/// <summary>
/// 获取或设置导入结果。
/// </summary>
[Newtonsoft.Json.JsonProperty("status")]
[System.Text.Json.Serialization.JsonPropertyName("status")]
public int Status { get; set; }
}
}
/// <summary>
/// 获取或设置设备列表。
/// </summary>
[Newtonsoft.Json.JsonProperty("device_list")]
[System.Text.Json.Serialization.JsonPropertyName("device_list")]
public Types.Device[] DeviceList { get; set; } = default!;
/// <summary>
/// 获取或设置分页游标。
/// </summary>
[Newtonsoft.Json.JsonProperty("next_cursor")]
[System.Text.Json.Serialization.JsonPropertyName("next_cursor")]
public string? NextCursor { get; set; }
}
}

View File

@ -0,0 +1,9 @@
namespace SKIT.FlurlHttpClient.Wechat.Work.Models
{
/// <summary>
/// <para>表示 [POST] /cgi-bin/security/trustdevice/reject 接口的请求。</para>
/// </summary>
public class CgibinSecurityTrustDeviceRejectRequest : CgibinSecurityTrustDeviceApproveRequest
{
}
}

View File

@ -0,0 +1,9 @@
namespace SKIT.FlurlHttpClient.Wechat.Work.Models
{
/// <summary>
/// <para>表示 [POST] /cgi-bin/security/trustdevice/reject 接口的响应。</para>
/// </summary>
public class CgibinSecurityTrustDeviceRejectResponse : CgibinSecurityTrustDeviceApproveResponse
{
}
}

View File

@ -0,0 +1,6 @@
{
"device_code_list": [
"49nNtYq",
"rjDTnOh"
]
}

View File

@ -0,0 +1,6 @@
{
"errcode": 0,
"errmsg": "ok",
"success_list": [ "49nNtYq" ],
"fail_list": [ "rjDTnOh" ]
}

View File

@ -0,0 +1,7 @@
{
"type": 1,
"device_code_list": [
"49nNtYq",
"rjDTnOh"
]
}

View File

@ -0,0 +1,36 @@
{
"errcode": 0,
"errmsg": "ok",
"device_list": [
{
"device_code": "49nNtYq",
"system": "Windows",
"mac_addr": [
"50:81:40:29:33:CA"
],
"motherboard_uuid": "MB_UUID",
"harddisk_uuid": [
"HD_UUID1"
],
"domain": "WINDOWS_DOMAIN",
"pc_name": "PC_001",
"last_login_time": 1681722163,
"last_login_userid": "lisi",
"confirm_timestamp": 1681722163,
"confirm_userid": "lisi",
"approved_userid": "zhangsan",
"source": 3,
"status": 5
},
{
"device_code": "rjDTnOh",
"system": "Mac",
"seq_no": "SEQ_NO1",
"mac_addr": [
"50:81:40:29:33:CA"
],
"source": 1,
"status": 5
}
]
}

View File

@ -0,0 +1,25 @@
{
"device_list": [
{
"system": "Windows",
"mac_addr": [
"50:81:40:29:33:CA",
"36:27:51:DF:6E:80"
],
"motherboard_uuid": "MB_UUID",
"harddisk_uuid": [
"HD_UUID1",
"HD_UUID2"
],
"domain": "WINDOWS_DOMAIN",
"pc_name": "PC_001"
},
{
"system": "Mac",
"seq_no": "SEQ_NO",
"mac_addr": [
"81:40:50:29:33:DB"
]
}
]
}

View File

@ -0,0 +1,20 @@
{
"errcode": 0,
"errmsg": "ok",
"result": [
{
"device_index": 1,
"device_code": "49nNtYq",
"status": 1
},
{
"device_index": 2,
"duplicated_device_code": "49nNtYq",
"status": 2
},
{
"device_index": 3,
"status": 3
}
]
}

View File

@ -0,0 +1,5 @@
{
"cursor": "CURSOR",
"limit": 100,
"type": 1
}

View File

@ -0,0 +1,37 @@
{
"errcode": 0,
"errmsg": "ok",
"device_list": [
{
"device_code": "49nNtYq",
"system": "Windows",
"mac_addr": [
"50:81:40:29:33:CA"
],
"motherboard_uuid": "MB_UUID",
"harddisk_uuid": [
"HD_UUID1"
],
"domain": "WINDOWS_DOMAIN",
"pc_name": "PC_001",
"last_login_time": 1681722163,
"last_login_userid": "lisi",
"confirm_timestamp": 1681722163,
"confirm_userid": "lisi",
"approved_userid": "zhangsan",
"source": 3,
"status": 5
},
{
"device_code": "rjDTnOh",
"system": "Mac",
"seq_no": "SEQ_NO1",
"mac_addr": [
"50:81:40:29:33:CA"
],
"source": 1,
"status": 5
}
],
"next_cursor": "CURSOR"
}

View File

@ -0,0 +1,6 @@
{
"device_code_list": [
"49nNtYq",
"rjDTnOh"
]
}

View File

@ -0,0 +1,6 @@
{
"errcode": 0,
"errmsg": "ok",
"success_list": [ "49nNtYq" ],
"fail_list": [ "rjDTnOh" ]
}