2018-05-31 22:55:31 -07:00
#!/bin/bash
set -eu -o pipefail
readonly curl = "curl --fail --connect-timeout 20 --retry 10 --retry-delay 2 --max-time 2400"
function get_status( ) {
key = " $1 "
if status = $( $curl -q -f "http://localhost:3000/api/v1/cloudron/status" 2>/dev/null) ; then
currentValue = $( echo " ${ status } " | python3 -c 'import sys, json; print(json.dumps(json.load(sys.stdin)[sys.argv[1]]))' " ${ key } " )
echo " ${ currentValue } "
return 0
fi
return 1
}
function wait_for_status( ) {
key = " $1 "
expectedValue = " $2 "
echo " wait_for_status: $key to be $expectedValue "
while true; do
if currentValue = $( get_status " ${ key } " ) ; then
echo " wait_for_status: $key is current: $currentValue expecting: $expectedValue "
if [ [ " ${ currentValue } " = = $expectedValue ] ] ; then
break
fi
fi
sleep 3
done
}
domain = ""
domainProvider = ""
domainConfigJson = "{}"
domainTlsProvider = "letsencrypt-prod"
adminUsername = "superadmin"
adminPassword = "Secret123#"
adminEmail = "admin@server.local"
appstoreUserId = ""
appstoreToken = ""
2018-06-05 19:00:59 -07:00
backupDir = "/var/backups"
2018-05-31 22:55:31 -07:00
2018-06-05 19:00:59 -07:00
args = $( getopt -o "" -l "domain:,domain-provider:,domain-tls-provider:,admin-username:,admin-password:,admin-email:,appstore-user:,appstore-token:,backup-dir:" -n " $0 " -- " $@ " )
2018-05-31 22:55:31 -07:00
eval set -- " ${ args } "
while true; do
case " $1 " in
--domain) domain = " $2 " ; shift 2; ;
--domain-provider) domainProvider = " $2 " ; shift 2; ;
--domain-tls-provider) domainTlsProvider = " $2 " ; shift 2; ;
--admin-username) adminUsername = " $2 " ; shift 2; ;
--admin-password) adminPassword = " $2 " ; shift 2; ;
--admin-email) adminEmail = " $2 " ; shift 2; ;
--appstore-user) appstoreUser = " $2 " ; shift 2; ;
--appstore-token) appstoreToken = " $2 " ; shift 2; ;
2018-06-05 19:00:59 -07:00
--backup-dir) backupDir = " $2 " ; shift 2; ;
2018-05-31 22:55:31 -07:00
--) break; ;
*) echo " Unknown option $1 " ; exit 1; ;
esac
done
echo "=> Waiting for cloudron to be ready"
wait_for_status "version" '*'
if [ [ $( get_status "webadminStatus" ) != *'"tls": true' * ] ] ; then
echo "=> Domain setup"
dnsSetupData = $( printf '{ "domain": "%s", "adminFqdn": "%s", "provider": "%s", "config": %s, "tlsConfig": { "provider": "%s" } }' " ${ domain } " " my. ${ domain } " " ${ domainProvider } " " $domainConfigJson " " ${ domainTlsProvider } " )
if ! $curl -X POST -H "Content-Type: application/json" -d " ${ dnsSetupData } " http://localhost:3000/api/v1/cloudron/dns_setup; then
echo "DNS Setup Failed"
exit 1
fi
wait_for_status "webadminStatus" '*"tls": true*'
else
echo "=> Skipping Domain setup"
fi
activationData = $( printf '{"username": "%s", "password":"%s", "email": "%s" }' " ${ adminUsername } " " ${ adminPassword } " " ${ adminEmail } " )
if [ [ $( get_status "activated" ) = = "false" ] ] ; then
echo "=> Activating"
if ! activationResult = $( $curl -X POST -H "Content-Type: application/json" -d " ${ activationData } " http://localhost:3000/api/v1/cloudron/activate) ; then
echo " Failed to activate with ${ activationData } : ${ activationResult } "
exit 1
fi
wait_for_status "activated" "true"
else
2018-06-01 00:12:19 -07:00
echo "=> Skipping Activation"
fi
echo "=> Getting token"
if ! activationResult = $( $curl -X POST -H "Content-Type: application/json" -d " ${ activationData } " http://localhost:3000/api/v1/developer/login) ; then
echo " Failed to login with ${ activationData } : ${ activationResult } "
exit 1
2018-05-31 22:55:31 -07:00
fi
accessToken = $( echo " ${ activationResult } " | python3 -c 'import sys, json; print(json.load(sys.stdin)[sys.argv[1]])' "accessToken" )
echo " => Setting up App Store account with accessToken ${ accessToken } "
appstoreData = $( printf '{"userId":"%s", "token":"%s" }' " ${ appstoreUser } " " ${ appstoreToken } " )
if ! appstoreResult = $( $curl -X POST -H "Content-Type: application/json" -d " ${ appstoreData } " " http://localhost:3000/api/v1/settings/appstore_config?access_token= ${ accessToken } " ) ; then
echo " Failed to setup Appstore account with ${ appstoreData } : ${ appstoreResult } "
exit 1
fi
2018-06-05 19:00:59 -07:00
echo " => Setting up Backup Directory with accessToken ${ accessToken } "
2018-06-07 11:38:07 -07:00
backupData = $( printf '{"provider":"filesystem", "key":"", "backupFolder":"%s", "retentionSecs": 864000, "format": "tgz", "externalDisk": true}' " ${ backupDir } " )
2018-06-05 19:00:59 -07:00
chown -R yellowtent:yellowtent " ${ backupDir } "
if ! backupResult = $( $curl -X POST -H "Content-Type: application/json" -d " ${ backupData } " " http://localhost:3000/api/v1/settings/backup_config?access_token= ${ accessToken } " ) ; then
echo " Failed to setup backup configuration with ${ backupDir } : ${ backupResult } "
exit 1
fi
2018-06-01 00:12:19 -07:00
echo "=> Done!"