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