CocoaPods trunk is moving to be read-only. Read more on the blog, there are 18 months to go.

SynologySwift 0.2

SynologySwift 0.2

Maintained by Le Gravier Thomas.



Platform

CocoaPods compatible Carthage compatible Swift Package Manager compatible

Twitter

SynologySwift

Swift library for Synology DiskStation and use DSM APIs

Tools :

  • Resolve NAS host/ip base on QuickConnectId
  • List available APIs
  • Login with encryption

Installation

Swift 5

With Cocoapods:

pod 'SynologySwift'

With Carthage:

github "Thomaslegravier/SynologySwift"

Usage

import SynologySwift

Resolve DS reachable interface for a specific QuickConnectId :

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
    }
}

List available APIs on your DS :

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
    }
}

Auth connection with encryption :

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. */

Get info for a specific service

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

Logout :

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. */

Details

Login helper:

  • Resolve automatically your DS host base on the quickConnectId
  • List available APIs on your DS
  • Fetch encryption details
  • Login with your account informations.
  • Support otp code login
  • Get specific service info path
  • Logout from a specific session

Your login and password are encrypted and not stored.

Credits

  • Thanks to @Frizlab fro RSA/AES encryption part.
  • Thanks to @soyersoyer for SwCrypt implementation RSA part