Skip to content

Instantly share code, notes, and snippets.

@suuhm
Created April 13, 2026 15:39
Show Gist options
  • Select an option

  • Save suuhm/519a9e6069dc890deb5562182405e94e to your computer and use it in GitHub Desktop.

Select an option

Save suuhm/519a9e6069dc890deb5562182405e94e to your computer and use it in GitHub Desktop.
Automatically creates a user and links them to an organization within a Dockerized OpenCVE environment. Usage: ./opencve_org_adduser.sh <username> <email> <organization_name>
#!/bin/bash
# ==============================================================================
# Script Name : opencve_org_adduser.sh
# Description : Automatically creates a user and links them to an organization
# within a Dockerized OpenCVE environment.
# Author : suuhm
# Date : 2026-04-13
# ==============================================================================
if [ "$#" -ne 3 ]; then
echo "Usage: $0 <username> <email> <organization_name>"
exit 1
fi
USERNAME=$1
EMAIL=$2
ORGA_NAME=$3
echo "=========================================================="
echo " OpenCVE User Provisioning: $USERNAME ($EMAIL)"
echo " Target Organization : $ORGA_NAME"
echo "=========================================================="
echo; sleep 1
echo "[*] Phase 1: Creating user account via Webserver container..."
docker exec -it opencve-webserver-1 python3 manage.py createsuperuser --username "$USERNAME" --email "$EMAIL"
echo "[*] Phase 2: Fetching internal IDs from PostgreSQL..."
USER_ID=$(docker exec opencve-postgres-1 psql -U opencve -d opencve -t -c "SELECT id FROM opencve_users WHERE email = '$EMAIL';" | tr -d '[:space:]')
ORGA_ID=$(docker exec opencve-postgres-1 psql -U opencve -d opencve -t -c "SELECT id FROM opencve_organizations WHERE name = '$ORGA_NAME';" | xargs)
echo
echo " > UUID User : $USER_ID"
echo " > UUID Organization: $ORGA_ID"
echo; sleep 2
# Verify that both IDs were found
if [ -z "$USER_ID" ] || [ -z "$ORGA_ID" ]; then
echo "[!] ERROR: Could not identify User or Organization. Please check your spelling."
exit 1
fi
# Step 3: Manage Membership
echo "[*] Phase 3: Synchronizing organization membership..."
EXISTS=$(docker exec opencve-postgres-1 psql -U opencve -d opencve -t -c "SELECT count(*) FROM opencve_memberships WHERE user_id = '$USER_ID' AND organization_id = '$ORGA_ID';" | tr -d '[:space:]')
if [ "$EXISTS" -gt 0 ]; then
echo " > Status: User already linked. Updating join timestamp..."
docker exec -t opencve-postgres-1 psql -U opencve -d opencve -c "UPDATE opencve_memberships SET date_joined = NOW(), key = NULL WHERE user_id = '$USER_ID' AND organization_id = '$ORGA_ID';"
else
echo " > Status: Creating new membership record..."
docker exec -t opencve-postgres-1 psql -U opencve -d opencve -c "INSERT INTO opencve_memberships (user_id, organization_id, role, date_invited, date_joined) VALUES ('$USER_ID', '$ORGA_ID', 'member', NOW(), NOW());"
fi
echo; sleep 2; echo
echo "=========================================================="
echo "[+] SUCCESS: Current Member List for '$ORGA_NAME':"
echo "=========================================================="
docker exec -t opencve-postgres-1 psql -U opencve -d opencve -c "
SELECT
u.username,
u.email,
m.role,
m.date_joined
FROM opencve_memberships m
JOIN opencve_users u ON m.user_id = u.id
WHERE m.organization_id = '$ORGA_ID'
ORDER BY m.date_joined DESC;"
exit 0
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment