Skip to content

Commit d4d102e

Browse files
committed
Add more checks to check if XML-RPC is enabled
1 parent 7eb019b commit d4d102e

1 file changed

Lines changed: 14 additions & 3 deletions

File tree

Modules/Sources/WordPressKit/WordPressOrgXMLRPCApi.swift

Lines changed: 14 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -118,10 +118,21 @@ open class WordPressOrgXMLRPCApi: NSObject, WordPressOrgXMLRPCApiInterfacing {
118118
public func isEnabled(username: String, password: String) async -> Bool {
119119
let parameters: [AnyObject] = [0 as AnyObject, username as AnyObject, password as AnyObject]
120120
let result = await call(method: "wp.getOptions", parameters: parameters)
121-
guard case let .failure(error) = result, case let .endpointError(fault) = error else {
122-
return true
121+
guard case let .failure(error) = result else { return true }
122+
// 405 is a proper fault code that indicates XML-RPC is disabled.
123+
if case let .endpointError(fault) = error, fault.code == 405 {
124+
return false
123125
}
124-
return fault.code != 405
126+
// Some plugins send HTTP 403 Forbidden response.
127+
if error.response?.statusCode == 403 {
128+
return false
129+
}
130+
// Some plugins send HTTP 200 with html or non content at all.
131+
if case let .unparsableResponse(response, _, _) = error,
132+
response?.value(forHTTPHeaderField: "Content-Type")?.hasPrefix("text/xml") == false {
133+
return false
134+
}
135+
return true
125136
}
126137

127138
/**

0 commit comments

Comments
 (0)