💡 Introduction
Sometimes in Joget applications, user or contact records may be created without passwords — especially during data imports or integrations.
To fix that, we can automate password creation using a BeanShell script, which directly connects to Joget’s database and assigns secure random passwords to any empty password fields.
🎯 Goal
Automatically generate a secure, random password for every record in the app_fd_Contacts table where c_Password is NULL.
⚙️ How It Works
This BeanShell script:
- Connects to Joget’s database using 
AppUtil. - Finds all records missing passwords.
 - Generates a random secure password.
 - Updates the database with the new passwords.
 - Logs the output for easy tracking.
 
🧱 BeanShell Script
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Random;
import javax.sql.DataSource;
import org.joget.apps.app.service.AppUtil;
import org.joget.commons.util.LogUtil;
// Character sets for password generation
private final String CHAR_LOWER = "abcdefghijklmnopqrstuvwxyz";
private final String CHAR_UPPER = CHAR_LOWER.toUpperCase();
private final String NUMBER = "0123456789";
private final String SPECIAL_CHARS = "!@#$%^&*()_-+=<>?";
private final String ALL_CHARS = CHAR_LOWER + CHAR_UPPER + NUMBER + SPECIAL_CHARS;
private final Random RANDOM = new Random();
Connection connection = null;
public void RandomPasswordGenerator() {
    try {
        // Get Joget database connection from AppUtil
        DataSource ds = (DataSource) AppUtil.getApplicationContext().getBean("setupDataSource");
        connection = ds.getConnection();
        // Select records with missing passwords
        String selectQuery = "SELECT id FROM app_fd_Contacts WHERE c_Password IS NULL";
        // Update query to assign new passwords
        String updateQuery = "UPDATE app_fd_Contacts SET c_Password = ? WHERE id = ?";
        PreparedStatement selectStatement = connection.prepareStatement(selectQuery);
        PreparedStatement updateStatement = connection.prepareStatement(updateQuery);
        ResultSet resultSet = selectStatement.executeQuery();
        while (resultSet.next()) {
            LogUtil.info("", "Inside while loop");
            // Get record ID
            String id = resultSet.getString("id");
            // Generate new random password
            String newPassword = generateRandomPassword();
            LogUtil.info("", newPassword);
            // Update the record with the generated password
            updateStatement.setString(1, newPassword);
            updateStatement.setString(2, id);
            updateStatement.executeUpdate();
        }
    } catch (SQLException e) {
        e.printStackTrace();
    } finally {
        // Always close connection in finally block
        if (connection != null) {
            try {
                connection.close();
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }
}
// Function to generate a secure random password
public String generateRandomPassword() {
    StringBuilder sb = new StringBuilder(8);
    // Ensure at least one character from each category
    sb.append(CHAR_LOWER.charAt(RANDOM.nextInt(CHAR_LOWER.length())));
    sb.append(CHAR_UPPER.charAt(RANDOM.nextInt(CHAR_UPPER.length())));
    sb.append(NUMBER.charAt(RANDOM.nextInt(NUMBER.length())));
    sb.append(SPECIAL_CHARS.charAt(RANDOM.nextInt(SPECIAL_CHARS.length())));
    // Fill the rest of the password randomly
    for (int i = 4; i < 8; i++) {
        int randomIndex = RANDOM.nextInt(ALL_CHARS.length());
        sb.append(ALL_CHARS.charAt(randomIndex));
    }
    // Shuffle the generated password for randomness
    char[] passwordChars = sb.toString().toCharArray();
    for (int i = 0; i < passwordChars.length; i++) {
        int randomIndex = RANDOM.nextInt(passwordChars.length);
        char temp = passwordChars[i];
        passwordChars[i] = passwordChars[randomIndex];
        passwordChars[randomIndex] = temp;
    }
    return new String(passwordChars);
}
// Execute the function
RandomPasswordGenerator();
    
Top comments (0)