Browse Source

Fix and improve json-server integration

Offer to restrict access to API by setting HTTP Headers; use image chaosbunker/json-server (alpine)
dennisro 6 years ago
parent
commit
ce9e450d77

+ 1 - 1
data/services/jsonserver/auth.js.tmpl

@@ -1,5 +1,5 @@
 module.exports = (req, res, next) => {
-	if (req.header('${AUTH_REQ_HEADER_KEY}') != "${AUTH_REQ_HEADER_VALUE}" ) {
+	if (req.header('${GET_REQ_HEADER_KEY}') != "${GET_REQ_HEADER_VALUE}" || req.method != "GET" && req.header('${MODIFY_REQ_HEADER_KEY}') != "${MODIFY_REQ_HEADER_VALUE}" ) {
 		res.header('X-Unauthorized', 'Allyship Is A Verb, Not A Noun');
 		return res.status(401).send({ error: 'Unauthorized' });
 	} else

+ 2 - 3
data/services/jsonserver/containers.sh

@@ -5,7 +5,6 @@ jsonserver_service_dockerbunker() {
 		--network ${NETWORK} \
 		--env-file "${SERVICE_ENV}" \
 		-v ${SERVICE_NAME}-data-vol-1:${volumes[${SERVICE_NAME}-data-vol-1]} \
-		-v ${CONF_DIR}/jsonserver/db.json:/data/db.json \
-		-v ${CONF_DIR}/jsonserver/auth.js:/data/auth.js \
-	${IMAGES[service]} ${MIDDLEWARE} >/dev/null
+		-v ${CONF_DIR}/jsonserver:/json-server/data \
+	${IMAGES[service]} ${ARGUMENTS} >/dev/null
 }

+ 1 - 0
data/services/jsonserver/index.html

@@ -0,0 +1 @@
+hi there

+ 43 - 11
data/services/jsonserver/jsonserver.sh

@@ -16,8 +16,8 @@ done
 declare -A WEB_SERVICES
 declare -a containers=( "${SERVICE_NAME}-service-dockerbunker" )
 declare -a add_to_network=( "${SERVICE_NAME}-service-dockerbunker" )
-declare -A IMAGES=( [service]="clue/json-server" )
-declare -A volumes=( [${SERVICE_NAME}-data-vol-1]="/data" )
+declare -A IMAGES=( [service]="chaosbunker/json-server" )
+declare -A volumes=( [${SERVICE_NAME}-data-vol-1]="/json-server" )
 declare -a networks=( )
 
 [[ -z $1 ]] && options_menu
@@ -35,15 +35,36 @@ configure() {
 
 	set_domain
 	
-	prompt_confirm "Set Authentication Request Header?"
+	prompt_confirm "Restrict GET requests?"
 
 	if [ $? == 0 ]; then
-		MIDDLEWARE="--middlewares auth.js"
-		read -p "Authorization Request Header [key]: " -ei "X-Authorize" AUTH_REQ_HEADER_KEY
-		read -p "Authorization Request Header [value]: " -ei "I Like Turtles" AUTH_REQ_HEADER_VALUE
+		read -p "Header [key]: " -ei "X-Authorize" GET_REQ_HEADER_KEY
+		read -p "Header [value]: " -ei "I Like Turtles" GET_REQ_HEADER_VALUE
 	fi
+	
+	prompt_confirm "Restrict all other request methods with secondary header?"
+
+	if [ $? == 0 ]; then
+		read -p "Header [key]: " -ei "X-Modify" MODIFY_REQ_HEADER_KEY
+		read -p "Header [value]: " -ei "I Really Like Turtles" MODIFY_REQ_HEADER_VALUE
+	fi
+
+	prompt_confirm "Set database id property? [default: id]"
+
+	if [ $? == 0 ]; then
+		read -p ": " DB_ID_PROPERTY
+		ID=${ID}" --id ${DB_ID_PROPERTY}"
+	fi
+
+	prompt_confirm "Set custom routes?"
 
-	SUBSTITUTE=( "\${AUTH_REQ_HEADER_KEY}" "\${AUTH_REQ_HEADER_VALUE}" )
+	if [ $? == 0 ]; then
+		cp "${SERVICES_DIR}"/${SERVICE_NAME}/routes.json "${CONF_DIR}"/${SERVICE_NAME}
+
+		echo -e "\nYou can modify your routes.json in ${CONF_DIR}/${SERVICE_NAME}/\n"
+	fi
+
+	SUBSTITUTE=( "\${MODIFY_REQ_HEADER_KEY}" "\${MODIFY_REQ_HEADER_VALUE}" "\${GET_REQ_HEADER_KEY}" "\${GET_REQ_HEADER_VALUE}" )
 	
 	[[ -f "${CONF_DIR}"/jsonserver/auth.js ]] \
 		&& rm "${SERVICES_DIR}"/${SERVICE_NAME}/jsonserver/auth.js
@@ -58,7 +79,15 @@ configure() {
 	done
 	
 	[[ -f "${SERVICES_DIR}"/${SERVICE_NAME}/auth.js ]] \
-		&& mv "${SERVICES_DIR}"/${SERVICE_NAME}/auth.js "${CONF_DIR}"/jsonserver
+		&& mv "${SERVICES_DIR}"/${SERVICE_NAME}/auth.js "${CONF_DIR}"/${SERVICE_NAME}
+	
+	prompt_confirm "Remove default index.html?"
+
+	if [ $? == 0 ]; then
+		mkdir -p ${CONF_DIR}/jsonserver/public
+		cp "${SERVICES_DIR}"/${SERVICE_NAME}/index.html "${CONF_DIR}"/${SERVICE_NAME}/public
+		echo -e "\nPlace your index.html in ${CONF_DIR}/${SERVICE_NAME}/\n"
+	fi
 	
 	cat <<-EOF >> "${SERVICE_ENV}"
 	PROPER_NAME="${PROPER_NAME}"
@@ -66,9 +95,11 @@ configure() {
 	SSL_CHOICE=${SSL_CHOICE}
 	LE_EMAIL=${LE_EMAIL}
 
-	MIDDLEWARE="${MIDDLEWARE}"
-	AUTH_REQ_HEADER_KEY="${AUTH_REQ_HEADER_KEY}"
-	AUTH_REQ_HEADER_VALUE="${AUTH_REQ_HEADER_VALUE}"
+	ID="${ID}"
+	GET_REQ_HEADER_KEY="${GET_REQ_HEADER_KEY}"
+	GET_REQ_HEADER_VALUE="${GET_REQ_HEADER_VALUE}"
+	MODIFY_REQ_HEADER_KEY="${MODIFY_REQ_HEADER_KEY}"
+	MODIFY_REQ_HEADER_VALUE="${MODIFY_REQ_HEADER_VALUE}"
 
 	SERVICE_DOMAIN=${SERVICE_DOMAIN}
 	EOF
@@ -79,6 +110,7 @@ configure() {
 setup() {
 	initial_setup_routine
 
+	SUBSTITUTE=( "\${SERVICE_DOMAIN}" )
 	basic_nginx
 	
 	docker_run_all

+ 1 - 1
data/services/jsonserver/nginx/jsonserver.conf

@@ -14,7 +14,7 @@
 # Default server configuration
 #
 upstream jsonserver {
- server jsonserver-service-dockerbunker:80;
+ server jsonserver-service-dockerbunker:3000;
 }
 
 server {

+ 3 - 0
data/services/jsonserver/routes.json

@@ -0,0 +1,3 @@
+{
+	"/:resource/:id": "/:resource/:id"
+}