diff --git a/README.md b/README.md index bb0ce7f..dc34be9 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ # flask-oauth2-login -Simple OAuth2 Login in Flask +Simple OAuth2 Login in Flask ## License diff --git a/example.py b/example.py index df24108..32b42a6 100644 --- a/example.py +++ b/example.py @@ -6,7 +6,6 @@ app = Flask(__name__) app.config.update( SECRET_KEY="secret", - GOOGLE_LOGIN_REDIRECT_SCHEME="http", ) for config in ( "GOOGLE_LOGIN_CLIENT_ID", @@ -31,4 +30,4 @@ def login_failure(e): return jsonify(error=str(e)) if __name__ == "__main__": - app.run(host="0.0.0.0", debug=True) + app.run(ssl_context='adhoc', debug=True, host='0.0.0.0', port=8443) diff --git a/flask_oauth2_login/__init__.py b/flask_oauth2_login/__init__.py index b4730d4..b674e7b 100644 --- a/flask_oauth2_login/__init__.py +++ b/flask_oauth2_login/__init__.py @@ -2,3 +2,4 @@ from .coursera import CourseraLogin from .google import GoogleLogin from .linkedin import LinkedInLogin +from .sfdclogin import SfdcLogin diff --git a/flask_oauth2_login/sfdclogin.py b/flask_oauth2_login/sfdclogin.py new file mode 100644 index 0000000..945f248 --- /dev/null +++ b/flask_oauth2_login/sfdclogin.py @@ -0,0 +1,28 @@ +from .base import OAuth2Login +import requests + + +class SfdcLogin(OAuth2Login): + """Salesforce Oauth2 Login Support.""" + + config_prefix = "SFDC_" + redirect_endpoint = "_sfdc" + state_session_key = "_sfdc_state" + + # default_scope = "api,id,full" + default_scope = "api,id" + default_redirect_path = "/login/salesforce" + + auth_url = 'https://login.salesforce.com/services/oauth2/authorize' + token_url = "https://login.salesforce.com/services/oauth2/token" + profile_url = "https://login.salesforce.com/services/oauth2/userinfo" + + def get_profile(self, sess): + headers = { + 'Authorization': 'Bearer %s' % sess.token["access_token"] + } + + resp = requests.get(self.profile_url, headers=headers) + resp.raise_for_status() + return resp.json() + diff --git a/sfdc-example.py b/sfdc-example.py new file mode 100755 index 0000000..0f9bb0f --- /dev/null +++ b/sfdc-example.py @@ -0,0 +1,40 @@ +import os + +from flask import Flask, jsonify +from flask_oauth2_login import SfdcLogin +from simple_salesforce import Salesforce + +app = Flask(__name__) +app.config.update( + SECRET_KEY="secret", +) + +consumer_key = os.environ.get('SFDC_CONNECTED_APP_CONSUMER_KEY') +consumer_secret = os.environ.get('SFDC_CONNECTED_APP_CONSUMER_SECRET') + + +app.config['SFDC_CLIENT_SECRET'] = consumer_secret +app.config['SFDC_CLIENT_ID'] = consumer_key +sfdc_login = SfdcLogin(app) + +@app.route("/") +def index(): + return """ + +Login with Salesforce +""".format(sfdc_login.authorization_url()) + +@sfdc_login.login_success +def login_success(token, profile): + print "Login Success...." + sf = Salesforce(instance_url=token['instance_url'], session_id=token["access_token"]) + print "Salesforce API connector %s" % sf + return jsonify(token=token, profile=profile) + +@sfdc_login.login_failure +def login_failure(e): + print "Login Failure...." + return jsonify(error=str(e)) + +if __name__ == '__main__': + app.run(ssl_context='adhoc', debug=True, host='0.0.0.0', port=8443)