diff --git a/api.py b/api.py new file mode 100644 index 0000000..f681fa0 --- /dev/null +++ b/api.py @@ -0,0 +1,69 @@ +import requests +from requests_oauthlib import OAuth2Session +import json +import sys +from config import * +from cachehandler import CacheHandler +from authhandler import AuthHandler + +class OpenbravoToBanqupAPI: + + def __init__(self, clientId, clientSecret, demo=False): + self.clientId = clientId + self.clientSecret = clientSecret + self.demo = demo + self.headers = { + 'Accept' : 'application/json', + 'Content-Type' : 'application/json', + } + self.baseUrl = bq_base_url + self.cacheHandler = CacheHandler() + self.authHandler = AuthHandler(self, self.clientId, self.clientSecret) + + def doRequest(self, method, url, data=None, headers=None, files=None): + if headers: + mergedHeaders = self.headers + mergedHeaders.update(headers) + headers = mergedHeaders + else: headers = self.headers + + reqUrl = '{base}/{url}'.format(base=self.baseUrl, url=url) + + if method == 'GET': + response = requests.get(reqUrl, params=data, headers=headers) + elif method == 'POST': + if files: response = requests.post(reqUrl, data=json.dumps(data), files=files, headers=headers) + else: response = requests.post(reqUrl, data=json.dumps(data), headers=headers) + elif method == 'PUT': + response = requests.put(reqUrl, data=json.dumps(data), headers=headers) + elif method == 'DELETE': + response = requests.delete(reqUrl, params=json.dumps(data), headers=headers) + return response + + def request(self, method, url, data=None, headers=None, files=None): + + self.authHandler.checkHeaderTokens() + response = self.doRequest(method, url, data, headers, files) + + if 'json' in response.headers['Content-Type']: + respContent = response.json() + elif 'pdf' in response.headers['Content-Type']: + respContent = response.content + + return response.status_code, response.headers, respContent + + def get(self, url, data=None, headers=None): + status, headers, response = self.request('GET', url, data, headers) + return status, headers, response + + def post(self, url, data=None, headers=None, files=None): + status, headers, response = self.request('POST', url, data, headers, files) + return status, headers, response + + def put(self, url, data=None, headers=None): + status, headers, response = self.request('PUT', url, data, headers) + return status, headers, response + + def delete(self, url, data=None, headers=None): + status, headers, response = self.request('DELETE', url, data, headers) + return status, headers, response diff --git a/authhandler.py b/authhandler.py index 2efa33f..4cb2a3a 100644 --- a/authhandler.py +++ b/authhandler.py @@ -16,9 +16,10 @@ class AuthHandler: self.state = None self.token = None - def getAuthURL(self, redirectUrl): - self.redirectUrl = redirectUrl + def getAuthURL(self, redirectUri): + self.redirectUri = redirectUri oauth = OAuth2Session(self.clientId, redirect_uri=self.redirectUri, scope='openid') + authorizationUrl, self.state = oauth.authorization_url(self.authUrl) return authorizationUrl def retrieveToken(self, response, state=None, redirectUri=None): diff --git a/get_token.py b/get_token.py new file mode 100644 index 0000000..0b4b6ad --- /dev/null +++ b/get_token.py @@ -0,0 +1,17 @@ +import requests +from requests_oauthlib import OAuth2Session +import json +import sys +import webbrowser +from config import * +from cachehandler import CacheHandler +from authhandler import AuthHandler +from api import OpenbravoToBanqupAPI + +api = OpenbravoToBanqupAPI(bq_client_id,bq_client_secret) +authUrl = api.authHandler.getAuthURL(bq_redirect_uri) +print(authUrl) +webbrowser.open(authUrl) +response = input('paste response: ') +token = api.authHandler.retrieveToken(response, redirectUri=bq_redirect_uri) +print(token)