wwforonce commited on
Commit
6fe053e
·
1 Parent(s): 029ea4c

add gemini auth files

Browse files
.github/workflows/next.yml CHANGED
@@ -41,7 +41,7 @@ jobs:
41
  echo "colorFrom: purple" >> temp_readme.md
42
  echo "colorTo: gray" >> temp_readme.md
43
  echo "sdk: docker" >> temp_readme.md
44
- echo "app_port: 8080" >> temp_readme.md
45
  echo "---" >> temp_readme.md
46
  cat README.md >> temp_readme.md
47
  mv temp_readme.md README.md
 
41
  echo "colorFrom: purple" >> temp_readme.md
42
  echo "colorTo: gray" >> temp_readme.md
43
  echo "sdk: docker" >> temp_readme.md
44
+ echo "app_port: 7860" >> temp_readme.md
45
  echo "---" >> temp_readme.md
46
  cat README.md >> temp_readme.md
47
  mv temp_readme.md README.md
.gitignore ADDED
@@ -0,0 +1,2 @@
 
 
 
1
+ .dev.var*
2
+ !.gitignore
Caddyfile CHANGED
@@ -1,18 +1,23 @@
1
  :7860 {
 
 
2
  handle_path /8085/* {
3
  reverse_proxy localhost:8085
4
  }
5
- # https://github.com/justlovemaki/AIClient-2-API
6
  handle_path /apiv1/* {
7
  reverse_proxy localhost:3000
8
  }
9
- # https://github.com/waxz/gemini-cli-openai
 
10
  handle_path /apiv2/* {
11
- reverse_proxy localhost:8787
12
  }
 
 
13
  handle_path /apiv3/* {
14
- reverse_proxy localhost:8000
15
  }
 
16
  # openweb-ui
17
  reverse_proxy localhost:8080
18
 
 
1
  :7860 {
2
+
3
+ # https://github.com/justlovemaki/AIClient-2-API
4
  handle_path /8085/* {
5
  reverse_proxy localhost:8085
6
  }
 
7
  handle_path /apiv1/* {
8
  reverse_proxy localhost:3000
9
  }
10
+
11
+ # gemini-balance
12
  handle_path /apiv2/* {
13
+ reverse_proxy localhost:8000
14
  }
15
+
16
+ # https://github.com/waxz/gemini-cli-openai
17
  handle_path /apiv3/* {
18
+ reverse_proxy localhost:8881
19
  }
20
+
21
  # openweb-ui
22
  reverse_proxy localhost:8080
23
 
Dockerfile CHANGED
@@ -45,6 +45,8 @@ WORKDIR /app
45
 
46
  COPY ./add_bash_util.sh /add_bash_util.sh
47
  COPY ./Caddyfile /Caddyfile
 
 
48
  # Expose ports
49
 
50
  EXPOSE 7860
 
45
 
46
  COPY ./add_bash_util.sh /add_bash_util.sh
47
  COPY ./Caddyfile /Caddyfile
48
+ COPY ./crypt.sh /crypt.sh
49
+ COPY ./gemini /gemini
50
  # Expose ports
51
 
52
  EXPOSE 7860
crypt.sh ADDED
@@ -0,0 +1,290 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ #!/bin/bash
2
+
3
+ # Enhanced file encryption/decryption script with multiple password input methods
4
+ # Author: Claude
5
+ # Date: July 9, 2025
6
+
7
+ set -e # Exit immediately if a command exits with non-zero status
8
+
9
+ # ANSI color codes for better readability
10
+ RED='\033[0;31m'
11
+ GREEN='\033[0;32m'
12
+ YELLOW='\033[0;33m'
13
+ BLUE='\033[0;34m'
14
+ NC='\033[0m' # No Color
15
+
16
+ # Function to display usage information
17
+ usage() {
18
+ echo -e "${BLUE}File Encryption/Decryption Utility${NC}"
19
+ echo
20
+ echo "Usage: $0 <encrypt|decrypt> <filename> [options]"
21
+ echo
22
+ echo "Required arguments:"
23
+ echo " encrypt|decrypt Action to perform"
24
+ echo " filename Path to the file to process"
25
+ echo
26
+ echo "Password options (one method required):"
27
+ echo " -i Interactive mode (prompt for password)"
28
+ echo " -p <password> Direct password input (least secure)"
29
+ echo " -e <env_var> Use password from environment variable"
30
+ echo " -f <password_file> Read password from file"
31
+ echo
32
+ echo "Other options:"
33
+ echo " -o <output_file> Specify output filename"
34
+ echo " -a <algorithm> Encryption algorithm (default: aes-256-cbc)"
35
+ echo " -h Display this help message"
36
+ echo
37
+ echo -e "${YELLOW}Security Notice:${NC}"
38
+ echo " - Interactive mode (-i) is the most secure option"
39
+ echo " - Direct password (-p) is visible in process listings and command history"
40
+ echo " - Environment variables (-e) are more secure than direct input"
41
+ echo " - Password files (-f) should be stored securely and deleted after use"
42
+ echo
43
+ exit 1
44
+ }
45
+
46
+ # Function to log messages
47
+ log_info() {
48
+ echo -e "${GREEN}[INFO]${NC} $1"
49
+ }
50
+
51
+ log_warn() {
52
+ echo -e "${YELLOW}[WARNING]${NC} $1"
53
+ }
54
+
55
+ log_error() {
56
+ echo -e "${RED}[ERROR]${NC} $1"
57
+ }
58
+
59
+ # Function to securely delete a file
60
+ secure_delete() {
61
+ local file="$1"
62
+ if command -v shred &> /dev/null; then
63
+ shred -u "$file"
64
+ elif command -v srm &> /dev/null; then
65
+ srm "$file"
66
+ else
67
+ rm "$file"
68
+ log_warn "Secure deletion tools (shred/srm) not found. Used regular rm instead."
69
+ fi
70
+ }
71
+
72
+ # Default values
73
+ ACTION=""
74
+ INPUT_FILE=""
75
+ OUTPUT_FILE=""
76
+ ALGORITHM="aes-256-cbc"
77
+ PASS_OPTION=""
78
+ TEMP_PWD_FILE=""
79
+ INTERACTIVE=0
80
+
81
+ # Parse arguments
82
+ if [ $# -lt 2 ]; then
83
+ usage
84
+ fi
85
+
86
+ ACTION="$1"
87
+ INPUT_FILE="$2"
88
+ shift 2
89
+
90
+ # Check if action is valid
91
+ if [[ "$ACTION" != "encrypt" && "$ACTION" != "decrypt" ]]; then
92
+ log_error "Invalid action: $ACTION. Must be 'encrypt' or 'decrypt'."
93
+ usage
94
+ fi
95
+
96
+ # Check if the input file exists
97
+ if [ ! -f "$INPUT_FILE" ]; then
98
+ log_error "File not found: $INPUT_FILE"
99
+ exit 1
100
+ fi
101
+
102
+ # Process remaining arguments
103
+ while [ $# -gt 0 ]; do
104
+ case "$1" in
105
+ -o)
106
+ if [ $# -lt 2 ]; then
107
+ log_error "Missing output filename after -o"
108
+ usage
109
+ fi
110
+ OUTPUT_FILE="$2"
111
+ shift 2
112
+ ;;
113
+ -a)
114
+ if [ $# -lt 2 ]; then
115
+ log_error "Missing algorithm after -a"
116
+ usage
117
+ fi
118
+ ALGORITHM="$2"
119
+ shift 2
120
+ ;;
121
+ -i)
122
+ INTERACTIVE=1
123
+ shift
124
+ ;;
125
+ -p)
126
+ if [ $# -lt 2 ]; then
127
+ log_error "Missing password after -p"
128
+ usage
129
+ fi
130
+ if [ $INTERACTIVE -eq 1 ] || [ -n "$PASS_OPTION" ]; then
131
+ log_error "Only one password method can be used at a time."
132
+ usage
133
+ fi
134
+ log_warn "Using password on command line is insecure!"
135
+ PASS_OPTION="-pass pass:$2"
136
+ shift 2
137
+ ;;
138
+ -e)
139
+ if [ $# -lt 2 ]; then
140
+ log_error "Missing environment variable name after -e"
141
+ usage
142
+ fi
143
+ if [ $INTERACTIVE -eq 1 ] || [ -n "$PASS_OPTION" ]; then
144
+ log_error "Only one password method can be used at a time."
145
+ usage
146
+ fi
147
+ ENV_VAR_NAME="$2"
148
+ if [ -z "${!ENV_VAR_NAME}" ]; then
149
+ log_error "Environment variable $ENV_VAR_NAME is not set or empty"
150
+ exit 1
151
+ fi
152
+ PASS_OPTION="-pass env:$ENV_VAR_NAME"
153
+ shift 2
154
+ ;;
155
+ -f)
156
+ if [ $# -lt 2 ]; then
157
+ log_error "Missing password file after -f"
158
+ usage
159
+ fi
160
+ if [ $INTERACTIVE -eq 1 ] || [ -n "$PASS_OPTION" ]; then
161
+ log_error "Only one password method can be used at a time."
162
+ usage
163
+ fi
164
+ PASSWORD_FILE="$2"
165
+ if [ ! -f "$PASSWORD_FILE" ]; then
166
+ log_error "Password file not found: $PASSWORD_FILE"
167
+ exit 1
168
+ fi
169
+ PASS_OPTION="-pass file:$PASSWORD_FILE"
170
+ shift 2
171
+ ;;
172
+ -h)
173
+ usage
174
+ ;;
175
+ *)
176
+ log_error "Unknown option: $1"
177
+ usage
178
+ ;;
179
+ esac
180
+ done
181
+
182
+ # Determine the output filename if not specified
183
+ if [ -z "$OUTPUT_FILE" ]; then
184
+ case "$ACTION" in
185
+ encrypt)
186
+ OUTPUT_FILE="${INPUT_FILE}.enc"
187
+ ;;
188
+ decrypt)
189
+ OUTPUT_FILE="${INPUT_FILE%.enc}"
190
+ # If removing .enc doesn't change the filename, append .decrypted
191
+ if [ "$OUTPUT_FILE" = "$INPUT_FILE" ]; then
192
+ OUTPUT_FILE="${INPUT_FILE}.decrypted"
193
+ fi
194
+ ;;
195
+ esac
196
+ fi
197
+
198
+ # Check if output file already exists
199
+ if [ -f "$OUTPUT_FILE" ]; then
200
+ read -p "Output file already exists. Overwrite? (y/n): " -n 1 -r
201
+ echo
202
+ if [[ ! $REPLY =~ ^[Yy]$ ]]; then
203
+ log_info "Operation cancelled."
204
+ exit 0
205
+ fi
206
+ fi
207
+
208
+ # Interactive mode (takes precedence if no other method was specified)
209
+ if [ $INTERACTIVE -eq 1 ] || [ -z "$PASS_OPTION" ]; then
210
+ # Create a temporary file for the password
211
+ TEMP_PWD_FILE=$(mktemp)
212
+ chmod 600 "$TEMP_PWD_FILE" # Secure permissions
213
+
214
+ # Get password securely
215
+ if [ "$ACTION" = "encrypt" ]; then
216
+ read -s -p "Enter password for encryption: " PASSWORD
217
+ echo
218
+ read -s -p "Confirm password: " PASSWORD_CONFIRM
219
+ echo
220
+
221
+ if [ "$PASSWORD" != "$PASSWORD_CONFIRM" ]; then
222
+ secure_delete "$TEMP_PWD_FILE"
223
+ log_error "Passwords do not match."
224
+ exit 1
225
+ fi
226
+ else
227
+ read -s -p "Enter password for decryption: " PASSWORD
228
+ echo
229
+ fi
230
+
231
+ echo "$PASSWORD" > "$TEMP_PWD_FILE"
232
+ PASS_OPTION="-pass file:$TEMP_PWD_FILE"
233
+ fi
234
+
235
+ # Validate that we have a password method
236
+ if [ -z "$PASS_OPTION" ]; then
237
+ log_error "No password method specified."
238
+ usage
239
+ fi
240
+
241
+ # Perform the requested action
242
+ log_info "Processing file: $INPUT_FILE → $OUTPUT_FILE"
243
+ log_info "Using algorithm: $ALGORITHM"
244
+
245
+ # For OpenSSL 1.1.1 and newer, add pbkdf2 for better security
246
+ OPENSSL_VERSION=$(openssl version | awk '{print $2}')
247
+ PBKDF_OPTION=""
248
+ if [[ "$OPENSSL_VERSION" > "1.1.0" ]]; then
249
+ PBKDF_OPTION="-pbkdf2"
250
+ fi
251
+
252
+ if [ "$ACTION" = "encrypt" ]; then
253
+ # Attempt encryption
254
+ if openssl enc -base64 -$ALGORITHM -salt -in "$INPUT_FILE" -out "$OUTPUT_FILE" $PBKDF_OPTION $PASS_OPTION; then
255
+ log_info "File encrypted successfully!"
256
+ else
257
+ log_error "Encryption failed!"
258
+ [ -f "$OUTPUT_FILE" ] && rm -f "$OUTPUT_FILE"
259
+ [ -n "$TEMP_PWD_FILE" ] && secure_delete "$TEMP_PWD_FILE"
260
+ exit 1
261
+ fi
262
+ else
263
+ # Attempt decryption
264
+ if openssl enc -base64 -d -$ALGORITHM -salt -in "$INPUT_FILE" -out "$OUTPUT_FILE" $PBKDF_OPTION $PASS_OPTION; then
265
+ log_info "File decrypted successfully!"
266
+ else
267
+ log_error "Decryption failed! This could be due to an incorrect password or corrupted file."
268
+ [ -f "$OUTPUT_FILE" ] && rm -f "$OUTPUT_FILE"
269
+ [ -n "$TEMP_PWD_FILE" ] && secure_delete "$TEMP_PWD_FILE"
270
+ exit 1
271
+ fi
272
+ fi
273
+
274
+ # Clean up temporary password file if used
275
+ if [ -n "$TEMP_PWD_FILE" ]; then
276
+ secure_delete "$TEMP_PWD_FILE"
277
+ fi
278
+
279
+ # Verify the output file exists
280
+ if [ -f "$OUTPUT_FILE" ]; then
281
+ log_info "Output written to: $OUTPUT_FILE"
282
+ # Show file details
283
+ log_info "File details:"
284
+ ls -lh "$OUTPUT_FILE" | awk '{print " Size: " $5 " Created: " $6 " " $7 " " $8}'
285
+ else
286
+ log_error "Failed to create output file!"
287
+ exit 1
288
+ fi
289
+
290
+ exit 0
gemini/enc.dev.var.j ADDED
@@ -0,0 +1,39 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ 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
39
+ pplGehkPJOBTmPhzO3bcOQ==
gemini/enc.dev.var.l ADDED
@@ -0,0 +1,39 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ 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
gemini/enc.dev.var.w ADDED
@@ -0,0 +1,38 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ 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
gemini/enc.dev.var.x ADDED
@@ -0,0 +1,38 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ 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
start_with_sync.sh CHANGED
@@ -257,9 +257,21 @@ GEMINI_PROJECT_ID=${GEMINI_PROJECT_ID}
257
  OPENAI_API_KEY=${REQUIRED_API_KEY}
258
  EOF
259
 
 
 
 
 
 
 
 
 
 
260
  cd /tmp/Gemini-CLI-2-API && npm install && node src/api-server.js &
261
  cd /tmp/gemini-balance && uvicorn app.main:app --host 0.0.0.0 --port 8000 --reload &
262
- cd /tmp/gemini-cli-openai && npm i && npm run dev &
 
 
 
263
  /tmp/caddy/caddy run --config /Caddyfile &
264
  MAIN_PID=$!
265
 
 
257
  OPENAI_API_KEY=${REQUIRED_API_KEY}
258
  EOF
259
 
260
+
261
+
262
+ /crypt.sh decrypt /gemini/enc.dev.var.x -e GEMINI_AUTH_ENC_PASS -o /tmp/gemini-cli-openai/.dev.var.x
263
+ /crypt.sh decrypt /gemini/enc.dev.var.j -e GEMINI_AUTH_ENC_PASS -o /tmp/gemini-cli-openai/.dev.var.j
264
+ /crypt.sh decrypt /gemini/enc.dev.var.w -e GEMINI_AUTH_ENC_PASS -o /tmp/gemini-cli-openai/.dev.var.w
265
+ /crypt.sh decrypt /gemini/enc.dev.var.l -e GEMINI_AUTH_ENC_PASS -o /tmp/gemini-cli-openai/.dev.var.l
266
+
267
+
268
+
269
  cd /tmp/Gemini-CLI-2-API && npm install && node src/api-server.js &
270
  cd /tmp/gemini-balance && uvicorn app.main:app --host 0.0.0.0 --port 8000 --reload &
271
+ cd /tmp/gemini-cli-openai && npm i && npx wrangler dev --port 8881 --host 0.0.0.0 --env x &
272
+ # cd /tmp/gemini-cli-openai && npm i && npx wrangler dev --port 8882 --host 0.0.0.0 --env j &
273
+ # cd /tmp/gemini-cli-openai && npm i && npx wrangler dev --port 8883 --host 0.0.0.0 --env w &
274
+ # cd /tmp/gemini-cli-openai && npm i && npx wrangler dev --port 8884 --host 0.0.0.0 --env l &
275
  /tmp/caddy/caddy run --config /Caddyfile &
276
  MAIN_PID=$!
277