|
1 | 1 | #!/bin/bash |
2 | 2 | cd "$(dirname "$0")" || exit |
3 | 3 |
|
| 4 | +# Color escape sequences |
| 5 | +RED='\033[0;31m' |
| 6 | +GREEN='\033[0;32m' |
| 7 | +NC='\033[0m' # No Color |
| 8 | + |
| 9 | +# Check if we are running in a terminal that supports colors |
| 10 | +if [ -t 1 ]; then |
| 11 | + # Use colors |
| 12 | + RED=$(printf '\033[31m') |
| 13 | + GREEN=$(printf '\033[32m') |
| 14 | + NC=$(printf '\033[0m') |
| 15 | +fi |
| 16 | + |
| 17 | +# Check if a string matches the "sk-" key pattern |
4 | 18 | is_valid_sk_key() { |
5 | 19 | local api_key=$1 |
6 | 20 | local pattern="^sk-[a-zA-Z0-9]{48}$" |
7 | 21 | [[ $api_key =~ $pattern ]] && return 0 || return 1 |
8 | 22 | } |
9 | 23 |
|
10 | | -echo -n "Enter your OpenAI Key (eg: sk...) or press enter to continue with no key: " |
11 | | -read OPENAI_API_KEY |
| 24 | +# Set value for NEXT_PUBLIC_WEB_SEARCH_ENABLED |
| 25 | +select_web_search_enabled() { |
| 26 | + PS3="${GREEN}Do you want to enable web search?${NC} " |
| 27 | + options=("true" "false") |
| 28 | + select opt in "${options[@]}"; do |
| 29 | + case $opt in |
| 30 | + "true") |
| 31 | + NEXT_PUBLIC_WEB_SEARCH_ENABLED=true |
| 32 | + read_variable "${GREEN}Enter your SERP API Key (required):${NC} " "^.+$" "SERP_API_KEY" |
| 33 | + break |
| 34 | + ;; |
| 35 | + "false") |
| 36 | + NEXT_PUBLIC_WEB_SEARCH_ENABLED=false |
| 37 | + break |
| 38 | + ;; |
| 39 | + *) echo "${RED}Please enter a valid option.${NC}" ;; |
| 40 | + esac |
| 41 | + done |
| 42 | +} |
| 43 | + |
| 44 | +# Ask for user input and validate variable values |
| 45 | +read_variable() { |
| 46 | + local prompt="$1" |
| 47 | + local pattern="$2" |
| 48 | + local var_name="$3" |
| 49 | + local var_val="" |
| 50 | + while true; do |
| 51 | + read -p "$prompt" var_val |
| 52 | + if [[ -z "$var_val" ]]; then |
| 53 | + echo -e "${RED}Error: Please enter a valid value for $var_name.${NC}" |
| 54 | + elif [[ ! $var_val =~ $pattern ]]; then |
| 55 | + echo -e "${RED}Error: Invalid format for $var_name.${NC}" |
| 56 | + else |
| 57 | + eval "$var_name=$var_val" |
| 58 | + echo -e "${GREEN}$var_name set. ✔${NC}" |
| 59 | + break |
| 60 | + fi |
| 61 | + done |
| 62 | +} |
12 | 63 |
|
13 | | -if is_valid_sk_key $OPENAI_API_KEY || [ -z "$OPENAI_API_KEY" ]; then |
14 | | - echo "Valid API key" |
15 | | -else |
16 | | - echo "Invalid API key. Please ensure that you have billing set up on your OpenAI account" |
17 | | - exit |
18 | | -fi |
| 64 | +# Get user input for OPENAI_API_KEY |
| 65 | +read_variable "${GREEN}Enter your OpenAI API Key (required):${NC} " "^sk-[a-zA-Z0-9]{48}$" "OPENAI_API_KEY" |
19 | 66 |
|
20 | | -echo -n "Enable web search (true/false):" |
21 | | -read NEXT_PUBLIC_WEB_SEARCH_ENABLED |
| 67 | +# Get user input for OPENAI_API_KEY |
| 68 | +read_variable "${GREEN}Enter your Guest Key (required):${NC} " "^.+$" "NEXT_PUBLIC_GUEST_KEY" |
22 | 69 |
|
23 | | -echo -n "Enter your serp api key to use web search :" |
24 | | -read SERP_API_KEY |
| 70 | +# Get user input for NEXT_PUBLIC_WEB_SEARCH_ENABLED |
| 71 | +select_web_search_enabled |
| 72 | + |
| 73 | +echo -e "${GREEN}All required variables set. ✔${NC}" |
25 | 74 |
|
26 | 75 | NEXTAUTH_SECRET=$(openssl rand -base64 32) |
27 | 76 |
|
28 | | -ENV="NODE_ENV=development\n\ |
29 | | -NEXTAUTH_SECRET=$NEXTAUTH_SECRET\n\ |
| 77 | +ENV="NEXTAUTH_SECRET=$NEXTAUTH_SECRET\n\ |
30 | 78 | NEXTAUTH_URL=http://localhost:3000\n\ |
31 | 79 | OPENAI_API_KEY=$OPENAI_API_KEY\n\ |
32 | 80 | DATABASE_URL=file:../db/db.sqlite\n\ |
| 81 | +NEXT_PUBLIC_GUEST_KEY=$NEXT_PUBLIC_GUEST_KEY\n\ |
33 | 82 | SERP_API_KEY=$SERP_API_KEY\n\ |
34 | 83 | NEXT_PUBLIC_WEB_SEARCH_ENABLED=$NEXT_PUBLIC_WEB_SEARCH_ENABLED\n" |
35 | 84 |
|
| 85 | + |
| 86 | + |
| 87 | + |
36 | 88 | printf $ENV > .env |
37 | | -./prisma/useSqlite.sh |
38 | | -npm install |
39 | | -npm run dev |
| 89 | + |
| 90 | +if [ "$1" = "--docker-compose-local" ]; then |
| 91 | + docker-compose -f docker-compose-local.yml up -d --remove-orphans |
| 92 | +elif [ "$1" = "--docker-compose" ]; then |
| 93 | + docker-compose up -d --remove-orphans |
| 94 | +else |
| 95 | + ./prisma/useSqlite.sh |
| 96 | + npm install |
| 97 | + npm run dev |
| 98 | +fi |
0 commit comments