File size: 1,803 Bytes
d8d8947
 
 
 
 
 
 
df476b7
 
d8d8947
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
dfa9fc0
 
d8d8947
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
import requests
from flask import Flask, redirect, request, render_template
from urllib.parse import quote

app = Flask(__name__)

#Salesforce OAuth2 configuration
client_id = 'x';
client_secret = 'y';
redirect_uri = 'http://localhost:4000/oauth2/callback';
salesforce_login_url = 'https://login.salesforce.com';
api_version = 'v56.0'

@app.route('/')
def index():
    # Generate the authorization URL
    authorization_url = f'{salesforce_login_url}/services/oauth2/authorize?response_type=code&client_id={client_id}&redirect_uri={quote(redirect_uri)}&scope=api'
    return render_template('index.html', authorization_url=authorization_url)

@app.route('/oauth2/callback')
def oauth_callback():
    authorization_code = request.args.get('code')

    # Exchange the authorization code for an access token
    token_url = f'{salesforce_login_url}/services/oauth2/token'
    token_data = {
        'grant_type': 'authorization_code',
        'code': authorization_code,
        'client_id': client_id,
        'client_secret': client_secret,
        'redirect_uri': redirect_uri
    }
    token_response = requests.post(token_url, data=token_data)
    token_response.raise_for_status()
    token_json = token_response.json()
    access_token = token_json['access_token']
    instance_url = token_json['instance_url']

    # Example: Make a request to Salesforce REST API
    api_endpoint = f'{instance_url}/services/data/{api_version}/query?q=SELECT+Id,Name+FROM+Account'
    headers = {
        'Authorization': f'Bearer {access_token}'
    }
    api_response = requests.get(api_endpoint, headers=headers)
    api_response.raise_for_status()
    accounts = api_response.json()['records']

    return render_template('result.html', accounts=accounts)

#if __name__ == '__main__':
#    app.run(port=4000)