#!/usr/bin/env bash # Script to backup an artfiles database via phpMyAdmin behind DCP. # This is mainly useful for their "Private Web medium" plan because the # next larger plan includes SSH access, so you can just use mysqldump directly. # The exported SQL is piped to stdout and must be saved to a file or # piped further for compression, encryption, etc. # $ ./dcpsqldump.sh > database_$(date +%F).sql set -eu -o pipefail # -------- <TODO> -------- # configure these credentials for your account and database # artfiles control panel authentication details dcp_host="https://dcp125.c.artfiles.de" dcp_user="aXXXXX" dcp_pass="XXXXXXXXXXXXXXXXXX" # database details # hint: create a separate database user with only 'select' permission db_user="dbXXXXXXXXX" db_name="dbXXXXXXXXX" db_pass="XXXXXXXXXXXXXXXXXX" # ------- </TODO> -------- # check if output is a terminal if [[ -t 1 ]]; then echo "ERR: won't output SQL dump to terminal" >&2 exit 1 fi # enter a temporary directory tmp="$(mktemp --tmpdir --directory dcpsqldump_XXXXXXXX)" trap "rm -rf '${tmp}'" EXIT RETURN # temporary files cookies="${tmp}/cookies.txt" token="${tmp}/token" # login to dcp printf 'DCP Login ... ' >&2 curl "${dcp_host}/login/ajax/update.html" \ --header "Accept-Language: en-US,en;q=0.5" \ --header "Content-Type: application/x-www-form-urlencoded; charset=UTF-8" \ --header "Cookie: DCP_COOKIE_TEST=MQ" \ --cookie-jar "${cookies}" \ --silent \ --data-urlencode "user=${dcp_user}" \ --data-urlencode "password=${dcp_pass}" \ | grep ^OK$ >/dev/null echo "OK" >&2 # login to phpmyadmin printf 'phpMyAdmin Login ... ' >&2 curl "${dcp_host}/phpmyadmin/" \ --header "Accept-Language: en-US,en;q=0.5" \ --header "Accept: text/html,application/xhtml+xml,application/xml" \ --cookie "${cookies}" \ --cookie-jar "${cookies}" \ --silent --fail \ --user "${db_user}:${db_pass}" \ | sed -n 's/.*token:"\([^"]\+\)".*/\1/p' > "${token}" echo "OK" >&2 # download database export printf 'Export database ... ' >&2 curl "${dcp_host}/phpmyadmin/index.php?route=/export" \ --header "Accept-Language: en-US,en;q=0.5" \ --header "Accept: text/x-sql" \ --header "Content-Type: application/x-www-form-urlencoded; charset=UTF-8" \ --cookie "${cookies}" \ --silent --fail \ --user "${db_user}:${db_pass}" \ --data-urlencode "token=$(< "${token}")" \ --data-urlencode "db=" \ --data-urlencode "table=" \ --data-urlencode "export_type=server" \ --data-urlencode "db_select[]=${db_name}" \ --data-urlencode "export_method=quick" \ --data-urlencode "template_id=" \ --data-urlencode "quick_or_custom=quick" \ --data-urlencode "what=sql" \ --data-urlencode "aliases_new=" \ --data-urlencode "output_format=sendit" \ --data-urlencode "filename_template=@DATABASE@" \ --data-urlencode "remember_template=on" \ --data-urlencode "charset=utf-8" \ --data-urlencode "compression=none" \ --data-urlencode "maxsize=" \ --data-urlencode "sql_include_comments=yes" \ --data-urlencode "sql_header_comment=" \ --data-urlencode "sql_use_transaction=yes" \ --data-urlencode "sql_compatibility=NONE" \ --data-urlencode "sql_structure_or_data=structure_and_data" \ --data-urlencode "sql_create_table=yes" \ --data-urlencode "sql_auto_increment=yes" \ --data-urlencode "sql_create_view=yes" \ --data-urlencode "sql_procedure_function=yes" \ --data-urlencode "sql_create_trigger=yes" \ --data-urlencode "sql_backquotes=yes" \ --data-urlencode "sql_type=INSERT" \ --data-urlencode "sql_insert_syntax=both" \ --data-urlencode "sql_max_query_size=50000" \ --data-urlencode "sql_hex_for_binary=yes" \ --data-urlencode "sql_utc_time=yes" echo "OK" >&2