github.com/qiniu/go-sdk/v7@v7.27.0/linking/deviceKey.go (about)

     1  package linking
     2  
     3  import (
     4  	"context"
     5  	"encoding/base64"
     6  )
     7  
     8  // 设备密钥管理
     9  type DeviceKey struct {
    10  	AccessKey string `json:"accessKey"` // 设备的 accessKey
    11  	SecretKey string `json:"secretKey"` // 设备的 secretkey
    12  	State     int    `json:"state"`     // 密钥对状态,1表示被禁用,0表示已启用
    13  	CreatedAt int64  `json:"createdAt"` // 创建时间
    14  }
    15  
    16  // 新增设备的密钥,每个设备最多有两对密钥
    17  func (manager *Manager) AddDeviceKey(appid, device string) ([]DeviceKey, error) {
    18  	device = base64.URLEncoding.EncodeToString([]byte(device))
    19  
    20  	ret := struct {
    21  		Keys []DeviceKey `json:"keys"`
    22  	}{}
    23  	err := manager.client.Call(context.Background(), &ret, "POST", manager.url("/apps/%s/devices/%s/keys", appid, device), nil)
    24  	if err != nil {
    25  		return nil, err
    26  	}
    27  	return ret.Keys, nil
    28  }
    29  
    30  // 查询指定设备的密钥
    31  func (manager *Manager) QueryDeviceKey(appid, device string) ([]DeviceKey, error) {
    32  	device = base64.URLEncoding.EncodeToString([]byte(device))
    33  
    34  	ret := struct {
    35  		Keys []DeviceKey `json:"keys"`
    36  	}{}
    37  
    38  	err := manager.client.Call(context.Background(), &ret, "GET", manager.url("/apps/%s/devices/%s/keys", appid, device), nil)
    39  	if err != nil {
    40  		return nil, err
    41  	}
    42  	return ret.Keys, nil
    43  }
    44  
    45  // 删除设备的密钥
    46  func (manager *Manager) DeleteDeviceKey(appid, device, dak string) error {
    47  	device = base64.URLEncoding.EncodeToString([]byte(device))
    48  
    49  	return manager.client.Call(context.Background(), nil, "DELETE", manager.url("/apps/%s/devices/%s/keys/%s", appid, device, dak), nil)
    50  }
    51  
    52  // 禁用、启用设备的密钥
    53  func (manager *Manager) UpdateDeviceKeyState(appid, device, dak string, state int) error {
    54  	device = base64.URLEncoding.EncodeToString([]byte(device))
    55  
    56  	req := M{"state": state}
    57  	return manager.client.CallWithJson(context.Background(), nil, "POST", manager.url("/apps/%s/devices/%s/keys/%s/state", appid, device, dak), nil, req)
    58  }
    59  
    60  // 某个设备的密钥克隆给新的设备,不用重新对设备进行烧录新的密钥
    61  func (manager *Manager) CloneDeviceKey(appid, fromdevice, todevice string, cleanSelfKeys, deleteDevice bool, deviceAccessKey string) ([]DeviceKey, error) {
    62  	todevice = base64.URLEncoding.EncodeToString([]byte(todevice))
    63  	req := M{"fromDevice": fromdevice, "cleanSelfKeys": cleanSelfKeys, "deleteDevice": deleteDevice, "deviceAccessKey": deviceAccessKey}
    64  	ret := struct {
    65  		Keys []DeviceKey `json:"cloneKeys"`
    66  	}{}
    67  	err := manager.client.CallWithJson(context.Background(), &ret, "POST", manager.url("/apps/%s/devices/%s/keys/clone", appid, todevice), nil, req)
    68  	if err != nil {
    69  		return nil, err
    70  	}
    71  	return ret.Keys, nil
    72  }
    73  
    74  func (manager *Manager) QueryAppidDeviceNameByAccessKey(dak string) (string, string, error) {
    75  	ret := struct {
    76  		Appid  string `json:"appid"`
    77  		Device string `json:"device"`
    78  	}{}
    79  	err := manager.client.Call(context.Background(), &ret, "GET", manager.url("/keys/%s", dak), nil)
    80  	if err != nil {
    81  		return "", "", err
    82  	}
    83  	return ret.Appid, ret.Device, nil
    84  }