SynologySwift 0.2

SynologySwift 0.2

Le Gravier Thomas 维护。



Platform

CocoaPods compatible Carthage compatible Swift Package Manager compatible

Twitter

SynologySwift

DiskStation 的 Swift 库,用于使用 DSM API

工具

  • 基于 QuickConnectId 解析 NAS 主机/IP
  • 列出可用的 API
  • 加密登录

安装

Swift 5

使用 Cocoapods

pod 'SynologySwift'

使用 Carthage

github "Thomaslegravier/SynologySwift"

用法

import SynologySwift

解析特定 QuickConnectId 的 DS 可达接口

SynologySwift.resolveURL(quickConnectId: "your-quick-id") { (result) in
    switch result {
    case .success(let data):
        let dsPort = data.port
        let dsHost = data.host
    case .failure(let error): break
    }
}

列出 DS 上的可用 API

SynologySwift.resolveAvailableAPIs { (result) in
    switch result {
    case .success(let data):
        for service in data.apiList! {
            let serviceName = service.key        // Example : SYNO.API.Auth
            let servicePath = service.value.path // Example : auth.cgi
        }
    case .failure(let error): break
    }
}

加密认证连接

SynologySwift.login(quickConnectid: "your-quick-id", sessionType: "DownloadStation", login: "login", password: "password", useDefaultCacheApis: false) { (result) in
    switch result {
    case .success(let data):
        let accountName = data.account // Account name
        let sessionId = data.sid       // Sid param for futher connected calls
    case .failure(let error): break
    }
}
/* NB : Set 'useDefaultCacheApis' for faster login. If true, we use default auth and encryption APIs paths, instead fetch all available APIs on your DS. Use at your own risk. */

获取特定服务的详细信息

let dlService = SynologySwift.serviceInfos(serviceName: "SYNO.DownloadStation.Info")
let path = dlService.path

登出

let dsAuthInfos = SynologySwiftAuth.DSAuthInfos(sid: "XXXXXXXXX", account: "account-name", dsInfos: SynologySwiftURLResolver.DSInfos(quickId: "your-quick-id", host: "XXXXXXX", port: 5000))
SynologySwift.logout(dsAuthInfos: dsAuthInfos, sessionType: "DownloadStation") { (result) in
    switch result {
    case .success(_):         print("Success logout")
    case .failure(let error): print(error)
    }
}
/* NB : Use auth infos from your last login session to perform logout. */

详细信息

登录助手

  • 根据 QuickConnectId 自动解析您的 DS 主机
  • 列出 DS 上的可用 API
  • 获取加密详细信息
  • 使用您的账户信息进行登录。
  • 支持 OTP 代码登录
  • 获取特定服务信息路径
  • 从特定会话登出

您的登录和密码被加密且不会存储。

致谢

  • 感谢 @Frizlab 在 RSA/AES 加密部分的贡献。
  • 感谢 @soyersoyer 对 SwCrypt 实现的 RSA 部分的贡献。