diff --git a/examples/megacorp_acc/README.md b/examples/megacorp_acc/README.md new file mode 100644 index 0000000..888326e --- /dev/null +++ b/examples/megacorp_acc/README.md @@ -0,0 +1,6 @@ +Extensive example of all kinds of jobs for the fictional Acceptance environment for Megacorp. + +Usernames: + +* username: admin +* password: password diff --git a/examples/megacorp_acc/job_clean_database.sh b/examples/megacorp_acc/job_clean_database.sh index 0d14471..5ce8763 100755 --- a/examples/megacorp_acc/job_clean_database.sh +++ b/examples/megacorp_acc/job_clean_database.sh @@ -1,7 +1,9 @@ #!/bin/sh -MYSQL_DEFAULTS_FILE="my.cnf" -MYSQL="mysql --defaults-file=$MYSQL_DEFAULTS_FILE" - -echo "echo 'DROP DATABASE scriptform_acc' | $MYSQL" -echo "$MYSQL < dbs/${sample_db}.sql" +if [ "$source_sql" = "empty" ]; then + echo "Loading empty database" + rm megacorp.db + sqlite3 megacorp.db < megacorp_empty.sql && echo "Succesfully loaded" +else + echo "Not Implemented" +fi diff --git a/examples/megacorp_acc/job_download_db.sh b/examples/megacorp_acc/job_download_db.sh new file mode 100755 index 0000000..a5b96b7 --- /dev/null +++ b/examples/megacorp_acc/job_download_db.sh @@ -0,0 +1,11 @@ +#!/bin/sh + +FILESIZE=$(stat -c "%s" megacorp.db) +cat << EOF +HTTP/1.0 200 Ok +Content-Type: application/octet-stream +Content-Disposition: attachment; filename="megacorp.db" +Content-Length: $FILESIZE + +EOF +cat megacorp.db diff --git a/examples/megacorp_acc/job_enable_firewall.sh b/examples/megacorp_acc/job_enable_firewall.sh new file mode 100755 index 0000000..0a22524 --- /dev/null +++ b/examples/megacorp_acc/job_enable_firewall.sh @@ -0,0 +1,15 @@ +#!/bin/sh + +# FIXME: Validate ip address + +if [ "$network" = "intra" ]; then + NETWORK="192.168.1.0/24" +elif [ "$network" = "machine" ]; then + NETWORK="192.168.1.12" +else + echo "Invalid network >&2" + exit 1 +fi + +echo "iptables -A INPUT -p tcp --source $ip_address --dest $NETWORK -j ACCEPT" +echo "echo \"iptables -A INPUT -p tcp --source $ip_address --dest $NETWORK -j ACCEPT\" | at now + $expire_days days" diff --git a/examples/megacorp_acc/job_import_employees.sh b/examples/megacorp_acc/job_import_employees.sh new file mode 100755 index 0000000..85263ad --- /dev/null +++ b/examples/megacorp_acc/job_import_employees.sh @@ -0,0 +1,11 @@ +#!/bin/sh + +{ + echo ".separator ," + echo ".import $csv_file employee" +} | sqlite3 megacorp.db +if [ $? -eq 0 ]; then + echo "Succesfully loaded employees" +else + echo "Failed to load employees. Maybe you should clean the database first?" +fi diff --git a/examples/megacorp_acc/job_list_employees.sh b/examples/megacorp_acc/job_list_employees.sh new file mode 100755 index 0000000..5c26515 --- /dev/null +++ b/examples/megacorp_acc/job_list_employees.sh @@ -0,0 +1,8 @@ +#!/bin/sh + +echo "" +{ + echo ".mode html" + echo "SELECT * FROM employee;" +} | sqlite3 megacorp.db || exit 1 +echo "
" diff --git a/examples/megacorp_acc/megacorp_acc.json b/examples/megacorp_acc/megacorp_acc.json index 823727b..f20b1bb 100644 --- a/examples/megacorp_acc/megacorp_acc.json +++ b/examples/megacorp_acc/megacorp_acc.json @@ -1,56 +1,20 @@ { "title": "MegaCorp acceptance jobs", - "forms": { - "enable_firewall": { - "title": "Enable firewall", - "description": "Enable access to the acceptance environment from the entered IP", - "submit_title": "Enable access", - "script": "job_clean_database.sh", - "fields": [ - { - "name": "ip_address", - "title": "IP Address", - "type": "string", - "required": true - }, - { - "name": "expire_days", - "title": "Expire (days)", - "type": "integer", - "max": 31, - "min": 2 - }, - { - "name": "expire_date", - "title": "Expire (date)", - "type": "date", - "required": true - }, - { - "name": "network", - "title": "Which network", - "type": "radio", - "options": [ - ["intra", "Whole intranet"], - ["machine", "Acceptance machine"] - ] - }, - { - "name": "comment", - "title": "Comment", - "type": "text" - } - ] - }, - "clean_database": { + "users": { + "jjohnson": "5e884898da28047151d0e56f8dc6292773603d0d6aabbdd62a11ef721d1542d8", + "admin": "5e884898da28047151d0e56f8dc6292773603d0d6aabbdd62a11ef721d1542d8" + }, + "forms": [ + { + "name": "clean_database", "title": "Load clean database", "description": "Recreate the acceptance database from scratch. This deletes all the information in the database", "submit_title": "Run", "script": "job_clean_database.sh", "fields": [ { - "name": "sample_db", - "title": "Sample database", + "name": "source_sql", + "title": "Database type", "type": "select", "options": [ ["empty", "Empty database"], @@ -60,11 +24,12 @@ } ] }, - "import_csv": { - "title": "Import CSV data into database", - "description": "Load a CSV with test data into the database", + { + "name": "import_employees", + "title": "Import employee data from CSV", + "description": "Load a CSV with employee data into the database. The employee table MUST be empty.", "submit_title": "Import CSV", - "script": "job_restart_acc.sh", + "script": "job_import_employees.sh", "fields": [ { "name": "csv_file", @@ -73,18 +38,78 @@ } ] }, - "restart_services": { + { + "name": "list_employees", + "title": "List employees", + "description": "List the employees currently in the database", + "submit_title": "List", + "script": "job_list_employees.sh", + "output": "html", + "fields": [ + ] + }, + { + "name": "download_db", + "title": "Download database", + "description": "Download the full binary database", + "submit_title": "Download", + "script": "job_download_db.sh", + "output": "raw", + "fields": [ + ] + }, + { + "name": "restart_services", "title": "Restart Acceptance services", - "description": "Restarts the acceptance services (web, db, cache). Consult with John Foo first!", + "description": "Restarts the acceptance services (web, db, cache). Consult with Karl Karlsön first!", "submit_title": "Restart", "script": "job_restart_acc.sh", "fields": [ { "name": "passwd", - "title": "John Foo gave you a password. What is it?", - "type": "password" + "title": "Karl Karlsön gave you a password. What is it?", + "type": "password", + "required": true + } + ] + }, + { + "name": "enable_firewall", + "allowed_users": ["admin"], + "title": "Enable firewall", + "description": "Enable access to the acceptance environment from the entered IP", + "submit_title": "Enable access", + "script": "job_enable_firewall.sh", + "fields": [ + { + "name": "ip_address", + "title": "From IP Address", + "type": "string", + "required": true, + "min_length": 7 + }, + { + "name": "expire_days", + "title": "Expire (days)", + "type": "integer", + "max": 31, + "min": 2 + }, + { + "name": "network", + "title": "To which network", + "type": "radio", + "options": [ + ["intra", "Whole intranet"], + ["machine", "Acceptance machine"] + ] + }, + { + "name": "comment", + "title": "Comment", + "type": "text" } ] } - } + ] } diff --git a/examples/megacorp_acc/megacorp_employees.csv b/examples/megacorp_acc/megacorp_employees.csv new file mode 100644 index 0000000..fd30252 --- /dev/null +++ b/examples/megacorp_acc/megacorp_employees.csv @@ -0,0 +1,3 @@ +1, JJO, John, Johnson +2, KKA, Karl, Karlsön +3, PPE, Pete, Peterson diff --git a/examples/megacorp_acc/megacorp_empty.sql b/examples/megacorp_acc/megacorp_empty.sql new file mode 100644 index 0000000..aaa0b28 --- /dev/null +++ b/examples/megacorp_acc/megacorp_empty.sql @@ -0,0 +1,6 @@ +CREATE TABLE employee ( + id INTEGER PRIMARY KEY AUTOINCREMENT, + code TEXT, + firstname TEXT, + lastname TEXT +);