daveagp / websheets

Online version of coding handouts with blanks
GNU Affero General Public License v3.0
9 stars 8 forks source link

websheets: Online version of coding handouts with blanks

Created originally by David Pritchard (daveagp@gmail.com) in 2013. Released under the GNU Affero General Public License (but see other licenses for subdirectories/subrepositories).

GETTING STARTED

See the list of the main components of the websheets system here:

http://cscircles.cemc.uwaterloo.ca/websheets.html

There are also other mirrors at USC and Princeton but they require that you have an account at one of those schools.

INSTALLATION

Install these on your server first: https://github.com/cemc/safeexec https://github.com/daveagp/java_jail This requires root access. See the instructions therein for details. It is best to install these in locations that are not served to users by your web server.

If you wish to run C++ problems through websheets, you need to do a couple of small changes to java_jail:

Next, in some folder accessible to your web server, run

git clone --recursive https://github.com/daveagp/websheets

Next, copy ws-config.example.json to ws-config.json. Set up the options in ws-config.json.

Run the commands in "install.sql", e.g. with: mysql database_name -u user_name -p < install.sql

Try visiting http://your.website/url/to/websheets/index.php and everything should now work except authentication.

LOGIN MECHANISMS

Websheets doesn't currently let users create accounts or store passwords, and instead it relies on third-party authentication.

It primarily uses an open-source module called "HybridAuth". "HybridAuth" supports tons of providers but Websheets is most easily prepared to utilize three: Facebook, Google and GitHub.

(a) To use one of these three open authenticators, you just have to register your "application" (your local Websheets mirror) with the corresponding provider and copy the id and secret into ws-config.json.

Use your google "Client ID for web applications" and "Client secret"
or facebook "App ID" and "App Secret".
The receiving URI should be like
  http://your.website/url/to/websheets/hybridauth/hybridauth/index.php

Delete the options you don't want to use in ws-config.json.

(b) If your school has Google Apps accounts for all students (e.g., USC does this), you can enforce that only students with accounts corresponding to your school may log in (e.g. to avoid strangers from consuming CPU cycles). Enter "google-apps-domain" and "required_username_suffix" in ws-config.json if you want to do this (in addition to your google app credentials).

(c) If using GitHub, you have to copy a file in hybridauth: cd hybridauth cp additional-providers/hybridauth-github/Providers/GitHub.php hybridauth/Hybrid/Providers/

Additional hybridauth providers can be added if you poke around auth.php a bit.

Many schools (Waterloo, Princeton) also have PHP libraries that perform authentication for students specifically from their school. You can hook it up to Websheets by modifying auth.php accordingly. For an example, see the Princeton-related code in auth.php.

ADDITIONAL SETUP

To download updates, you need two commands to get the subrepos: git pull; git submodule update

WARNING: You'll be putting a DB password in ws-config.json. Please check that http://your.website/url/to/websheets/ws-config.json is inaccessible; .htaccess tries to do this, but you should confirm it works.

THANKS

Thanks to the COS 126 staff at Princeton for offering feedback when using this tool from Fall 2013 to Spring 2014: Donna Gabai, Maia Ginsburg, Bob Sedgewick and Doug Clark.

Thanks to Mark Redekopp at U. Southern California for great feedback when the C++ backend was developed.