A webapp that makes Skynet accessible to web browsers.
This repository has been archived on 2022-10-07. You can view files and clone it, but cannot push or open issues or pull requests.
Go to file
Ivaylo Novakov f6b74f15a7
Cleanup.
2020-12-18 16:11:54 +01:00
.github update cypress github action to v2 2020-11-24 15:32:05 +01:00
docker Merge remote-tracking branch 'origin/master' into accounts 2020-12-15 10:36:39 +01:00
packages comment out uniswap links from health-check 2020-11-18 16:08:03 +01:00
scripts improve nginx skylinks cache purging (#553) 2020-12-03 12:59:50 +01:00
setup-scripts Cleanup. 2020-12-18 16:11:54 +01:00
.gitignore Setup mail sending. 2020-12-07 11:16:21 +01:00
LICENSE Initial commit 2020-01-30 08:13:21 -05:00
README.md Add instructions on configuring kratos and oathkeeper. 2020-12-18 13:12:37 +01:00
docker-compose.yml add oathkeeper container name 2020-12-15 17:24:41 +01:00
package.json migrate to yarn workspaces 2020-07-31 00:50:42 +02:00
yarn.lock comment out uniswap links from health-check 2020-11-18 16:08:03 +01:00

README.md

Skynet Portal

Web application

Use yarn workspace webapp start to start the development server.

Use yarn workspace webapp build to compile the application to /public directory.

You can use the below build parameters to customize your web application.

  • development example GATSBY_API_URL=https://siasky.dev yarn workspace webapp start
  • production example GATSBY_API_URL=https://siasky.net yarn workspace webapp build

List of available parameters:

  • GATSBY_API_URL: override api url (defaults to location origin)

MongoDB Setup

Mongo needs a couple of extra steps in order to start a secure cluster.

  • Open port 27017 on all nodes that will take part in the cluster. Ideally, you would only open the port for the other nodes in the cluster.
  • Manually run an initialisation docker run with extra environment variables that will initialise the admin user with a password (example below).
  • Manually add a mgkey file under ./docker/data/mongo with the respective secret (see Mongo's keyfile access control for details).
  • During the initialisation run mentioned above, we need to make two extra steps within the container:
    • Change the ownership of mgkey to mongodb:mongodb
    • Change its permissions to 400
  • After these steps are done we can open a mongo shell on the master node and run rs.add() in order to add the new node to the cluster.

Example initialisation docker run command:

docker run \
	--rm \
	--name mg \
	-p 27017:27017 \
	-e MONGO_INITDB_ROOT_USERNAME=<admin username> \
	-e MONGO_INITDB_ROOT_PASSWORD=<admin password> \
	-v /home/user/skynet-webportal/docker/data/mongo/db:/data/db \
	-v /home/user/skynet-webportal/docker/data/mongo/mgkey:/data/mgkey \
	mongo --keyFile=/data/mgkey --replSet=skynet

Regular docker run command:

docker run \
	--rm \
	--name mg \
	-p 27017:27017 \
	-v /home/user/skynet-webportal/docker/data/mongo/db:/data/db \
	-v /home/user/skynet-webportal/docker/data/mongo

Cluster initialisation mongo command:

rs.initiate(
  {
    _id : "skynet",
    members: [
      { _id : 0, host : "mongo0.example.com:27017" },
      { _id : 1, host : "mongo1.example.com:27017" },
    ]
  }
)

Kratos & Oathkeeper Setup

Kratos is our user management system of choice and Oathkeeper is the identity and access proxy.

Most of the needed config is already under docker/kratos. The only two things that need to be changed are the config for Kratos that might contain you email server password, and the JWKS Oathkeeper uses to sign its JWT tokens.

To override the default kratos.yml you can create .kratos.yml in the root directory of the project, alongside the .env file.

To override the JWKS you will need to directly edit docker/kratos/oathkeeper/id_token.jwks.json and replace it with your generated key set. If you don't know how to generate a key set you can use this code:

package main

import (
	"encoding/json"
	"log"
	"os"

	"github.com/ory/hydra/jwk"
)

func main() {
	gen := jwk.RS256Generator{
		KeyLength: 2048,
	}
	jwks, err := gen.Generate("", "sig")
	if err != nil {
		log.Fatal(err)
	}
	jsonbuf, err := json.MarshalIndent(jwks, "", "  ")
	if err != nil {
		log.Fatal("failed to generate JSON: %s", err)
	}
	os.Stdout.Write(jsonbuf)
}

While you can directly put the output of this programme into the file mentioned above, you can also remove the public key from the set and change the kid of the private key to not include the prefix private:.

Contributing

Testing Your Code

Before pushing your code you should verify that it will pass our online test suite.

Cypress Tests Verify the Cypress test suite by doing the following:

  1. In one terminal screen run GATSBY_API_URL=https://siasky.net yarn workspace webapp start
  2. In a second terminal screen run yarn workspace webapp cypress run

Setting up complete skynet server

A setup guide with installation scripts can be found in setup-scripts/README.md.