Skip to content

Instantly share code, notes, and snippets.

@cookbrianj
Created March 15, 2016 02:38
Show Gist options
  • Save cookbrianj/59ab5bb60b3541976f91 to your computer and use it in GitHub Desktop.
Save cookbrianj/59ab5bb60b3541976f91 to your computer and use it in GitHub Desktop.
extension String {
func Base64Encode() -> String? {
let asciiString = self.dataUsingEncoding(NSASCIIStringEncoding, allowLossyConversion: true)
guard let base64String = asciiString?.base64EncodedStringWithOptions(NSDataBase64EncodingOptions()) else { return nil }
return base64String
}
}
public class PowerSchoolServiceWrapper {
static let sharedInstance = PowerSchoolServiceWrapper()
private init() { }
let clientID = “yourclientid”
let secret = “yoursecret”
let authURL = "https://psserver.com/oauth/access_token/"
let studentSearchURL = "https://psserver.com/ws/schema/query/com.companyName.product.students.student_search"
func getBearerToken(completion:(bearerToken: String) -> ()) {
guard let baseEncodedString = "\(clientID):\(secret)".Base64Encode() else { return }
let request = NSMutableURLRequest(URL: NSURL(string: authURL)!)
request.HTTPMethod = "POST"
request.addValue("Basic " + baseEncodedString, forHTTPHeaderField: "Authorization")
request.addValue("application/x-www-form-urlencoded;charset=UTF-8", forHTTPHeaderField: "Content-Type")
let grantType = "grant_type=client_credentials"
request.HTTPBody = grantType.dataUsingEncoding(NSUTF8StringEncoding, allowLossyConversion: true)
let task = NSURLSession.sharedSession().dataTaskWithRequest(request) { (data, response, error) -> Void in
do {
let results = try NSJSONSerialization.JSONObjectWithData(data!, options: .AllowFragments) as? [String:AnyObject]
results
if let token = results!["access_token"] as? String {
completion(bearerToken: token)
}
} catch {
print("error")
}
}
task.resume()
}
func getResponse(url:String, payload:String, parser:(data: NSData, response: NSURLResponse, error: NSError?) -> ()) {
getBearerToken { (bearerToken) -> () in
let request = NSMutableURLRequest(URL: NSURL(string: url)!)
request.HTTPMethod = "POST"
let token = "Bearer " + bearerToken
request.addValue(token, forHTTPHeaderField: "Authorization")
request.addValue("application/json", forHTTPHeaderField: "Content-Type")
request.HTTPBody = payload.dataUsingEncoding(NSUTF8StringEncoding, allowLossyConversion: true)
let task = NSURLSession.sharedSession().dataTaskWithRequest(request, completionHandler: { (data, response, error) -> Void in
guard let theData = data, let theResponse = response else { return }
parser(data: theData, response: theResponse, error: error)
})
task.resume()
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment