139 lines
3.5 KiB
Go
139 lines
3.5 KiB
Go
|
|
package userManagement
|
||
|
|
|
||
|
|
import (
|
||
|
|
"context"
|
||
|
|
"fmt"
|
||
|
|
)
|
||
|
|
|
||
|
|
// ListDevicesParams 设备列表查询参数
|
||
|
|
type ListDevicesParams struct {
|
||
|
|
Page int `json:"page"`
|
||
|
|
PageSize int `json:"page_size"`
|
||
|
|
UserID int64 `json:"user_id,omitempty"`
|
||
|
|
IsActive *bool `json:"is_active,omitempty"`
|
||
|
|
IsTrusted *bool `json:"is_trusted,omitempty"`
|
||
|
|
}
|
||
|
|
|
||
|
|
// GetMyDevices 获取当前用户的设备列表
|
||
|
|
func (c *Client) GetMyDevices(ctx context.Context) ([]*Device, error) {
|
||
|
|
resp, err := c.doRequest(ctx, "GET", "/api/v1/devices/me", nil)
|
||
|
|
if err != nil {
|
||
|
|
return nil, err
|
||
|
|
}
|
||
|
|
|
||
|
|
var result []*Device
|
||
|
|
if err := c.parseResponse(resp, &result); err != nil {
|
||
|
|
return nil, err
|
||
|
|
}
|
||
|
|
|
||
|
|
return result, nil
|
||
|
|
}
|
||
|
|
|
||
|
|
// GetTrustedDevices 获取信任设备列表
|
||
|
|
func (c *Client) GetTrustedDevices(ctx context.Context) ([]*Device, error) {
|
||
|
|
resp, err := c.doRequest(ctx, "GET", "/api/v1/devices/me/trusted", nil)
|
||
|
|
if err != nil {
|
||
|
|
return nil, err
|
||
|
|
}
|
||
|
|
|
||
|
|
var result []*Device
|
||
|
|
if err := c.parseResponse(resp, &result); err != nil {
|
||
|
|
return nil, err
|
||
|
|
}
|
||
|
|
|
||
|
|
return result, nil
|
||
|
|
}
|
||
|
|
|
||
|
|
// GetDevice 获取设备详情
|
||
|
|
func (c *Client) GetDevice(ctx context.Context, id int64) (*Device, error) {
|
||
|
|
resp, err := c.doRequest(ctx, "GET", fmt.Sprintf("/api/v1/devices/%d", id), nil)
|
||
|
|
if err != nil {
|
||
|
|
return nil, err
|
||
|
|
}
|
||
|
|
|
||
|
|
var result Device
|
||
|
|
if err := c.parseResponse(resp, &result); err != nil {
|
||
|
|
return nil, err
|
||
|
|
}
|
||
|
|
|
||
|
|
return &result, nil
|
||
|
|
}
|
||
|
|
|
||
|
|
// ListDevices 获取设备列表(管理员用)
|
||
|
|
func (c *Client) ListDevices(ctx context.Context, params *ListDevicesParams) (*PaginatedResponse, error) {
|
||
|
|
if params.Page <= 0 {
|
||
|
|
params.Page = 1
|
||
|
|
}
|
||
|
|
if params.PageSize <= 0 {
|
||
|
|
params.PageSize = 20
|
||
|
|
}
|
||
|
|
|
||
|
|
path := fmt.Sprintf("/api/v1/admin/devices?page=%d&page_size=%d", params.Page, params.PageSize)
|
||
|
|
if params.UserID > 0 {
|
||
|
|
path += fmt.Sprintf("&user_id=%d", params.UserID)
|
||
|
|
}
|
||
|
|
|
||
|
|
resp, err := c.doRequest(ctx, "GET", path, nil)
|
||
|
|
if err != nil {
|
||
|
|
return nil, err
|
||
|
|
}
|
||
|
|
|
||
|
|
var result PaginatedResponse
|
||
|
|
if err := c.parseResponse(resp, &result); err != nil {
|
||
|
|
return nil, err
|
||
|
|
}
|
||
|
|
|
||
|
|
return &result, nil
|
||
|
|
}
|
||
|
|
|
||
|
|
// TrustDevice 信任设备
|
||
|
|
func (c *Client) TrustDevice(ctx context.Context, deviceID int64) error {
|
||
|
|
resp, err := c.doRequest(ctx, "POST", fmt.Sprintf("/api/v1/devices/%d/trust", deviceID), nil)
|
||
|
|
if err != nil {
|
||
|
|
return err
|
||
|
|
}
|
||
|
|
|
||
|
|
return c.parseResponse(resp, nil)
|
||
|
|
}
|
||
|
|
|
||
|
|
// UntrustDevice 取消设备信任
|
||
|
|
func (c *Client) UntrustDevice(ctx context.Context, deviceID int64) error {
|
||
|
|
resp, err := c.doRequest(ctx, "DELETE", fmt.Sprintf("/api/v1/devices/%d/trust", deviceID), nil)
|
||
|
|
if err != nil {
|
||
|
|
return err
|
||
|
|
}
|
||
|
|
|
||
|
|
return c.parseResponse(resp, nil)
|
||
|
|
}
|
||
|
|
|
||
|
|
// TrustDeviceByDeviceID 通过 device_id 信任设备
|
||
|
|
func (c *Client) TrustDeviceByDeviceID(ctx context.Context, deviceID string) error {
|
||
|
|
resp, err := c.doRequest(ctx, "POST", fmt.Sprintf("/api/v1/devices/by-device-id/%s/trust", deviceID), nil)
|
||
|
|
if err != nil {
|
||
|
|
return err
|
||
|
|
}
|
||
|
|
|
||
|
|
return c.parseResponse(resp, nil)
|
||
|
|
}
|
||
|
|
|
||
|
|
// RevokeDevice 撤销设备
|
||
|
|
func (c *Client) RevokeDevice(ctx context.Context, deviceID int64) error {
|
||
|
|
resp, err := c.doRequest(ctx, "DELETE", fmt.Sprintf("/api/v1/devices/%d", deviceID), nil)
|
||
|
|
if err != nil {
|
||
|
|
return err
|
||
|
|
}
|
||
|
|
|
||
|
|
return c.parseResponse(resp, nil)
|
||
|
|
}
|
||
|
|
|
||
|
|
// LogoutOtherDevices 登出其他设备
|
||
|
|
func (c *Client) LogoutOtherDevices(ctx context.Context, currentDeviceID string) error {
|
||
|
|
req := map[string]string{"current_device_id": currentDeviceID}
|
||
|
|
resp, err := c.doRequest(ctx, "POST", "/api/v1/devices/me/logout-others", req)
|
||
|
|
if err != nil {
|
||
|
|
return err
|
||
|
|
}
|
||
|
|
|
||
|
|
return c.parseResponse(resp, nil)
|
||
|
|
}
|