285 lines
5.5 KiB
Markdown
285 lines
5.5 KiB
Markdown
# credit-scrapper-poc
|
||
|
||
## Server setup
|
||
|
||
####Step 1 – Installing Nginx
|
||
```
|
||
sudo apt update
|
||
sudo apt install nginx
|
||
```
|
||
|
||
|
||
####Step 2 – Adjusting the Firewall
|
||
```
|
||
sudo ufw allow 'Nginx HTTP'
|
||
sudo ufw allow 'OpenSSH'
|
||
sudo ufw enable
|
||
sudo ufw status
|
||
```
|
||
|
||
|
||
####Step 3 – Checking your Web Server
|
||
```
|
||
sudo systemctl status nginx
|
||
curl -4 icanhazip.com
|
||
```
|
||
When you have your server’s IP address, enter it into your browser’s address bar:
|
||
|
||
|
||
####Step 4 – Installing the Components from the Ubuntu Repositories
|
||
```
|
||
sudo apt update
|
||
sudo apt install python3-pip python3-dev build-essential libssl-dev libffi-dev python3-setuptools
|
||
```
|
||
|
||
|
||
####Step 5 – Clone the repository
|
||
```
|
||
git clone https://gitlab.com/sunflowerlab/Repositories/TechnologyPOCs/credit-scrapper-poc.git
|
||
```
|
||
|
||
|
||
####Step 6 – Creating a Python Virtual Environment
|
||
```
|
||
sudo apt install python3-venv
|
||
cd credit-scrapper-poc
|
||
python3.6 -m venv venv
|
||
source venv/bin/activate
|
||
```
|
||
|
||
|
||
####Step 7 – Setting Up an Application
|
||
```
|
||
pip install wheel
|
||
pip install uwsgi
|
||
pip install -r requirements.txt
|
||
```
|
||
|
||
|
||
####Step 8 – Test the setup
|
||
```
|
||
python app.py
|
||
uwsgi --socket 0.0.0.0:5000 --protocol=http -w wsgi:app
|
||
uwsgi --socket 0.0.0.0:8080 --protocol=http -w wsgi:app
|
||
```
|
||
|
||
|
||
####Step 9 – Deactivate python environment
|
||
```
|
||
deactivate
|
||
```
|
||
|
||
|
||
####Step 10 – Creating a systemd Unit File
|
||
```
|
||
sudo nano /etc/systemd/system/app.service
|
||
```
|
||
|
||
Add the following contain
|
||
|
||
```
|
||
[Unit]
|
||
Description=uWSGI instance to serve app
|
||
After=network.target
|
||
|
||
[Service]
|
||
User=ubuntu
|
||
Group=www-data
|
||
WorkingDirectory=/home/ubuntu/credit-scrapper-poc
|
||
Environment="PATH=/home/ubuntu/credit-scrapper-poc/venv/bin"
|
||
ExecStart=/home/ubuntu/credit-scrapper-poc/venv/bin/uwsgi --ini app.ini
|
||
|
||
[Install]
|
||
WantedBy=multi-user.target
|
||
|
||
```
|
||
|
||
Update the directory paths.
|
||
|
||
We can now start the uWSGI service we created and enable it so that it starts at boot:
|
||
```
|
||
sudo systemctl start app
|
||
sudo systemctl enable app
|
||
sudo systemctl status app
|
||
```
|
||
|
||
####Step 11 – Configuring Nginx to Proxy Requests
|
||
|
||
```
|
||
sudo nano /etc/nginx/sites-available/app
|
||
```
|
||
|
||
|
||
###Step 12 - Install Javascript library
|
||
|
||
source install_phantomjs.sh
|
||
|
||
|
||
|
||
|
||
Add the following contain
|
||
```
|
||
server {
|
||
listen 80;
|
||
server_name 54.68.236.191;
|
||
|
||
location / {
|
||
proxy_read_timeout 1200s;
|
||
proxy_connect_timeout 1200s;
|
||
include uwsgi_params;
|
||
uwsgi_pass unix:/home/ubuntu/credit-scrapper-poc/app.sock;
|
||
|
||
# when a client closes the connection then keep the channel to uwsgi open. Otherwise uwsgi throws an IOError
|
||
uwsgi_ignore_client_abort on;
|
||
|
||
uwsgi_buffer_size 60M;
|
||
uwsgi_buffers 8 60M;
|
||
uwsgi_busy_buffers_size 60M;
|
||
|
||
uwsgi_read_timeout 1200;
|
||
uwsgi_send_timeout 1200;
|
||
|
||
uwsgi_connect_timeout 1200;
|
||
}
|
||
}
|
||
```
|
||
Update the directory paths and IP or domain address.
|
||
|
||
```
|
||
sudo nano /etc/nginx/conf.d/timeout.conf
|
||
```
|
||
|
||
Add the following contain
|
||
```
|
||
proxy_connect_timeout 1200;
|
||
proxy_send_timeout 1200;
|
||
proxy_read_timeout 1200;
|
||
send_timeout 1200;
|
||
```
|
||
|
||
```
|
||
sudo ln -s /etc/nginx/sites-available/app /etc/nginx/sites-enabled
|
||
sudo nginx -t
|
||
sudo systemctl restart nginx
|
||
sudo systemctl restart app
|
||
```
|
||
|
||
When you have your server’s IP address, enter it into your browser’s address bar.
|
||
|
||
|
||
## API Details
|
||
|
||
1. Smart Credit - Get Credit Report 3B
|
||
|
||
Method - `POST`
|
||
|
||
Endpoint - `/smart-credit-credit-report-3b`
|
||
|
||
Content-Type - `application/json`
|
||
|
||
Payload - `{
|
||
"email": "email",
|
||
"password": "password"
|
||
}`
|
||
|
||
Response - `HTML CONTENT` or `ERROR`
|
||
|
||
2. IdentityIQ - Get most recent Credit Report
|
||
|
||
Method - `POST`
|
||
|
||
Endpoint - `/identity-iq-credit-report-html`
|
||
|
||
Content-Type - `application/json`
|
||
|
||
Payload - `{
|
||
"email": "email",
|
||
"password": "password",
|
||
"ssn": "last-four-digit"
|
||
}`
|
||
|
||
Response - `HTML CONTENT` or `ERROR` or `TIME_OUT`
|
||
|
||
3. IdentityIQ - Get refresh date and button type
|
||
|
||
Method - `POST`
|
||
|
||
Endpoint - `/identity-iq-report-refresh-date`
|
||
|
||
Content-Type - `application/json`
|
||
|
||
Payload - `{
|
||
"email": "email",
|
||
"password": "password",
|
||
"ssn": "last -four-digit"
|
||
}`
|
||
|
||
Response - `{
|
||
'refresh_date': "MM/DD/YYYY",
|
||
'button_type': 1 or 2
|
||
}`
|
||
or
|
||
`ERROR`
|
||
or
|
||
`TIME_OUT`
|
||
|
||
button_type - `1` for Purchase AND `2` for Refresh
|
||
|
||
4. IdentityIQ - To click on the refresh button.
|
||
|
||
Method - `POST`
|
||
|
||
Endpoint - `/identity-iq-click-refresh-btn`
|
||
|
||
Content-Type - `application/json`
|
||
|
||
Payload - `{
|
||
"email": "email",
|
||
"password": "password",
|
||
"ssn": "last -four-digit"
|
||
}`
|
||
|
||
Response - `DONE` or `ERROR` or `TIME_OUT` or `BUTTON_NOT_FOUND`
|
||
|
||
5. SmartCredit - Get refresh date and button type
|
||
|
||
Method - `POST`
|
||
|
||
Endpoint - `/smart-credit-credit-refresh-status`
|
||
|
||
Content-Type - `application/json`
|
||
|
||
Payload - `{
|
||
"email": "email",
|
||
"password": "password"
|
||
}`
|
||
|
||
Response - `{
|
||
'button_type': 0 or 1 or 2.,
|
||
'refresh_date': TEXT
|
||
}`
|
||
or
|
||
`ERROR`
|
||
or
|
||
`TIME_OUT`
|
||
|
||
button_type - `0` for no button AND `1` for Purchase AND `2` for Refresh
|
||
|
||
6. SmartCredit - To click on the refresh button.
|
||
|
||
Method - `POST`
|
||
|
||
Endpoint - `/smart-credit-credit-click-refresh-btn`
|
||
|
||
Content-Type - `application/json`
|
||
|
||
Payload - `{
|
||
"email": "email",
|
||
"password": "password"
|
||
}`
|
||
|
||
Response - `DONE` or `ERROR` or `TIME_OUT` or `BUTTON_NOT_FOUND`
|
||
|
||
|
||
***Reference Link*** https://www.digitalocean.com/community/tutorials/how-to-serve-flask-applications-with-uswgi-and-nginx-on-ubuntu-18-04
|