mirror of
https://github.com/yattee/yattee.git
synced 2024-12-13 13:50:32 +05:30
Fix Invidious accounts validation
This commit is contained in:
parent
79473951d7
commit
210f28da37
@ -1,3 +1,4 @@
|
|||||||
|
import Alamofire
|
||||||
import Foundation
|
import Foundation
|
||||||
import Siesta
|
import Siesta
|
||||||
import SwiftUI
|
import SwiftUI
|
||||||
@ -118,10 +119,60 @@ final class AccountValidator: Service {
|
|||||||
func validateAccount() {
|
func validateAccount() {
|
||||||
reset()
|
reset()
|
||||||
|
|
||||||
|
switch app.wrappedValue {
|
||||||
|
case .invidious:
|
||||||
|
invidiousValidation()
|
||||||
|
case .piped:
|
||||||
|
pipedValidation()
|
||||||
|
default:
|
||||||
|
setValidationResult(false)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func invidiousValidation() {
|
||||||
|
guard let username = account?.username,
|
||||||
|
let password = account?.password
|
||||||
|
else {
|
||||||
|
setValidationResult(false)
|
||||||
|
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
AF
|
||||||
|
.request(login.url, method: .post, parameters: ["email": username, "password": password], encoding: URLEncoding.default)
|
||||||
|
.redirect(using: .doNotFollow)
|
||||||
|
.response { response in
|
||||||
|
guard let headers = response.response?.headers,
|
||||||
|
let cookies = headers["Set-Cookie"]
|
||||||
|
else {
|
||||||
|
self.setValidationResult(false)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
let sidRegex = #"SID=(?<sid>[^;]*);"#
|
||||||
|
guard let sidRegex = try? NSRegularExpression(pattern: sidRegex),
|
||||||
|
let match = sidRegex.matches(in: cookies, range: NSRange(cookies.startIndex..., in: cookies)).first
|
||||||
|
else {
|
||||||
|
self.setValidationResult(false)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
let matchRange = match.range(withName: "sid")
|
||||||
|
|
||||||
|
if let substringRange = Range(matchRange, in: cookies) {
|
||||||
|
let sid = String(cookies[substringRange])
|
||||||
|
if !sid.isEmpty {
|
||||||
|
self.setValidationResult(true)
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
self.setValidationResult(false)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func pipedValidation() {
|
||||||
guard let request = accountRequest else {
|
guard let request = accountRequest else {
|
||||||
isValid.wrappedValue = false
|
setValidationResult(false)
|
||||||
isValidated.wrappedValue = true
|
|
||||||
isValidating.wrappedValue = false
|
|
||||||
|
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
@ -156,7 +207,13 @@ final class AccountValidator: Service {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
var accountRequest: Request? {
|
func setValidationResult(_ result: Bool) {
|
||||||
|
isValid.wrappedValue = result
|
||||||
|
isValidated.wrappedValue = true
|
||||||
|
isValidating.wrappedValue = false
|
||||||
|
}
|
||||||
|
|
||||||
|
var accountRequest: Siesta.Request? {
|
||||||
switch app.wrappedValue {
|
switch app.wrappedValue {
|
||||||
case .invidious:
|
case .invidious:
|
||||||
guard let password = account.password else { return nil }
|
guard let password = account.password else { return nil }
|
||||||
|
Loading…
Reference in New Issue
Block a user