Files
onix/install/scripts/registry_role_permissions.sh
2025-08-20 20:16:20 +05:30

101 lines
3.1 KiB
Bash
Executable File

#!/bin/bash
# Set script directory and source variables
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
source "$SCRIPT_DIR/variables.sh"
API_KEY=""
# Function to log in and retrieve the API key
get_api_key() {
local login_url="${registry_url%/subscribers}/login"
local username="$1"
local password="$2"
local max_retries=20
local retry_count=0
local success=false
while [ $retry_count -lt $max_retries ] && [ "$success" = false ]; do
# Call the login API
local response
response=$(curl -s -H "Accept: application/json" \
-H "Content-Type: application/json" \
-d "{ \"Name\": \"${username}\", \"Password\": \"${password}\" }" \
"$login_url")
# Check if curl failed
if [ $? -ne 0 ]; then
echo -e "${BoldRed}Error: Failed to connect to $login_url. Retrying in 5 seconds... (Attempt $((retry_count + 1)) of $max_retries)${NC}"
retry_count=$((retry_count + 1))
sleep 5
continue
fi
# Extract API key using jq
API_KEY=$(echo "$response" | jq -r '.api_key')
# Validate API key
if [[ -z "$API_KEY" || "$API_KEY" == "null" ]]; then
echo -e "${BoldRed}Error: Failed to retrieve API key. Retrying in 5 seconds... (Attempt $((retry_count + 1)) of $max_retries)${NC}"
retry_count=$((retry_count + 1))
sleep 5
continue
fi
success=true
echo -e "${BoldGreen}API Key retrieved successfully${NC}"
return 0
done
if [ "$success" = false ]; then
echo -e "${BoldRed}Error: Failed to retrieve API key after $max_retries attempts${NC}"
return 1
fi
}
# Function to upload the RolePermission.xlsx file
upload_role_permission() {
local api_key="$1"
local login_url="${registry_url%/subscribers}/role_permissions/importxls"
# Validate if file exists
if [[ ! -f "$REGISTRY_FILE_PATH" ]]; then
echo -e "${BoldRed}Error: File $REGISTRY_FILE_PATH not found${NC}"
return 1
fi
# Upload the file
local response
response=$(curl -s -w "%{http_code}" -o /dev/null -H "ApiKey:$api_key" \
-F "datafile=@${REGISTRY_FILE_PATH}" \
"$login_url")
# # Check if curl failed
if [ "$response" -ne 302 ]; then
echo -e "${BoldRed}Error: Failed to upload RolePermission.xlsx. HTTP Status: $response${NC}"
return 1
fi
echo -e "${BoldGreen}RolePermission.xlsx uploaded successfully${NC}"
return 0
}
# Main Execution
REGISTRY_FILE_PATH=$SCRIPT_DIR/RolePermission.xlsx
if [[ $1 ]]; then
registry_url=$1
else
registry_url="http://localhost:3030"
fi
# Step 1: Get the API key
if ! get_api_key "$USERNAME" "$PASSWORD"; then
echo -e "${BoldRed}Error: Role permission update failed. Please upload manually.${NC}"
exit 1
fi
# Step 2: Upload the file
if upload_role_permission "$API_KEY"; then
echo -e "${BoldGreen}Role permission updated in registry successfully.${NC}"
else
echo -e "${BoldRed}Error: Role permission update failed.${NC}"
exit 1
fi