8000 Static files + welcome page · kevincon/circuitpython@3cd0529 · GitHub
[go: up one dir, main page]

Skip to content

Commit 3cd0529

Browse files
committed
Static files + welcome page
1 parent 7543dd9 commit 3cd0529

File tree

10 files changed

+273
-65
lines changed

10 files changed

+273
-65
lines changed

ports/espressif/common-hal/mdns/RemoteService.c

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,8 @@
2626

2727
#include "shared-bindings/mdns/RemoteService.h"
2828

29+
#include "shared-bindings/ipaddress/IPv4Address.h"
30+
2931
const char *common_hal_mdns_remoteservice_get_service_type(mdns_remoteservice_obj_t *self) {
3032
if (self->result == NULL) {
3133
return "";
@@ -61,6 +63,32 @@ mp_int_t common_hal_mdns_remoteservice_get_port(mdns_remoteservice_obj_t *self)
6163
return self->result->port;
6264
}
6365

66+
uint32_t mdns_remoteservice_get_ipv4(mdns_remoteservice_obj_t *self) {
67+
if (self->result == NULL ||
68+
self->result->ip_protocol != MDNS_IP_PROTOCOL_V4 ||
69+
self->result->addr == NULL) {
70+
return 0;
71+
}
72+
mdns_ip_addr_t *cur = self->result->addr;
73+
while (cur != NULL) {
74+
if (cur->addr.type == ESP_IPADDR_TYPE_V4) {
75+
return cur->addr.u_addr.ip4.addr;
76+
}
77+
78+
cur = cur->next;
79+
}
80+
81+
return 0;
82+
}
83+
84+
mp_obj_t common_hal_mdns_remoteservice_get_ipv4(mdns_remoteservice_obj_t *self) {
85+
uint32_t addr = mdns_remoteservice_get_ipv4(self);
86+
if (addr == 0) {
87+
return mp_const_none;
88+
}
89+
return common_hal_ipaddress_new_ipv4address(addr);
90+
}
91+
6492
void common_hal_mdns_remoteservice_deinit(mdns_remoteservice_obj_t *self) {
6593
mdns_query_results_free(self->result);
6694
self->result = NULL;

shared-bindings/mdns/RemoteService.h

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,4 +38,8 @@ const char *common_hal_mdns_remoteservice_get_protocol(mdns_remoteservice_obj_t
3838
const char *common_hal_mdns_remoteservice_get_instance_name(mdns_remoteservice_obj_t *self);
3939
const char *common_hal_mdns_remoteservice_get_hostname(mdns_remoteservice_obj_t *self);
4040
mp_int_t common_hal_mdns_remoteservice_get_port(mdns_remoteservice_obj_t *self);
41+
mp_obj_t common_hal_mdns_remoteservice_get_ipv4(mdns_remoteservice_obj_t *self);
4142
void common_hal_mdns_remoteservice_deinit(mdns_remoteservice_obj_t *self);
43+
44+
// For internal use.
45+
uint32_t mdns_remoteservice_get_ipv4(mdns_remoteservice_obj_t *self);
Binary file not shown.
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
11
<!DOCTYPE html><html><head><title></title><meta charset="UTF-8"></head>
2-
<script src="http://127.0.0.1:8000/circuitpython.js" defer=true></script>
2+
<script src="/directory.js" defer=true></script>
33
<body><h1></h1><template id="row"><tr><td></td><td></td><td><a></a></td><td></td><td><button class="delete">🗑️</button></td></tr></template><table><thead><tr><th>Type</th><th>Size</th><th>Path</th><th>Modified</th><th></th></tr></thead><tbody></tbody></table><hr><input type="file" id="files" multiple><button type="submit" id="upload">Upload</button><hr>+🗀&nbsp;<input type="text" id="name"><button type="submit" id="mkdir">Create Directory</button>
44
</body></html>

tools/circuitpython.js renamed to supervisor/shared/web_workflow/static/directory.js

Lines changed: 11 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,6 @@ async function refresh_list() {
1818
}
1919
);
2020
const data = await response.json();
21-
console.log(data);
2221
var new_children = [];
2322
var template = document.querySelector('#row');
2423

@@ -76,12 +75,17 @@ async function refresh_list() {
7675
}
7776

7877
async function find_devices() {
79-
const response = await fetch("http://circuitpython.local/cp/devices.json");
80-
let url = new URL("/", response.url);
81-
console.log(response, url);
82-
url_base = url.href;
83-
const data = await response.json();
84-
console.log(data);
78+
const version_response = await fetch("/cp/version.json");
79+
if (version_response.ok) {
80+
url_base = new URL("/", window.location).href;
81+
} else {
82+
// TODO: Remove this when we've settled things. It is only used when this file isn't hosted
83+
// by a CP device.
84+
const response = await fetch("http://circuitpython.local/cp/devices.json");
85+
let url = new URL("/", response.url);
86+
url_base = url.href;
87+
const data = await response.json();
88+
}
8589
refresh_list();
8690
}
8791

@@ -103,9 +107,7 @@ async function mkdir(e) {
103107
}
104108

105109
async function upload(e) {
106-
console.log("upload");
107110
for (const file of files.files) {
108-
console.log(file);
109111
let file_path = new URL("/fs" + current_path + file.name, url_base);
110112
const response = await fetch(file_path,
111113
{
@@ -119,16 +121,13 @@ async function upload(e) {
119121
)
120122
if (response.ok) {
121123
refresh_list();
122-
console.log(files);
123124
files.value = "";
124125
upload_button.disabled = true;
125126
}
126127
}
127128
}
128129

129130
async function del(e) {
130-
console.log("delete");
131-
console.log(e);
132131
let fn = new URL(e.target.value);
133132
var prompt = "Delete " + fn.pathname.substr(3);
134133
if (e.target.value.endsWith("/")) {
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
<!DOCTYPE html>
2+
<html>
3+
<head>
4+
<title>CircuitPython</title>
5+
<meta charset="UTF-8">
6+
</head>
7+
<script src="/welcome.js" defer=true></script>
8+
<body>
9+
<h1>Welcome!</h1>
10+
Welcome to CircuitPython's Web API. Through your browser you can <a href="/fs/">work with files</a>. Make sure you've set <code>CIRCUITPY_WEB_API_PASSWORD</code> in <code>/.env</code> and provide it when the browser prompts for it. Leave the username blank.
11+
<h2>Device Info</h2>
12+
Board: <a id="board"></a><br>
13+
Version: <span id="version"></span><br>
14+
Hostname: <a id="hostname"></a><br>
15+
IP: <a id="ip"></a>
16+
<h2>Other Devices</h2>
17+
Here are other CircuitPython devices on your network:
18+
<ul id="devices">
19+
</ul>
20+
</body>
21+
</html>
Lines changed: 62 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,62 @@
1+
var url_base = window.location;
2+
var current_path;
3+
4+
var mdns_works = window.location.hostname.endsWith(".local");
5+
6+
async function find_devices() {
7+
var version_response = await fetch("/cp/version.json");
8+
if (version_response.ok) {
9+
url_base = new URL("/", window.location).href;
10+
} else {
11+
// TODO: Remove this when we've settled things. It is only used when this file isn't hosted
12+
// by a CP device.
13+
version_response = await fetch("http://circuitpython.local/cp/version.json", {mode: "cors"});
14+
mdns_works = mdns_works || version_response.redirected;
15+
if (!version_response.ok && version_response.redirected) {
16+
version_response = await fetch(version_response.url);
17+
}
18+
let url = new URL("/", version_response.url);
19+
url_base = url.href;
20+
}
21+
const version_info = await version_response.json();
22+
let version_span = document.querySelector("#version");
23+
version_span.textContent = version_info.version;
24+
let board_link = document.querySelector("#board");
25+
board_link.href = "https://circuitpython.org/board/" + version_info.board_id + "/";
26+
board_link.textContent = version_info.board_name;
27+
let hostname = document.querySelector("#hostname");
28+
var port = "";
29+
if (version_info.port != 80) {
30+
port = ":" + version_info.port;
31+
}
32+
hostname.href = "http://" + version_info.hostname + ".local" + port + "/";
33+
hostname.textContent = version_info.hostname;
34+
let ip = document.querySelector("#ip");
35+
ip.href = "http://" + version_info.ip + port + "/";
36+
ip.textContent = version_info.ip;
37+
const response = await fetch(new URL("/cp/devices.json", url_base));
38+
const data = await response.json();
39+
let device_list = document.querySelector("#devices");
40+
let new_devices = [];
41+
for (device of data.devices) {
42+
let li = document.createElement("li");
43+
let a = document.createElement("a");
44+
li.appendChild(a);
45+
var port = "";
46+
if (device.port != 80) {
47+
port = ":" + version_info.port;
48+
}
49+
var server;
50+
if (mdns_works) {
51+
server = device.hostname + ".local";
52+
} else {
53+
server = device.ip;
54+
}
55+
a.href = "http://" + server + port + "/";
56+
a.textContent = device.instance_name + " (" + device.hostname + ")";
57+
new_devices.push(li);
58+
}
59+
device_list.replaceChildren(...new_devices);
60+
}
61+
62+
find_devices();

0 commit comments

Comments
 (0)
0