jsonserver.sh 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127
  1. #!/usr/bin/env bash
  2. while true;do ls | grep -q dockerbunker.sh;if [[ $? == 0 ]];then BASE_DIR=$PWD;break;else cd ../;fi;done
  3. PROPER_NAME="json-server"
  4. SERVICE_NAME="$(echo -e "${PROPER_NAME,,}" | tr -cd '[:alnum:]')"
  5. PROMPT_SSL=1
  6. safe_to_keep_volumes_when_reconfiguring=1
  7. declare -a environment=( "data/env/dockerbunker.env" "data/include/init.sh" )
  8. for env in "${environment[@]}";do
  9. [[ -f "${BASE_DIR}"/$env ]] && source "${BASE_DIR}"/$env
  10. done
  11. declare -A WEB_SERVICES
  12. declare -a containers=( "${SERVICE_NAME}-service-dockerbunker" )
  13. declare -a add_to_network=( "${SERVICE_NAME}-service-dockerbunker" )
  14. declare -A IMAGES=( [service]="chaosbunker/json-server" )
  15. declare -A volumes=( [${SERVICE_NAME}-data-vol-1]="/json-server" )
  16. declare -a networks=( )
  17. [[ -z $1 ]] && options_menu
  18. configure() {
  19. pre_configure_routine
  20. echo -e "# \e[4mjson-server Settings\e[0m"
  21. [[ ! -d "${CONF_DIR}"/jsonserver ]] && \
  22. mkdir -p "${CONF_DIR}"/jsonserver
  23. [[ ! -f "${CONF_DIR}"/jsonserver/db.json ]] \
  24. && echo -e "\nCannot find db.json in \e[3mdata/conf/jsonserver/db.json\e[0m\n" \
  25. && exit 1
  26. set_domain
  27. prompt_confirm "Restrict GET requests?"
  28. if [ $? == 0 ]; then
  29. read -p "Header [key]: " -ei "X-Authorize" GET_REQ_HEADER_KEY
  30. read -p "Header [value]: " -ei "I Like Turtles" GET_REQ_HEADER_VALUE
  31. fi
  32. prompt_confirm "Restrict all other request methods with secondary header?"
  33. if [ $? == 0 ]; then
  34. read -p "Header [key]: " -ei "X-Modify" MODIFY_REQ_HEADER_KEY
  35. read -p "Header [value]: " -ei "I Really Like Turtles" MODIFY_REQ_HEADER_VALUE
  36. fi
  37. prompt_confirm "Set database id property? [default: id]"
  38. if [ $? == 0 ]; then
  39. read -p ": " DB_ID_PROPERTY
  40. ID=${ID}" --id ${DB_ID_PROPERTY}"
  41. fi
  42. prompt_confirm "Set custom routes?"
  43. if [ $? == 0 ]; then
  44. cp "${SERVICES_DIR}"/${SERVICE_NAME}/routes.json "${CONF_DIR}"/${SERVICE_NAME}
  45. echo -e "\nYou can modify your routes.json in ${CONF_DIR}/${SERVICE_NAME}/\n"
  46. fi
  47. SUBSTITUTE=( "\${MODIFY_REQ_HEADER_KEY}" "\${MODIFY_REQ_HEADER_VALUE}" "\${GET_REQ_HEADER_KEY}" "\${GET_REQ_HEADER_VALUE}" )
  48. [[ -f "${CONF_DIR}"/jsonserver/auth.js ]] \
  49. && rm "${SERVICES_DIR}"/${SERVICE_NAME}/jsonserver/auth.js
  50. cp "${SERVICES_DIR}"/${SERVICE_NAME}/auth.js.tmpl "${SERVICES_DIR}"/${SERVICE_NAME}/auth.js
  51. for variable in "${SUBSTITUTE[@]}";do
  52. subst="\\${variable}"
  53. variable=`eval echo "$variable"`
  54. sed -i "s@${subst}@${variable}@g;" \
  55. "${SERVICES_DIR}"/${SERVICE_NAME}/auth.js
  56. done
  57. [[ -f "${SERVICES_DIR}"/${SERVICE_NAME}/auth.js ]] \
  58. && mv "${SERVICES_DIR}"/${SERVICE_NAME}/auth.js "${CONF_DIR}"/${SERVICE_NAME}
  59. prompt_confirm "Remove default index.html?"
  60. if [ $? == 0 ]; then
  61. mkdir -p ${CONF_DIR}/jsonserver/public
  62. cp "${SERVICES_DIR}"/${SERVICE_NAME}/index.html "${CONF_DIR}"/${SERVICE_NAME}/public
  63. echo -e "\nPlace your index.html in ${CONF_DIR}/${SERVICE_NAME}/\n"
  64. fi
  65. cat <<-EOF >> "${SERVICE_ENV}"
  66. PROPER_NAME="${PROPER_NAME}"
  67. SERVICE_NAME=${SERVICE_NAME}
  68. SSL_CHOICE=${SSL_CHOICE}
  69. LE_EMAIL=${LE_EMAIL}
  70. ID="${ID}"
  71. GET_REQ_HEADER_KEY="${GET_REQ_HEADER_KEY}"
  72. GET_REQ_HEADER_VALUE="${GET_REQ_HEADER_VALUE}"
  73. MODIFY_REQ_HEADER_KEY="${MODIFY_REQ_HEADER_KEY}"
  74. MODIFY_REQ_HEADER_VALUE="${MODIFY_REQ_HEADER_VALUE}"
  75. SERVICE_DOMAIN=${SERVICE_DOMAIN}
  76. EOF
  77. post_configure_routine
  78. }
  79. setup() {
  80. initial_setup_routine
  81. SUBSTITUTE=( "\${SERVICE_DOMAIN}" )
  82. basic_nginx
  83. docker_run_all
  84. post_setup_routine
  85. echo -e "\njson-server can be reached at https://${SERVICE_DOMAIN}/v1"
  86. }
  87. if [[ $1 == "letsencrypt" ]];then
  88. $1 $*
  89. else
  90. $1
  91. fi