Parse SS URL with much cleaner URL struct methods

This commit is contained in:
Rainux Luo
2017-01-07 06:54:31 +08:00
parent 97801c4ee6
commit faf029c7f7
4 changed files with 34 additions and 64 deletions

View File

@ -8,14 +8,12 @@
import Foundation
extension String {
var localized: String {
return NSLocalizedString(self, tableName: nil, bundle: Bundle.main, value: "", comment: "")
}
}
extension Data {
func sha1() -> String {
let data = self
@ -25,3 +23,36 @@ extension Data {
return hexBytes.joined(separator: "")
}
}
func ParseSSURL(_ url: URL?) -> [String: Any?]? {
func padBase64(string: String) -> String {
var length = string.characters.count
length = 4 - length % 4 + length
return string.padding(toLength: length, withPad: "=", startingAt: 0)
}
if url?.host == nil {
return nil
}
var plainUrl: URL! = url
let data = Data(base64Encoded: padBase64(string: url!.host!),
options: Data.Base64DecodingOptions())
if data != nil {
let decoded = String(data: data!, encoding: String.Encoding.utf8)
plainUrl = URL(string: "ss://\(decoded!)")
if plainUrl == nil {
return nil
}
}
return ["ServerHost": plainUrl.host,
"ServerPort": UInt16(plainUrl.port!),
"Method": plainUrl.user,
"Password": plainUrl.password,
]
}