Skip to content

Commit a0b6e56

Browse files
authored
Merge pull request #30 from projecthorus/feature/cognito_login
Prediction settings updater
2 parents 5318db2 + e67b77c commit a0b6e56

File tree

6 files changed

+156
-2
lines changed

6 files changed

+156
-2
lines changed

build.sh

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@ java -jar "../tools/yuicompressor-2.4.8.jar" --type=js --disable-optimizations -
2626
java -jar "../tools/yuicompressor-2.4.8.jar" --type=js --disable-optimizations --nomunge app.js >> mobile.js
2727
java -jar "../tools/yuicompressor-2.4.8.jar" --type=js --disable-optimizations --nomunge colour-map.js >> mobile.js
2828
java -jar "../tools/yuicompressor-2.4.8.jar" --type=js --disable-optimizations --nomunge format.js >> mobile.js
29+
java -jar "../tools/yuicompressor-2.4.8.jar" --type=js --disable-optimizations --nomunge flight_doc.js >> mobile.js
2930

3031
#compile plot lib and config
3132
java -jar "../tools/yuicompressor-2.4.8.jar" --type=js --disable-optimizations --nomunge _jquery.flot.js >> init_plot.js

css/habitat-font.css

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -75,5 +75,4 @@
7575
.icon-target:before { content: "\f006"; }
7676
.icon-earth:before { content: "\f007"; }
7777
.icon-daylight:before { content: "\f008"; }
78-
.icon-settings:before { content: "\f010"; }
79-
78+
.icon-settings:before { content: "\f010"; }

css/main.css

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -969,3 +969,20 @@ header .search form input[type='submit'] {
969969
}
970970
}
971971

972+
/* login button */
973+
#login_url {
974+
display: block;
975+
background-color: #33b5e5;
976+
color: white;
977+
text-decoration: none;
978+
font-weight: bold;
979+
text-align: center;
980+
padding: 10px;
981+
}
982+
/* predictor settings pane */
983+
.prediction_settings {
984+
background-image: url("../glyphs/icon-balloon.svg");
985+
background-repeat: no-repeat;
986+
background-size: 50%;
987+
background-position: center;
988+
}

glyphs/icon-balloon.svg

Lines changed: 9 additions & 0 deletions
Loading

index.html

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,7 @@
4242
</div>
4343
<ol class="nav noselect">
4444
<li class="home"><i class="icon-habhub"></i></li>
45+
<li class="prediction_settings"><i></i></li>
4546
<li class="chasecar" style="display: none"><i class="icon-car"></i></li>
4647
<li class="settings"><i class="icon-settings"></i></li>
4748
<li class="weather">
@@ -264,6 +265,33 @@ <h2><i class="icon-car rfloat"></i>Chase Mode</h2>
264265
<hr>
265266
</div>
266267
</div>
268+
<div id="prediction_settingsbox" style="display: none" class="flatpage">
269+
<div class="slimContainer">
270+
<h2>Prediction Settings</h2>
271+
<p id="prediction_settings_message">
272+
Login to configure per-payload flight path prediction parameters.
273+
</p>
274+
<hr>
275+
<div id="update-flightdocs" style="display: none">
276+
<form action="javascript:;">
277+
Callsign (case sensitive):<br /> <input id="flight_doc_payload_callsign" type="text"><br />
278+
<button type="button" onclick="query_flight_doc()">Query</button><br />
279+
Peak altitude:<br /> <input id="flight_doc_peak_altitude" type="text"><br />
280+
Descent rate:<br /> <input id="flight_doc_descent_rate" type="text"><br />
281+
Ascent rate:<br /> <input id="flight_doc_ascent_rate" type="text"><br />
282+
Float expected:<br /> <input id="flight_doc_float_expected" type="checkbox"><br />
283+
<input type="submit" onclick="update_flight_doc()">
284+
</form>
285+
</div>
286+
<p id="payload-update-results">
287+
</p>
288+
<p id="login-prompt">
289+
<a href="" id="login_url">Login</a>
290+
</p>
291+
292+
293+
</div>
294+
</div>
267295
<div id="homebox" style="width:0px;height:0px"></div>
268296
<div id="mapscreen">
269297
<div id="timebox" class="present slickbox animate" style="display: none">
@@ -305,6 +333,7 @@ <h2><i class="icon-car rfloat"></i>Chase Mode</h2>
305333
</div>
306334
<!-- Was 3.31-->
307335
<script type="text/javascript" language="javascript" src="https://xc5dqkj2cgb1.statuspage.io/embed/script.js" async defer></script>
336+
<script src="https://sdk.amazonaws.com/js/aws-sdk-2.1130.0.min.js"></script>
308337
<script type="text/javascript" language="javascript" src="js/leaflet.js"></script>
309338
<script type="text/javascript" language="javascript" src="js/Leaflet.fullscreen.min.js"></script>
310339
<script type="text/javascript" language="javascript" src="js/L.Terminator.js"></script>

js/flight_doc.js

Lines changed: 99 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,99 @@
1+
2+
// populate login url
3+
document.getElementById("login_url").href= "https://auth.v2.sondehub.org/oauth2/authorize?client_id=21dpr4kth8lonk2rq803loh5oa&response_type=token&scope=email+openid+phone&redirect_uri=" + window.location.protocol + "//" + window.location.host
4+
5+
// manage AWS cognito auth
6+
if (window.location.hash.indexOf("id_token") != -1){
7+
console.log("Detected login")
8+
var args = window.location.hash.slice(1)
9+
var parms = new URLSearchParams(args)
10+
var id_token = parms.get("id_token")
11+
sessionStorage.setItem("id_token", id_token)
12+
}
13+
14+
// do AWS login
15+
AWS.config.region = 'us-east-1';
16+
17+
AWS.config.credentials = new AWS.CognitoIdentityCredentials({
18+
IdentityPoolId: 'us-east-1:55e43eac-9626-43e1-a7d2-bbc57f5f5aa9',
19+
Logins: {
20+
"cognito-idp.us-east-1.amazonaws.com/us-east-1_G4H7NMniM": sessionStorage.getItem("id_token")
21+
}
22+
});
23+
24+
AWS.config.credentials.get(function(){
25+
// if this passes we update the login page to say logged in
26+
if (AWS.config.credentials.accessKeyId != undefined){
27+
document.getElementById("login_url").innerText = "Logout"
28+
document.getElementById("login_url").href="javascript:logout()"
29+
document.getElementById("update-flightdocs").style.display = "block"
30+
document.getElementById("prediction_settings_message").innerText = "Use this form to configure predictions for your launch. Please only use this for your own launches. Callsigns must match your payload callsigns exactly (case sensitive)."
31+
}
32+
});
33+
function query_flight_doc(){
34+
var payload_callsign = document.getElementById("flight_doc_payload_callsign").value
35+
fetch("https://api.v2.sondehub.org/amateur/flightdoc/"+payload_callsign).then(
36+
function(response){
37+
if (response.ok) {
38+
response.text().then(function(x) {
39+
var data = JSON.parse(x)
40+
if (data.float_expected) {
41+
document.getElementById("flight_doc_float_expected").checked = true
42+
} else {
43+
document.getElementById("flight_doc_float_expected").checked = false
44+
}
45+
document.getElementById("flight_doc_peak_altitude").value = data.peak_altitude
46+
document.getElementById("flight_doc_descent_rate").value = data.descent_rate
47+
document.getElementById("flight_doc_ascent_rate").value = data.ascent_rate
48+
})
49+
} else {
50+
document.getElementById("payload-update-results").textContent = "Could not load payload data"
51+
}
52+
}
53+
)
54+
}
55+
function logout(){
56+
logout_url = "https://auth.v2.sondehub.org/logout?client_id=21dpr4kth8lonk2rq803loh5oa&response_type=token&logout_uri=" + window.location.protocol + "//" + window.location.host
57+
sessionStorage.removeItem("id_token")
58+
window.location = logout_url
59+
}
60+
61+
function update_flight_doc(){
62+
63+
var body = JSON.stringify(
64+
{
65+
"payload_callsign": document.getElementById("flight_doc_payload_callsign").value,
66+
"float_expected": document.getElementById("flight_doc_float_expected").value == "on",
67+
"peak_altitude": parseFloat(document.getElementById("flight_doc_peak_altitude").value),
68+
"descent_rate": parseFloat(document.getElementById("flight_doc_descent_rate").value),
69+
"ascent_rate": parseFloat(document.getElementById("flight_doc_ascent_rate").value),
70+
}
71+
)
72+
73+
74+
var httpRequest = new AWS.HttpRequest("https://api-raw.v2.sondehub.org/amateur/flightdoc" , "us-east-1");
75+
var v4signer = new AWS.Signers.V4(httpRequest, "execute-api", true);
76+
httpRequest.method = "PUT";
77+
httpRequest.headers['Host'] = 'api-raw.v2.sondehub.org';
78+
httpRequest.headers['Content-Type'] = 'application/json';
79+
httpRequest.headers['Content-Length'] = body.length;
80+
httpRequest.headers['X-Amz-Content-Sha256'] = v4signer.hexEncodedHash(body)
81+
httpRequest.body = body
82+
83+
84+
85+
v4signer.addAuthorization(AWS.config.credentials, AWS.util.date.getDate());
86+
document.getElementById("payload-update-results").textContent = "Updating..."
87+
fetch(httpRequest.endpoint.href , {
88+
method: httpRequest.method,
89+
headers: httpRequest.headers,
90+
body: httpRequest.body,
91+
}).then(function (response) {
92+
if (!response.ok) {
93+
response.text().then(function(x) {document.getElementById("payload-update-results").textContent =x })
94+
return;
95+
}
96+
response.text().then(function(x) {document.getElementById("payload-update-results").textContent =x })
97+
});
98+
99+
}

0 commit comments

Comments
 (0)