#! /usr/bin/env bash # Function to generate passwords # function generate_password { # base64 alphabet is alphanumeric characters and "+", "/", "=" # https://en.wikipedia.org/wiki/Base64#Base64_table_from_RFC_4648 # we could delete them 'tr -d "+/="', but that would randomly shorten the string echo $(openssl rand -base64 32 | tr "/" "_" ); } # This script is used to create a new environment for the project. # ENV_FILE_DOCKER=./srcs/.env ENV_FILE_NESTJS=./srcs/requirements/nestjs/api_back/.env # Check for existing .env if [ -f "$ENV_FILE_DOCKER" ] && [ -f "$ENV_FILE_NESTJS" ]; then echo "The file $ENV_FILE_DOCKER and $ENV_FILE_NESTJS already exists. Do you want to overwrite them ? (y/n)" OVERWRITE="" # Ask to overwrite the .env files while [ "$OVERWRITE" != "y" ] && [ "$OVERWRITE" != "n" ]; do read -p "Enter your choice : " OVERWRITE done if [ "$OVERWRITE" = "y" ]; then rm "$ENV_FILE_DOCKER" && rm "$ENV_FILE_NESTJS" docker rmi -f postgres else echo "The file $ENV_FILE_DOCKER and $ENV_FILE_NESTJS will not be overwritten. The script will exit." exit 0 fi fi # Create a new environment for docker # echo "Creating a new environment for docker" NODE_ENV="" # Ask if dev or prod environment while [ "$NODE_ENV" != "1" ] && [ "$NODE_ENV" != "2" ]; do read -p "Enter the env configuration for nestjs : \"1\" for development OR \"2\" for production : " NODE_ENV done if [ "$NODE_ENV" = "1" ]; then echo "NODE_ENV=development" > "$ENV_FILE_DOCKER" else echo "NODE_ENV=production" > "$ENV_FILE_DOCKER" fi # Env variables read -p "Enter the name of the host like \"localhost\" : " PROJECT_HOST echo "WEBSITE_HOST=$PROJECT_HOST" >> "$ENV_FILE_DOCKER" echo "WEBSITE_PORT=8080" >> "$ENV_FILE_DOCKER" echo "POSTGRES_USER=postgres" >> "$ENV_FILE_DOCKER" echo "#if change postgres pswd, do make destroy" >> "$ENV_FILE_DOCKER" echo "POSTGRES_PASSWORD=$(generate_password)" >> "$ENV_FILE_DOCKER" echo "POSTGRES_DB=transcendance_db" >> "$ENV_FILE_DOCKER" echo "POSTGRES_HOST=postgresql" >> "$ENV_FILE_DOCKER" echo "POSTGRES_PORT=5432" >> "$ENV_FILE_DOCKER" echo "REDIS_HOST=redis" >> "$ENV_FILE_DOCKER" echo "REDIS_PORT=6379" >> "$ENV_FILE_DOCKER" echo "REDIS_PASSWORD=$(generate_password)" >> "$ENV_FILE_DOCKER" # Create a new environment for nestjs # echo "Creating a new environment for nestjs" echo "NODE_ENV=\$NODE_ENV" > "$ENV_FILE_NESTJS" echo "WEBSITE_HOST=\$WEBSITE_HOST" >> "$ENV_FILE_NESTJS" echo "WEBSITE_PORT=\$WEBSITE_PORT" >> "$ENV_FILE_NESTJS" echo "POSTGRES_USER=\$POSTGRES_USER" >> "$ENV_FILE_NESTJS" echo "POSTGRES_PASSWORD=\$POSTGRES_PASSWORD" >> "$ENV_FILE_NESTJS" echo "POSTGRES_DB=\$POSTGRES_DB" >> "$ENV_FILE_NESTJS" echo "POSTGRES_HOST=\$POSTGRES_HOST" >> "$ENV_FILE_NESTJS" echo "POSTGRES_PORT=\$POSTGRES_PORT" >> "$ENV_FILE_NESTJS" # Connection to 42 echo "In the next steps, we'll need to enter the client secret and client id of the 42 api" read -p "Enter the client id of the 42 api : " CLIENT_ID echo "FORTYTWO_CLIENT_ID=$CLIENT_ID" >> "$ENV_FILE_NESTJS" read -p "Enter the client secret of the 42 api : " CLIENT_SECRET echo "FORTYTWO_CLIENT_SECRET=$CLIENT_SECRET" >> "$ENV_FILE_NESTJS" FT_CALLBACK="http://\$WEBSITE_HOST:\$WEBSITE_PORT/api/v2/auth/redirect" echo "FORTYTWO_CALLBACK_URL=$FT_CALLBACK" >> "$ENV_FILE_NESTJS" # Other configs echo "COOKIE_SECRET=$(generate_password)" >> "$ENV_FILE_NESTJS" echo "PORT=3000" >> "$ENV_FILE_NESTJS" echo "TWO_FACTOR_AUTHENTICATION_APP_NAME=Transcendance" >> "$ENV_FILE_NESTJS" echo "TICKET_FOR_PLAYING_GAME_SECRET=$(generate_password)" >> "$ENV_FILE_NESTJS" # it's finished ! # echo "The environment has been created successfully. You can now wait for the docker to build the project."