Created
April 13, 2026 15:39
-
-
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>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| #!/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