auto-gpt-web / setup-auth.sh
googlesprojectzero's picture
Upload 21 files
b3594fb verified
#!/bin/bash
# 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 DATABASE_URL
read_variable "${GREEN}Enter your database URL (required):${NC} " "^.+$" "DATABASE_URL"
# Get user input for GITHUB_CLIENT_ID
read_variable "${GREEN}Enter your Github Client ID (required):${NC} " "^.+$" "GITHUB_CLIENT_ID"
# Get user input for GITHUB_CLIENT_SECRET
read_variable "${GREEN}Enter your Github Client Secret (required):${NC} " "^.+$" "GITHUB_CLIENT_SECRET"
# Get user input for NEXT_PUBLIC_WEB_SEARCH_ENABLED
select_web_search_enabled
echo -e "${GREEN}All required variables set. ✔${NC}"
# Generate a random string for NEXTAUTH_SECRET
NEXTAUTH_SECRET=$(openssl rand -base64 32)
# Disable guest mode when auth enable
NEXT_PUBLIC_GUEST_KEY=''
# Enable auth
NEXT_PUBLIC_FF_AUTH_ENABLED=true
ENV="NEXT_PUBLIC_FF_AUTH_ENABLED=$NEXT_PUBLIC_FF_AUTH_ENABLED\n\
OPENAI_API_KEY=$OPENAI_API_KEY\n\
DATABASE_URL=${DATABASE_URL}\n\
GITHUB_CLIENT_ID=${GITHUB_CLIENT_ID}\n\
GITHUB_CLIENT_SECRET=${GITHUB_CLIENT_SECRET}\n\
NEXT_PUBLIC_GUEST_KEY=${NEXT_PUBLIC_GUEST_KEY}\n\
NEXTAUTH_SECRET=${NEXTAUTH_SECRET}\n\
SERP_API_KEY=$SERP_API_KEY\n\
NEXT_PUBLIC_WEB_SEARCH_ENABLED=$NEXT_PUBLIC_WEB_SEARCH_ENABLED\n"
printf $ENV > .env.auth
# 模型定义
modelDefinitions="generator client {
provider = \"prisma-client-js\"
}
datasource db {
provider = \"mysql\"
url = env(\"DATABASE_URL\")
relationMode = \"prisma\"
}
// Necessary for Next auth
model Account {
id String @id @default(cuid())
userId String
type String
provider String
providerAccountId String
refresh_token String? @db.Text
access_token String? @db.Text
expires_at Int?
token_type String?
scope String?
id_token String? @db.Text
session_state String?
user User @relation(fields: [userId], references: [id], onDelete: Cascade)
@@unique([provider, providerAccountId])
@@index([userId])
}
model Session {
id String @id @default(cuid())
sessionToken String @unique
userId String
expires DateTime
user User @relation(fields: [userId], references: [id], onDelete: Cascade)
@@index([userId])
}
model User {
id String @id @default(cuid())
name String?
email String? @unique
emailVerified DateTime?
image String?
role String?
subscriptionId String? @db.Text
customerId String? @db.Text
createDate DateTime @default(now())
accounts Account[]
sessions Session[]
Agent Agent[]
@@index([email])
}
model VerificationToken {
identifier String
token String @unique
expires DateTime
@@unique([identifier, token])
}
model Agent {
id String @id @default(cuid())
userId String
name String @db.Text
goal String @db.Text
deleteDate DateTime?
createDate DateTime @default(now())
user User @relation(fields: [userId], references: [id], onDelete: Cascade)
tasks AgentTask[]
@@index([userId, deleteDate, createDate])
}
model AgentTask {
id String @id @default(cuid())
taskId String?
parentTaskId String?
agentId String
type String
status String?
value String @db.Text
info String? @db.Text
sort Int
deleteDate DateTime?
createDate DateTime @default(now())
agent Agent @relation(fields: [agentId], references: [id], onDelete: Cascade)
@@index([agentId])
@@index([type])
}"
# Generate prisma schema
echo "$modelDefinitions" > prisma/schema.prisma