metatext/MastodonAPI/Sources/MastodonAPI/Endpoints/AccessTokenEndpoint.swift
2020-09-23 00:04:37 -07:00

88 lines
2.2 KiB
Swift

// Copyright © 2020 Metabolist. All rights reserved.
import Foundation
import HTTP
import Mastodon
public enum AccessTokenEndpoint {
case oauthToken(
clientID: String,
clientSecret: String,
grantType: String,
scopes: String,
code: String?,
redirectURI: String?
)
case accounts(Registration)
}
public extension AccessTokenEndpoint {
struct Registration {
public var username = ""
public var email = ""
public var password = ""
public var locale = "en"
public var reason = ""
public var agreement = false
public init() {}
}
}
extension AccessTokenEndpoint: Endpoint {
public typealias ResultType = AccessToken
public var context: [String] {
switch self {
case .oauthToken:
return []
case .accounts:
return defaultContext
}
}
public var pathComponentsInContext: [String] {
switch self {
case .oauthToken:
return ["oauth", "token"]
case .accounts:
return ["accounts"]
}
}
public var method: HTTPMethod {
switch self {
case .oauthToken, .accounts: return .post
}
}
public var jsonBody: [String: Any]? {
switch self {
case let .oauthToken(clientID, clientSecret, grantType, scopes, code, redirectURI):
var params = [
"client_id": clientID,
"client_secret": clientSecret,
"grant_type": grantType,
"scope": scopes]
params["code"] = code
params["redirect_uri"] = redirectURI
return params
case let .accounts(registration):
var params: [String: Any] = [
"username": registration.username,
"email": registration.email,
"password": registration.password,
"locale": registration.locale,
"agreement": registration.agreement]
if !registration.reason.isEmpty {
params["reason"] = registration.reason
}
return params
}
}
}