merge with upstream master
This commit is contained in:
101
helix/main.py
101
helix/main.py
@@ -6,8 +6,10 @@ from flask import Flask, request, make_response, session, render_template, \
|
||||
redirect, url_for
|
||||
from flask import got_request_exception
|
||||
from flask.ext import assets
|
||||
from flask_oauthlib.client import OAuth
|
||||
from webassets.filter import get_filter
|
||||
|
||||
from helix.sales_force import tasks as sf_tasks
|
||||
from helix.Services.doc_gen_service import DocGenService
|
||||
from helix.Services.dxf_helper import DXFHelper
|
||||
from helix.Services.dxf_service import DXFService
|
||||
@@ -34,6 +36,20 @@ app.register_blueprint(api, url_prefix='/api')
|
||||
app.secret_key = os.getenv('SECRET_KEY', 'verysecretkey')
|
||||
app.config['PROFILE'] = True
|
||||
|
||||
|
||||
# Sales Force integrations
|
||||
oauth = OAuth()
|
||||
SF_BASE_URL = os.getenv('SFDC_BASE_URL', 'https://test.salesforce.com')
|
||||
sales_force = oauth.remote_app('sales_force',
|
||||
consumer_key=os.getenv('SFDC_ACCESS_KEY_ID'),
|
||||
consumer_secret=os.getenv('SFDC_SECRET_ACCESS_KEY'),
|
||||
base_url=SF_BASE_URL,
|
||||
request_token_url=None, # OAuth 2
|
||||
access_token_method='POST', # Sales Force requirement
|
||||
access_token_url=SF_BASE_URL + '/services/oauth2/token',
|
||||
authorize_url=SF_BASE_URL + '/services/oauth2/authorize',
|
||||
)
|
||||
|
||||
assets_env = assets.Environment(app)
|
||||
assets_env.init_app(app)
|
||||
assets_env.load_path = [
|
||||
@@ -67,6 +83,10 @@ def init_rollbar():
|
||||
got_request_exception.connect(rollbar.contrib.flask.report_exception, app)
|
||||
|
||||
|
||||
def is_sfdc_session():
|
||||
return 'SFID' in session
|
||||
|
||||
|
||||
@app.route("/")
|
||||
def index():
|
||||
return redirect(url_for('site_characterization'))
|
||||
@@ -109,6 +129,9 @@ def test_dxf():
|
||||
# wizard steps
|
||||
@app.route("/site_characterization/", methods=['GET', 'POST'])
|
||||
def site_characterization():
|
||||
if is_sfdc_session():
|
||||
return redirect('/summary/')
|
||||
|
||||
db_session = sql_constant.sql_session_maker()
|
||||
session_manager = SessionManager(session, redis_constant.redis_store, db_session)
|
||||
site_info_form = InputForm()
|
||||
@@ -136,6 +159,7 @@ def summary():
|
||||
context['current_step'] = 2
|
||||
|
||||
if context['site_data_available']:
|
||||
context['project_name'] = session_manager.site.project_name
|
||||
user_values = session_manager.user_values()
|
||||
calculator = Calculator(user_values, calculate_panel_data=False)
|
||||
context['wind_zones'] = user_values.system_type().system_constants().wind_zones
|
||||
@@ -153,6 +177,9 @@ def summary():
|
||||
else:
|
||||
context['no_proceed'] = True
|
||||
|
||||
if is_sfdc_session():
|
||||
context['hide_back'] = True
|
||||
|
||||
db_session.close()
|
||||
return render_template('site_summary.html.jinja', context=context)
|
||||
|
||||
@@ -199,6 +226,7 @@ def array_summary():
|
||||
else:
|
||||
try:
|
||||
module_constants = user_values.module_system_constants()
|
||||
# FIXME: parsing a file with many entities is very slow
|
||||
dxf_data = DXFService().parse(file_contents,
|
||||
module_constants,
|
||||
user_values.system_type(),
|
||||
@@ -428,6 +456,70 @@ def helix_documentation():
|
||||
return render_template('helix_documentation.jinja', context=context)
|
||||
|
||||
|
||||
# Sales Force Integration
|
||||
@app.route('/sales_force_login')
|
||||
def sales_force_login():
|
||||
# To test it locally: https://localhost:8443/sales_force_login?SFID=a3cL00000004QsQIAU
|
||||
sfid = request.args.get('SFID')
|
||||
if sfid:
|
||||
session.clear()
|
||||
session['SFID'] = sfid
|
||||
return sales_force.authorize(callback=url_for('sales_force_authorized', _external=True, SFID=sfid), SFID=sfid)
|
||||
else:
|
||||
return redirect('/')
|
||||
|
||||
|
||||
@app.route('/sales_force_authorized')
|
||||
def sales_force_authorized():
|
||||
next_url = url_for('summary')
|
||||
|
||||
resp = sales_force.authorized_response()
|
||||
if resp is None:
|
||||
print('Unable to authenticate to SFDC.')
|
||||
return redirect(next_url)
|
||||
|
||||
print('New Sales Force - OAuth2 login')
|
||||
db_session = sql_constant.sql_session_maker()
|
||||
session_manager = SessionManager(session, redis_constant.redis_store, db_session)
|
||||
session['sales_force_token'] = resp['access_token']
|
||||
|
||||
data = sf_tasks.get_site_characterization_from_sales_force(session, resp['instance_url'])
|
||||
if data:
|
||||
session_manager.save_form_submission(data)
|
||||
return redirect(next_url)
|
||||
else:
|
||||
return sales_force_logout()
|
||||
|
||||
|
||||
# FIXME
|
||||
from flask import jsonify
|
||||
@app.route("/export-sfdc")
|
||||
def export_sfdc():
|
||||
if not is_sfdc_session():
|
||||
return redirect('/')
|
||||
db_session = sql_constant.sql_session_maker()
|
||||
session_manager = SessionManager(session, redis_constant.redis_store, db_session)
|
||||
session_id = session_manager.session['id']
|
||||
data = sf_tasks.export_to_sfdc(session_id)
|
||||
db_session.close()
|
||||
return jsonify(data)
|
||||
# return redirect('/download')
|
||||
|
||||
|
||||
@sales_force.tokengetter
|
||||
def get_sales_force_token(token=None):
|
||||
return session.get('sales_force_token')
|
||||
|
||||
|
||||
@app.route('/sales_force_logout')
|
||||
def sales_force_logout():
|
||||
session.pop('SFID', None)
|
||||
session.pop('sales_force_token', None)
|
||||
session.clear()
|
||||
return redirect('/')
|
||||
# End of Sales Force Integration
|
||||
|
||||
|
||||
@app.template_filter('format_number')
|
||||
def format_number(number):
|
||||
return "{:,g}".format(number)
|
||||
@@ -457,8 +549,13 @@ def enum():
|
||||
|
||||
def main():
|
||||
host = '0.0.0.0'
|
||||
port = int(os.getenv('PORT', 5000))
|
||||
app.run(host=host, port=port, debug=bool(os.getenv("FLASK_DEBUG", False)))
|
||||
debug = bool(os.getenv("FLASK_DEBUG", False))
|
||||
if os.getenv('FLASK_DEBUG_SSL', None):
|
||||
port = int(os.getenv('PORT', 8443))
|
||||
app.run(host=host, port=port, debug=debug, ssl_context='adhoc')
|
||||
else:
|
||||
port = int(os.getenv('PORT', 5000))
|
||||
app.run(host=host, port=port, debug=debug)
|
||||
|
||||
|
||||
@app.route("/fail-test")
|
||||
|
||||
Reference in New Issue
Block a user