| Index: experimental/webtry/DESIGN.md
|
| diff --git a/experimental/webtry/DESIGN.md b/experimental/webtry/DESIGN.md
|
| index 66c7f1f7986537a33f4d099e8e1aab257756a6c6..349a10e4956db7a3539e64f3a5770fcd88fcb26d 100644
|
| --- a/experimental/webtry/DESIGN.md
|
| +++ b/experimental/webtry/DESIGN.md
|
| @@ -9,6 +9,7 @@ Allows trying out Skia code in the browser.
|
|
|
| Security
|
| --------
|
| +
|
| We're putting a C++ compiler on the web, and promising to run the results of
|
| user submitted code, so security is a large concern. Security is handled in a
|
| layered approach, using a combination of seccomp-bpf, chroot jail and rlimits.
|
| @@ -31,6 +32,7 @@ User submitted code is also restricted in the following ways:
|
| Architecture
|
| ------------
|
|
|
| +
|
| The server runs on GCE, and consists of a Go Web Server that calls out to the
|
| c++ compiler and executes code in a chroot jail. See the diagram below:
|
|
|
| @@ -114,6 +116,67 @@ calls:
|
| munmap
|
| brk
|
|
|
| +Database
|
| +--------
|
| +
|
| +Code submitted is stored in an SQL database so that it can be referenced
|
| +later, i.e. we can let users bookmark their SkFiddles.
|
| +
|
| +The storage layer will be Cloud SQL (a cloud version of MySQL). Back of the
|
| +envelope estimates of traffic come out to a price of a about $1/month.
|
| +
|
| +All passwords for MySQL are stored in valentine.
|
| +
|
| +To connect to the database from the skia-webtry-b server:
|
| +
|
| + $ mysql --host=173.194.83.52 --user=root --password
|
| +
|
| +Initial setup of the database, the user, and the only table:
|
| +
|
| + CREATE DATABASE webtry;
|
| + USE webtry;
|
| + CREATE USER 'webtry'@'%' IDENTIFIED BY '<password is in valentine>';
|
| + GRANT SELECT, INSERT, UPDATE ON webtry.webtry TO 'webtry'@'%';
|
| +
|
| + CREATE TABLE webtry (
|
| + code TEXT DEFAULT '' NOT NULL,
|
| + create_ts TIMESTAMP DEFAULT CURRENT_TIMESTAMP NOT NULL,
|
| + hash CHAR(64) DEFAULT '' NOT NULL,
|
| + PRIMARY KEY(hash)
|
| + );
|
| +
|
| +Common queries webtry.go will use:
|
| +
|
| + INSERT INTO webtry (code, hash) VALUES('int i = 0;...', 'abcdef...');
|
| +
|
| + SELECT code, create_ts, hash FROM webtry WHERE hash='abcdef...';
|
| +
|
| + SELECT code, create_ts, hash FROM webtry ORDER BY create_ts DESC LIMIT 2;
|
| +
|
| + // To change the password for the webtry sql client:
|
| + SET PASSWORD for 'webtry'@'%' = PASSWORD('<password is in valentine>');
|
| +
|
| + // Run before and after to confirm the password changed:
|
| + SELECT Host, User, Password FROM mysql.user;
|
| +
|
| +Password for the database will be stored in the metadata instance, if the
|
| +metadata server can't be found, i.e. running locally, then data will not be
|
| +stored. To see the current password stored in metadata and the fingerprint:
|
| +
|
| + gcutil --project=google.com:skia-buildbots getinstance skia-webtry-b
|
| +
|
| +To set the mysql password that webtry is to use:
|
| +
|
| + gcutil --project=google.com:skia-buildbots setinstancemetadata skia-webtry-b --metadata=password:'[mysql client webtry password]' --fingerprint=[some fingerprint]
|
| +
|
| +To retrieve the password from the running instance just GET the right URL from
|
| +the metadata server:
|
| +
|
| + curl "http://metadata/computeMetadata/v1/instance/attributes/password" -H "X-Google-Metadata-Request: True"
|
| +
|
| +N.B. If you need to change the MySQL password that webtry uses, you must change
|
| +it both in MySQL and the value stored in the metadata server.
|
| +
|
| Installation
|
| ------------
|
| See the README file.
|
|
|