21ec1fd850
That was the intent for the initial user setup, but didn't work before due to lwIP issues. Enable now that they're fixed.
81 lines
2.0 KiB
Python
81 lines
2.0 KiB
Python
import sys
|
|
import socket
|
|
import time
|
|
|
|
from websocket import *
|
|
import websocket_helper
|
|
|
|
|
|
def setup_server():
|
|
s = socket.socket()
|
|
s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
|
|
|
|
ai = socket.getaddrinfo("0.0.0.0", 8266)
|
|
addr = ai[0][4]
|
|
|
|
s.bind(addr)
|
|
s.listen(1)
|
|
return s
|
|
|
|
def getpass(stream, prompt):
|
|
stream.write(prompt)
|
|
passwd = b""
|
|
while 1:
|
|
c = stream.read(1)
|
|
if c in (b"\r", b"\n"):
|
|
stream.write("\r\n")
|
|
return passwd
|
|
passwd += c
|
|
stream.write("*")
|
|
|
|
def handle_conn(listen_sock):
|
|
cl, remote_addr = listen_sock.accept()
|
|
|
|
print("""
|
|
|
|
First-time WebREPL connection has been received. WebREPL initial setup
|
|
will now start over this connection. During setup, UART REPL will be
|
|
non-responsive. After setup finishes, the board will be rebooted. In
|
|
case of error during setup, current session will continue.
|
|
|
|
If you receive this message unexpectedly, it may mean that your WebREPL
|
|
connection is being hacked (power off board if unsure).
|
|
""")
|
|
|
|
websocket_helper.server_handshake(cl)
|
|
ws = websocket(cl)
|
|
|
|
ws.write("""\
|
|
Welcome to MicroPython WebREPL!\r
|
|
\r
|
|
This is the first time you connect to WebREPL, so please set a password\r
|
|
to use for the following WebREPL sessions. Once you enter the password\r
|
|
twice, your board will reboot with WebREPL running in active mode. On\r
|
|
some boards, you may need to press reset button or reconnect power.\r
|
|
\r
|
|
""")
|
|
|
|
while 1:
|
|
passwd1 = getpass(ws, "New password: ")
|
|
if len(passwd1) < 4:
|
|
ws.write("Password too short\r\n")
|
|
continue
|
|
passwd2 = getpass(ws, "Confirm password: ")
|
|
if passwd1 == passwd2:
|
|
break
|
|
ws.write("Passwords do not match\r\n")
|
|
|
|
with open("port_config.py", "w") as f:
|
|
f.write("WEBREPL_PASS = %r\n" % passwd1.decode("ascii"))
|
|
|
|
ws.write("Password successfully set, restarting...\r\n")
|
|
cl.close()
|
|
time.sleep(2)
|
|
import machine
|
|
machine.reset()
|
|
|
|
|
|
def test():
|
|
s = setup_server()
|
|
handle_conn(s)
|