| 
					
				 | 
			
			
				@@ -38,56 +38,67 @@ handleServices() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     fi 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+dockerCommand() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    validCommands=(start stop restart build ps) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    if [[ ${validCommands[*]} =~ (^|[[:space:]])"$2"($|[[:space:]]) ]]; then 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        servicesString=$(handleServices "${@:3}") 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if [[ ${servicesString:0:1} == 1 ]]; then 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            if [[ ${servicesString:2:4} == "all" ]]; then 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                servicesString="" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            else 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                servicesString=${servicesString:2} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            fi 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            if [[ ${2} == "stop" || ${2} == "restart" ]]; then 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                # shellcheck disable=SC2086 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                docker-compose stop ${servicesString} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            fi 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            if [[ ${2} == "start" || ${2} == "restart" ]]; then 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                # shellcheck disable=SC2086 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                docker-compose up -d ${servicesString} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            fi 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            if [[ ${2} == "build" || ${2} == "ps" ]]; then 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                # shellcheck disable=SC2086 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                docker-compose "${2}" ${servicesString} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            fi 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        else 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            echo -e "${RED}${servicesString:2}\n${YELLOW}Usage: ${1} restart [backend, frontend, mongo, redis]${NC}" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        fi 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    else 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        echo -e "${RED}Error: Invalid dockerCommand input${NC}" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    fi 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 if [[ -x "$(command -v docker)" && -x "$(command -v docker-compose)" ]]; then 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     case $1 in 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     start) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         echo -e "${CYAN}Musare | Start Services${NC}" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        servicesString=$(handleServices "${@:2}") 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        if [[ ${servicesString:0:1} == 1 && ${servicesString:2:4} == "all" ]]; then 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            docker-compose up -d 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        elif [[ ${servicesString:0:1} == 1 ]]; then 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            docker-compose up -d ${servicesString:2} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        else 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            echo -e "${RED}${servicesString:2}\n${YELLOW}Usage: $(basename "$0") start [backend, frontend, mongo, redis]${NC}" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        fi 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        # shellcheck disable=SC2068 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        dockerCommand "$(basename "$0")" start ${@:2} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         ;; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     stop) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         echo -e "${CYAN}Musare | Stop Services${NC}" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        servicesString=$(handleServices "${@:2}") 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        if [[ ${servicesString:0:1} == 1 && ${servicesString:2:4} == "all" ]]; then 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            docker-compose stop 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        elif [[ ${servicesString:0:1} == 1 ]]; then 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            docker-compose stop ${servicesString:2} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        else 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            echo -e "${RED}${servicesString:2}\n${YELLOW}Usage: $(basename "$0") stop [backend, frontend, mongo, redis]${NC}" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        fi 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        # shellcheck disable=SC2068 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        dockerCommand "$(basename "$0")" stop ${@:2} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         ;; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     restart) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         echo -e "${CYAN}Musare | Restart Services${NC}" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        servicesString=$(handleServices "${@:2}") 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        if [[ ${servicesString:0:1} == 1 && ${servicesString:2:4} == "all" ]]; then 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            docker-compose stop 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            docker-compose up -d 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        elif [[ ${servicesString:0:1} == 1 ]]; then 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            docker-compose stop ${servicesString:2} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            docker-compose up -d ${servicesString:2} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        else 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            echo -e "${RED}${servicesString:2}\n${YELLOW}Usage: $(basename "$0") restart [backend, frontend, mongo, redis]${NC}" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        fi 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        # shellcheck disable=SC2068 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        dockerCommand "$(basename "$0")" restart ${@:2} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         ;; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     build) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         echo -e "${CYAN}Musare | Build Services${NC}" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        servicesString=$(handleServices "${@:2}") 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        if [[ ${servicesString:0:1} == 1 && ${servicesString:2:4} == "all" ]]; then 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            docker-compose build 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        elif [[ ${servicesString:0:1} == 1 ]]; then 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            docker-compose build ${servicesString:2} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        else 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            echo -e "${RED}${servicesString:2}\n${YELLOW}Usage: $(basename "$0") build [backend, frontend, mongo, redis]${NC}" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        fi 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        # shellcheck disable=SC2068 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        dockerCommand "$(basename "$0")" build ${@:2} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        ;; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    status) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        echo -e "${CYAN}Musare | Service Status${NC}" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        # shellcheck disable=SC2068 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        dockerCommand "$(basename "$0")" ps ${@:2} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         ;; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     reset) 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -109,10 +120,12 @@ if [[ -x "$(command -v docker)" && -x "$(command -v docker-compose)" ]]; then 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 echo -e "${RED}Cancelled reset${NC}" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             fi 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         elif [[ ${servicesString:0:1} == 1 ]]; then 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            echo -e "${GREEN}Are you sure you want to reset all data for $(echo ${servicesString:2} | tr ' ' ',')? ${YELLOW}[y,n]: ${NC}" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            echo -e "${GREEN}Are you sure you want to reset all data for $(echo "${servicesString:2}" | tr ' ' ',')? ${YELLOW}[y,n]: ${NC}" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             read -r confirm 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             if [[ "${confirm}" == y* ]]; then 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                # shellcheck disable=SC2086 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 docker-compose stop ${servicesString:2} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                # shellcheck disable=SC2086 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 docker-compose rm -v --force ${servicesString:2} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 if [[ "${servicesString:2}" == *redis* && -d ".redis" ]]; then 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                     rm -rf .redis 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -146,7 +159,7 @@ if [[ -x "$(command -v docker)" && -x "$(command -v docker-compose)" ]]; then 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                     echo -e "${RED}Error: Mongo offline, please start to attach.${NC}" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 else 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                     echo -e "${YELLOW}Detach with CTRL+C${NC}" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    docker-compose exec mongo mongo musare -u ${MONGO_USER_USERNAME} -p ${MONGO_USER_PASSWORD} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    docker-compose exec mongo mongo musare -u "${MONGO_USER_USERNAME}" -p "${MONGO_USER_PASSWORD}" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 fi 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             else 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 echo -e "${RED}Error: .env does not exist${NC}" 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -221,12 +234,22 @@ if [[ -x "$(command -v docker)" && -x "$(command -v docker-compose)" ]]; then 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         if [[ -f .env ]]; then 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             # shellcheck disable=SC1091 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             source .env 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            if [[ ! -d "${scriptLocation%x}/backups" ]]; then 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                echo -e "${YELLOW}Creating backup directory at ${scriptLocation%x}/backups${NC}" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                mkdir "${scriptLocation%x}/backups" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            if [[ -z "${BACKUP_LOCATION}" ]]; then 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                backupLocation="${scriptLocation%x}/backups" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            else 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                backupLocation="${BACKUP_LOCATION%/}" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            fi 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            if [[ ! -d "${backupLocation}" ]]; then 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                echo -e "${YELLOW}Creating backup directory at ${backupLocation}${NC}" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                mkdir "${backupLocation}" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            fi 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            if [[ -z "${BACKUP_NAME}" ]]; then 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                backupLocation="${backupLocation}/musare-$(date +"%Y-%m-%d-%s").dump" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            else 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                backupLocation="${backupLocation}/${BACKUP_NAME}" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             fi 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            echo -e "${YELLOW}Creating backup at ${scriptLocation%x}/backups/musare-$(date +"%Y-%m-%d-%s").dump${NC}" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            docker-compose exec -T mongo sh -c "mongodump --authenticationDatabase musare -u ${MONGO_USER_USERNAME} -p ${MONGO_USER_PASSWORD} -d musare --archive" > "${scriptLocation%x}/backups/musare-$(date +"%Y-%m-%d-%s").dump" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            echo -e "${YELLOW}Creating backup at ${backupLocation}${NC}" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            docker-compose exec -T mongo sh -c "mongodump --authenticationDatabase musare -u ${MONGO_USER_USERNAME} -p ${MONGO_USER_PASSWORD} -d musare --archive" > "${backupLocation}" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         else 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             echo -e "${RED}Error: .env does not exist${NC}" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         fi 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -299,6 +322,7 @@ if [[ -x "$(command -v docker)" && -x "$(command -v docker-compose)" ]]; then 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         echo -e "${YELLOW}start - Start services${NC}" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         echo -e "${YELLOW}stop - Stop services${NC}" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         echo -e "${YELLOW}restart - Restart services${NC}" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        echo -e "${YELLOW}status - Service status${NC}" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         echo -e "${YELLOW}logs - View logs for services${NC}" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         echo -e "${YELLOW}update - Update Musare${NC}" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         echo -e "${YELLOW}attach [backend,mongo] - Attach to backend service or mongo shell${NC}" 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -317,6 +341,7 @@ if [[ -x "$(command -v docker)" && -x "$(command -v docker-compose)" ]]; then 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         echo -e "${YELLOW}start - Start services${NC}" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         echo -e "${YELLOW}stop - Stop services${NC}" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         echo -e "${YELLOW}restart - Restart services${NC}" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        echo -e "${YELLOW}status - Service status${NC}" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         echo -e "${YELLOW}logs - View logs for services${NC}" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         echo -e "${YELLOW}update - Update Musare${NC}" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         echo -e "${YELLOW}attach [backend,mongo] - Attach to backend service or mongo shell${NC}" 
			 |