diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 7578d12f..81b049dc 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -103,20 +103,34 @@ See the section about [deployment][deployment] for more information. [deployment]: https://facebook.github.io/create-react-app/docs/deployment -### `./tools/serve.py` -WebBluetooth requires https. So to locally test the result of `yarn build`, -run `./tools/serve.py` then point a web browser to -(don't leave out https!). +## Running the app locally -Usually using `yarn start` is more convenient for local development, but this is -particularly useful for testing changes on an Android device, for example. On -remote devices, replace `localhost` with the hostname or IP address of the -computer running the `./tools/serve.py` script. +For most development work, running `yarn start` will suffice (see above). +However, there are some features, like the service worker, that are disabled in +this environment. To test the site as if it was deployed in production, we can +serve up the output of `yarn build` instead. -This server uses a self-signed certificate, so the browser will complain that -the site is not secure. This warning can be ignored by clicking the *Advanced* -button and then click the link to proceed to the site. +This app uses "powerful web features" so requires a secure (https) connection. +So for local testing without https, we need to follow +. + +To serve the website, run: + + yarn build + python3 -m http.server --directory build + +Note: the usual `npx serve` doesn't properly serve parts of the site so we use +Python instead. + +Then at `chrome://flags/#unsafely-treat-insecure-origin-as-secure`, add: + + http://localhost:8000 + +and restart Chromium. + +The first link above also has info on how to use port forwarding to test on +Android devices. ## Learn More diff --git a/tools/serve.py b/tools/serve.py deleted file mode 100755 index 7006d596..00000000 --- a/tools/serve.py +++ /dev/null @@ -1,34 +0,0 @@ -#!/usr/bin/env python3 - -""" -Serve local build with https for testing. - -This is useful, e.g. for Android (WebBluetooth doesn't work without https). - -Usage: - - yarn build - ./tools/serve.py - -Browse to https://localhost:8443 on the local machine or -https://:8443 on a remote device. - -The browser will complain about the self-signed certificate, but this can be -bypassed (click "Advanced" in browser). -""" - -from http.server import HTTPServer, SimpleHTTPRequestHandler -from pathlib import Path -import os -import ssl - -THIS_DIR = Path(__file__).parent -TEST_CERT = (THIS_DIR / 'test.pem').absolute() -BUILD_DIR = (THIS_DIR / '..' / 'build').absolute() - -# HTTPServer serves the current directory. -os.chdir(BUILD_DIR) - -httpd = HTTPServer(('', 8443), SimpleHTTPRequestHandler) -httpd.socket = ssl.wrap_socket(httpd.socket, certfile=TEST_CERT, server_side=True) -httpd.serve_forever() diff --git a/tools/test.pem b/tools/test.pem deleted file mode 100644 index 85319120..00000000 --- a/tools/test.pem +++ /dev/null @@ -1,48 +0,0 @@ ------BEGIN PRIVATE KEY----- -MIIEvwIBADANBgkqhkiG9w0BAQEFAASCBKkwggSlAgEAAoIBAQDLpTko58nNd2cE -q8MaB1Wv4xren/xiNomDwf44QK9jZGzvHqnXCKTQ0KsLxtZt7Ne6PU1WdIA3bf6/ -nVzVUhauP0+DF8t6bTH4GSlvLXKGFW6dkCkTMw8ginh73PkZL+OaQvaMVJd42CW9 -bPhFMF6tXsLq661ObXwTE+vBopSim4EEzy+VKXB8BHvMYvfMcWiJihKJhCPLZE9p -iHBO3yByMs0fLe6UQ/MAHXFVprxnXJ+P2mMe5s/c0BEcTK1deNy9ngKcUvKGCcfj -T19xtkS4IHS0csz0fkZ+93tGjTm9eCLAOmyvKRljhOMFZKV4J1w4We3Y2b+xHN9w -psukl2+JAgMBAAECggEBAKacuEZaVYYQQa3VpZs/EwEDavFnrYLhIeM1rXtymMxV -1rZQvR4ciVP61WaeOMPY+ar7CrJIQLqY+MrmwZQaREotrC0SI703Z6GXXIoEgeVn -1Yd98c0ughraj7avVPIhdzK3xKWNdBw/o6j2Za2d5Ggt1oWDath2xQOK0eEr1jWu -VNfZNMvjyvevbyzuBLlF2970ZbOKAi/nrqtmw8mlhqDK5hy+j0K37hAbxizVDmU6 -vZfGhgmgBqXCla59T4rN3StK6zYVfmZKuGHWQbBxbWuLpFA+m09WKF599rUgZG7e -l5RC1dOXCa4bOv8yVRULb5LSIyBHxIfPiqShw/gUm3ECgYEA5/QkAOw4M2RSpaGb -K0yaoAKkZ5whX3rzudOVocQkeMKETpiPcLRZpO/z3A/bRjDg5YG7FNhbBI2nqGHR -ShkZIZlx7OeZPsT4IpciKDGOjoWhfk2a3gaUj+24hUO13hK1DrudI0t+USb6wjfP -C+hWoonEOjGK9jzPj1fwKMwHbYUCgYEA4MHN8RkXP6AgdLleKB+/AE613Ozmc54F -I0uL5xXUny+udhYcflsF357ztj3vWZzWOhVvp84O7puJu9J84wQQtG/v6kD+pIA7 -TKJAcJ8eL/gZgbEAEbw1fBZLFkpis6sD06tDiCRx3qWez3pr/UiPLw4ldIsNnyZu -RfqL8LjspzUCgYEAqDfl+IlYBOVoDtkR+Kf4p7zi0IVpqp43rffl18ixDqc7XujD -dmBFdxnSiDEzvEbsg2W/cNGryLSW98XhC9UB5d0rwzz/ZYdh0Ww8CFxQX8pIIZpU -i1rIWU10+ajud5ynlIS55IP2mxIi38GrtZ4NXpl9JxsRBZ16hiGneV7msCUCgYEA -iZAVLGve/uJS+x45svU7QkTqqr2Uj084ddHXXyjNamEUttHxvqSXg7cWE4T06jRE -KmjUXjCQkxo/wuWh6pCiaM3aWdZOBQE3SkBEkKnTICkJ84cSM8iuM7SxYINGxhD1 -1qgMPVeRGmTkPrj/P5cZjANsiVhSjgZHmC0xWbTVo8ECgYBh6R7N4B/xYH+UgV1U -qyzFjLjsBQoIuhx5JpHCXmzZV3B/TV9mi3D1hcl4oS6nnww/j5WKggdUq6542975 -iVsnw8OFCSpU/R9P6crPwDEkdZt9miv1BOdh95AqxpmLEJrfXuVNYur0yur7Yv+E -AVMgdBof4DtucX+v+sLxuHAppA== ------END PRIVATE KEY----- ------BEGIN CERTIFICATE----- -MIIDSzCCAjOgAwIBAgIUM9tef51ph3HVoJqF1h7ch5XmOQowDQYJKoZIhvcNAQEL -BQAwNTELMAkGA1UEBhMCQVUxEzARBgNVBAgMClNvbWUtU3RhdGUxETAPBgNVBAoM -CFB5YnJpY2tzMB4XDTIxMDgxMzE0NDQyOFoXDTQ4MTIyOTE0NDQyOFowNTELMAkG -A1UEBhMCQVUxEzARBgNVBAgMClNvbWUtU3RhdGUxETAPBgNVBAoMCFB5YnJpY2tz -MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAy6U5KOfJzXdnBKvDGgdV -r+Ma3p/8YjaJg8H+OECvY2Rs7x6p1wik0NCrC8bWbezXuj1NVnSAN23+v51c1VIW -rj9PgxfLem0x+Bkpby1yhhVunZApEzMPIIp4e9z5GS/jmkL2jFSXeNglvWz4RTBe -rV7C6uutTm18ExPrwaKUopuBBM8vlSlwfAR7zGL3zHFoiYoSiYQjy2RPaYhwTt8g -cjLNHy3ulEPzAB1xVaa8Z1yfj9pjHubP3NARHEytXXjcvZ4CnFLyhgnH409fcbZE -uCB0tHLM9H5Gfvd7Ro05vXgiwDpsrykZY4TjBWSleCdcOFnt2Nm/sRzfcKbLpJdv -iQIDAQABo1MwUTAdBgNVHQ4EFgQUm+DZlQWXqhjtS6ATH3Ns0fzchs0wHwYDVR0j -BBgwFoAUm+DZlQWXqhjtS6ATH3Ns0fzchs0wDwYDVR0TAQH/BAUwAwEB/zANBgkq -hkiG9w0BAQsFAAOCAQEAlpu1OrX9wb8m2eaZOVumjNna4Xx4pYJG13AdfWx5D4qR -PqbxdUfxnlk3F6pD15ELK1NK94k6/XarScBxDwMexSxKVPPeU5aOG2JRUkWaN4wg -NIYo7xQeoorgcNqnV8pIZMh3IUKnL3i9BFrMlhBIZCb/y0XdmJbvb5P9yU3x+z9C -w1hPKjyhEIYIGnjTh1Rj5feciQSxcouDVOZSgi2iscGePK5734rAzO3zZzbi4lbs -R2rK2RVrX/s51njLgCHpwPonfEqy8TrMSJvCtH0OG7wQCNbnFOakfzvChpWI/1bI -Qlai98tuzS49ekXd/dL6lXZi8z7c9Necj21mMgePKQ== ------END CERTIFICATE-----