Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Allow users to set region. #617

Merged
merged 4 commits into from
Jun 26, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
82 changes: 82 additions & 0 deletions hw_diag/templates/thix_set_region.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,82 @@
{% extends 'template_hyper.html' %}

{% block title %}ThingsIX Region{% endblock %}

{% block body %}
<div class="content">
<br/>
<div class="text-center">
<h3 class="text-center mb-4">ThingsIX Region</h3>
</div>

<div class="row mb-4">
<div class="col-12 col-lg-3 mb-4 mb-lg-0">
</div>
<div class="col-12 col-lg-6 mb-4 mb-lg-0" style="padding:20px">
<div class="card mb-0 h-100">
<p>
<div class="row">
<div class="col-1"></div>
<div class="col-10">
<div class="alert alert-info d-flex align-items-center" role="alert">
<div>
<p>Please select your hotspot's region. To find the appropriate region for your hotspot please use our <a href='https://region.nebra.com/' target='_blank'>Region Tool</a>.</p>
{% if msg %}
<p class="text-danger">{{ msg }}</p>
{% endif %}
<form action="/thingsix/set_region" method="POST">
<div class="form-group">
<select class="form-select" aria-label="Default select example" id="selRegion" name="selRegion">
<option value="AS923">AS923</option>
<option value="AS923_1">AS923_1</option>
<option value="AS923_1A">AS923_1A</option>
<option value="AS923_1B">AS923_1B</option>
<option value="AS923_1C">AS923_1C</option>
<option value="AS923_1D">AS923_1D</option>
<option value="AS923_1E">AS923_1E</option>
<option value="AS923_1F">AS923_1F</option>
<option value="AS923_2">AS923_2</option>
<option value="AS923_2A">AS923_2A</option>
<option value="AS923_3">AS923_3</option>
<option value="AS923_3A">AS923_3A</option>
<option value="AS923_4">AS923_4</option>
<option value="AS923_4A">AS923_4A</option>
<option value="AS923_1">AS923_1</option>
<option value="AU915">AU915</option>
robputt marked this conversation as resolved.
Show resolved Hide resolved
<option value="AU915_SB1">AU915_SB1</option>
<option value="AU915_SB2">AU915_SB2</option>
<option value="CN470">CN470</option>
<option value="EU433">EU433</option>
<option value="EU868">EU868</option>
<option value="EU868_A">EU868_A</option>
<option value="EU868_B">EU868_B</option>
<option value="EU868_C">EU868_C</option>
<option value="EU868_D">EU868_D</option>
<option value="EU868_E">EU868_E</option>
<option value="EU868_F">EU868_F</option>
<option value="IN865">IN865</option>
<option value="IN865_A">IN865_A</option>
<option value="KR920">KR920</option>
<option value="KR920_A">KR920_A</option>
<option value="RU864">RU864</option>
<option value="RU864_A">RU864_A</option>
<option value="US915">US915</option>
<option value="US915_SB2">US915_SB2</option>
</select>
</div>
<br/>
<div class="text-center"><input class="btn btn-primary" type="submit" value="Set Region" /></div>
</form>
</div>
</div>
</div>
<div class="col-1"></div>
</div>
</p>
</div>
</div>
<div class="col-12 col-lg-3 mb-4 mb-lg-0">
</div>
</div>
</div>
{% endblock %}
10 changes: 10 additions & 0 deletions hw_diag/utilities/thix.py
Original file line number Diff line number Diff line change
@@ -1,10 +1,20 @@
import requests
import os
import shutil


THIX_FORWARDER_API = 'http://thix-forwarder:8080/v1'


def is_region_set():
return os.path.isfile('/var/pktfwd/region')


def write_region_file(region):
with open("/var/pktfwd/region", "w") as region_file:
region_file.write(region)


def get_unknown_gateways():
resp = requests.get('%s/gateways/unknown' % THIX_FORWARDER_API) # nosec
return resp.json()
Expand Down
35 changes: 34 additions & 1 deletion hw_diag/views/thingsix.py
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,8 @@
from hw_diag.utilities.thix import get_gateways
from hw_diag.utilities.thix import submit_onboard
from hw_diag.utilities.thix import remove_testnet
from hw_diag.utilities.thix import is_region_set
from hw_diag.utilities.thix import write_region_file
from hw_diag.utilities.diagnostics import read_diagnostics_file


Expand All @@ -29,6 +31,19 @@
THINGSIX_CONFIG_FILE = '/var/thix/config.yaml'
THINGSIX_SETUP_TEMPLATE = 'thix_setup.html'
THINGSIX_ONBOARD_TEMPLATE = 'thix_onboard.html'
THINGSIX_SET_REGION_TEMPLATE = 'thix_set_region.html'

REGION_PREFIXES = (
'AS923',
'AU915',
'CN470',
'EU433',
'EU868',
'IN865',
'KR920',
'RU864',
'US915'
)

@THINGSIX.route('/thingsix')
@authenticate
Expand All @@ -39,8 +54,11 @@ def get_thix_dashboard():

try:
if get_value('thix_enabled') != 'true':
render_template(THINGSIX_SETUP_TEMPLATE, diagnostics=diagnostics)
raise Exception("ThingsIX not enabled yet.")
except Exception:
# Check if region is set, if not set then send user to the set region page...
if not is_region_set():
return render_template(THINGSIX_SET_REGION_TEMPLATE, diagnostics=diagnostics)
return render_template(THINGSIX_SETUP_TEMPLATE, diagnostics=diagnostics)

try:
Expand Down Expand Up @@ -95,6 +113,21 @@ def enable_thix():
return 'Accepted', 202


@THINGSIX.route('/thingsix/set_region', methods=['POST'])
@authenticate
@commercial_fleet_only
def set_region():
region = request.form.get('selRegion')

# Validate region is valid...
if not region.startswith(REGION_PREFIXES):
return 'Bad region provided', 400

# Set the region file and redirect user back to the onboard...
write_region_file(region)
return redirect('/thingsix')


@THINGSIX.route('/thingsix/onboard', methods=['POST'])
@authenticate
@commercial_fleet_only
Expand Down