Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
15 changes: 14 additions & 1 deletion init.ps1
Original file line number Diff line number Diff line change
Expand Up @@ -180,10 +180,23 @@ while ($true) {
}
}

# appwrite push functions --with-variables
Write-Host "Setting Up Email for OTP now ..."
Write-Host "This email will be used to send OTP verification codes to users."
$senderMail = Read-Host "Please provide sender email address (e.g., [email protected])"
$senderPassword = Read-Host "Please provide sender email app password" -AsSecureString
Comment on lines +186 to +187
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

As suggested by CodeRabbit, please add checks to ensure that the senderMail and senderPassword inputs were entered before moving forward. stay in a read loop until they are entered.

$senderPasswordPlain = [Runtime.InteropServices.Marshal]::PtrToStringAuto([Runtime.InteropServices.Marshal]::SecureStringToBSTR($senderPassword))

# Push Email credentials as env variables for functions to use
Write-Host "Pushing Email credentials as env variables..."
appwrite project create-variable --key SENDER_MAIL --value $senderMail
appwrite project create-variable --key SENDER_PASSWORD --value $senderPasswordPlain
Comment on lines +192 to +193
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🔴 Critical

🧩 Analysis chain

Verify that environment variables are created successfully.

The script doesn't check whether the appwrite project create-variable commands succeed. If these commands fail, the functions may not have access to the required credentials.

Run the following script to check if similar error handling exists elsewhere in the codebase:


🏁 Script executed:

#!/bin/bash
# Description: Check if other appwrite commands in init scripts have error handling

# Search for appwrite commands and their error handling patterns
rg -n -A2 -B2 'appwrite project create-variable' init.ps1 init.sh

Length of output: 4143


Add error handling to verify environment variable creation succeeds before continuing.

The review comment is valid. Neither init.sh nor init.ps1 implement any error checks after executing appwrite project create-variable commands. Both scripts print "Email credentials configured successfully!" regardless of whether the preceding commands actually succeeded. This pattern is systematic throughout the codebase—all appwrite environment variable assignments lack validation.

If these commands fail silently, critical credentials won't be set, yet the script will report success and continue, leaving cloud functions without required authentication. Add conditional checks (e.g., $? in bash, $LASTEXITCODE in PowerShell) to verify each command succeeds before proceeding, or combine them with && operators to halt on failure.

🤖 Prompt for AI Agents
In init.ps1 around lines 192-193, the two appwrite project create-variable calls
for SENDER_MAIL and SENDER_PASSWORD do not check for success; add explicit
PowerShell error handling after each command by checking $LASTEXITCODE (or $?)
and if non-zero write a clear error to stderr and call exit 1 (or throw) so the
script stops on failure; alternatively chain commands with -and or use try/catch
around Invoke-Expression to validate creation, and ensure the final "Email
credentials configured successfully!" message only prints when both creations
succeeded.

Write-Host "Email credentials configured successfully!"

# Push Livekit credentials as env variables for functions to use
Write-Host "Pushing Livekit credentials as env variables if you need any changes do them in your Appwrite Resonate project's Global Env variables"
appwrite project create-variable --key LIVEKIT_HOST --value $livekitHostURL
appwrite project create-variable --key LIVEKIT_SOCKET_URL --value $livekitSocketURL
appwrite project create-variable --key LIVEKIT_API_KEY --value $livekitAPIKey
appwrite project create-variable --key LIVEKIT_API_SECRET --value $livekitAPISecret
appwrite push functions --with-variables
appwrite push functions --with-variables
13 changes: 13 additions & 0 deletions init.sh
Original file line number Diff line number Diff line change
Expand Up @@ -127,6 +127,19 @@ echo "Pushing Meilisearch credentials as env variables if you need any changes d
appwrite project create-variable --key MEILISEARCH_ENDPOINT --value "$meilisearchEndpoint"
appwrite project create-variable --key MEILISEARCH_ADMIN_API_KEY --value "$meilisearchMasterKey"

## appwrite push functions --with-variables
echo "Setting Up Email for OTP now ..."
echo "This email will be used to send OTP verification codes to users."
read -p "Please provide sender email address (e.g., [email protected]): " senderMail
read -sp "Please provide sender email app password: " senderPassword
echo ""

# Push Email credentials as env variables for functions to use
echo "Pushing Email credentials as env variables..."
appwrite project create-variable --key SENDER_MAIL --value "$senderMail"
appwrite project create-variable --key SENDER_PASSWORD --value "$senderPassword"
Comment on lines +139 to +140
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🔴 Critical

🧩 Analysis chain

Verify that environment variables are created successfully.

The script doesn't check whether the appwrite project create-variable commands succeed. This is consistent with other variable creation calls in the script, but failed credential pushes could break OTP functionality.

Run the following script to verify the pattern used elsewhere in init.sh:


🏁 Script executed:

#!/bin/bash
# Description: Check error handling patterns for appwrite commands in init.sh

# Search for appwrite commands and check if any have error handling
rg -n -C3 'appwrite project create-variable.*\|\||\&\& \[|if \[' init.sh

Length of output: 2361


I need to examine the actual code context around lines 139-140 and search for all appwrite project create-variable calls to verify the pattern.

Now let me examine the actual init.sh file to see the code context:


🏁 Script executed:

#!/bin/bash
# Get the content around lines 139-140 and show all appwrite project create-variable calls

# Show lines around 139-140
echo "=== Lines around 139-140 in init.sh ==="
sed -n '130,150p' init.sh

echo -e "\n=== All appwrite project create-variable calls in init.sh ==="
rg -n 'appwrite project create-variable' init.sh -A1 -B1

Length of output: 201


I need to locate init.sh in the repository first:


🏁 Script executed:

#!/bin/bash
# Find init.sh location in repository
fd 'init\.sh' --type f

# Once found, get content around lines 139-140 and all appwrite project create-variable calls
echo -e "\n=== Searching for init.sh and extracting content ==="
init_file=$(fd 'init\.sh' --type f | head -1)
if [ -n "$init_file" ]; then
  echo "Found init.sh at: $init_file"
  echo -e "\n=== Lines around 139-140 ==="
  sed -n '130,150p' "$init_file"
  echo -e "\n=== All appwrite project create-variable calls ==="
  rg -n 'appwrite project create-variable' "$init_file" -A1 -B1
else
  echo "init.sh not found"
fi

Length of output: 2676


Add error handling to email credential setup commands at lines 139-140.

Your observation is verified and accurate. None of the 10 appwrite project create-variable calls in init.sh have error handling, making lines 139-140 consistent with the pattern elsewhere in the file. However, this is problematic for OTP functionality since SENDER_MAIL and SENDER_PASSWORD are critical credentials. The script checks appwrite login exit code (line 43) but not these credential pushes, creating an inconsistency. If either command fails silently, OTP verification will break without user awareness.

Add checks after both commands:

appwrite project create-variable --key SENDER_MAIL --value "$senderMail" || { echo "Failed to set SENDER_MAIL"; exit 1; }
appwrite project create-variable --key SENDER_PASSWORD --value "$senderPassword" || { echo "Failed to set SENDER_PASSWORD"; exit 1; }

Consider applying the same pattern to other critical variable creation calls (lines 71, 75, 127-128, 186-189) for consistency and robustness.

🤖 Prompt for AI Agents
In init.sh around lines 139-140, the appwrite project create-variable calls for
SENDER_MAIL and SENDER_PASSWORD lack error handling; add checks immediately
after each command so the script prints a clear failure message and exits
non-zero if the create-variable command fails (i.e., run the create-variable,
then test its exit status and echo "Failed to set SENDER_MAIL" / "Failed to set
SENDER_PASSWORD" and exit 1 on failure). Also apply the same exit-on-failure
pattern to other critical variable creation calls noted (lines 71, 75, 127-128,
186-189) to ensure the script halts and reports which credential failed to
create.

echo "Email credentials configured successfully!"


echo "Setting Up Livekit now ..."
while true; do
Expand Down