Changeset 25261

Show
Ignore:
Timestamp:
23.03.2012 14:23:55 (8 years ago)
Author:
sjm84
Message:

Some major changes to the derby wrapper

Files:
1 modified

Legend:

Unmodified
Added
Removed
  • main/trunk/greenstone3/src/java/org/greenstone/gsdl3/util/DerbyWrapper.java

    r25125 r25261  
    2020 
    2121import javax.swing.*; 
     22 
     23import org.greenstone.gsdl3.service.Authentication; 
     24 
    2225import java.io.File; 
    2326import java.sql.Connection; 
     
    106109        { 
    107110            conn.setAutoCommit(false); 
    108             state.execute("create table users (username varchar(40) not null, password varchar(40) not null, accountstatus varchar(10), comment varchar(100), primary key(username))"); 
     111            state.execute("create table users (username varchar(40) not null, password varchar(40) not null, accountstatus varchar(10), comment varchar(100), email varchar(40), primary key(username))"); 
    109112            state.execute("create table roles (username varchar(40) not null, role varchar(40) not null, primary key (username, role))"); 
    110             //ystem.out.println("table users created successfully!"); 
    111             state.execute("insert into " + USERS + " values ('admin', 'admin', 'true', 'change the password for this account as soon as possible')"); 
     113            state.execute("insert into " + USERS + " values ('admin', '" + Authentication.hashPassword("admin") + "', 'true', 'change the password for this account as soon as possible', '')"); 
    112114            state.execute("insert into " + ROLES + " values ('admin', 'administrator')"); 
    113115            state.execute("insert into " + ROLES + " values ('admin', 'all-collections-editor')"); 
     
    123125    { 
    124126        UserQueryResult userQueryResult = new UserQueryResult(); 
    125         String sql_list_all_user = "SELECT username, password, accountstatus, comment FROM " + USERS; 
     127        String sql_list_all_user = "SELECT username, password, accountstatus, email, comment FROM " + USERS; 
    126128 
    127129        ArrayList<HashMap<String, String>> users = new ArrayList<HashMap<String, String>>(); 
     
    134136            user.put("as", rs.getString("accountstatus")); 
    135137            user.put("comment", rs.getString("comment")); 
     138            user.put("email", rs.getString("email")); 
    136139 
    137140            users.add(user); 
     
    150153                group += gs.getString("role"); 
    151154            } 
    152             userQueryResult.addUserTerm(user.get("username"), user.get("password"), group, user.get("as"), user.get("comment")); 
     155            userQueryResult.addUserTerm(user.get("username"), user.get("password"), group, user.get("as"), user.get("comment"), user.get("email")); 
    153156        } 
    154157 
     
    164167    } 
    165168 
    166     public String addUser(String username, String password, String groups, String accountstatus, String comment) 
     169    public boolean addUser(String username, String password, String groups, String accountstatus, String comment, String email) 
    167170    { 
    168171        try 
    169172        { 
    170173            conn.setAutoCommit(false); 
    171             String sql_insert_user = "insert into " + USERS + " values ('" + username + "', '" + password + "', '" + accountstatus + "', '" + comment + "')"; 
     174            String sql_insert_user = "insert into " + USERS + " values ('" + username + "', '" + password + "', '" + accountstatus + "', '" + comment + "', '" + email + "')"; 
    172175            state.execute(sql_insert_user); 
    173176 
     
    194197            closeDatabase(); 
    195198            System.out.println("Error:" + e.getMessage()); 
    196             return "Error:" + e.getMessage(); 
    197         } 
    198  
    199         return "succeed"; 
    200     } 
    201  
    202     public String deleteUser(String del_username) 
     199            return false; 
     200        } 
     201 
     202        return true; 
     203    } 
     204 
     205    public boolean deleteUser(String del_username) 
    203206    { 
    204207        try 
     
    223226            } 
    224227            closeDatabase(); 
    225             return "Error:" + e.getMessage(); 
    226         } 
    227         return "succeed"; 
     228            return false; 
     229        } 
     230        return true; 
    228231    } 
    229232 
     
    254257    } 
    255258 
    256     public UserQueryResult findUser(String username, String password) throws SQLException 
     259    public UserQueryResult findUser(String username, String password) 
    257260    { 
    258261        UserQueryResult userQueryResult = new UserQueryResult(); 
    259262 
     263        try 
     264        { 
     265            conn.setAutoCommit(false); 
     266        } 
     267        catch (Exception ex) 
     268        { 
     269            ex.printStackTrace(); 
     270            return null; 
     271        } 
     272 
     273        String sql_find_user = "SELECT  username, password, accountstatus, comment, email FROM " + USERS; 
     274        String append_sql = ""; 
     275 
     276        if (username != null) 
     277        { 
     278            append_sql = " WHERE username = '" + username + "'"; 
     279        } 
     280        if (password != null) 
     281        { 
     282            if (append_sql.equals("")) 
     283            { 
     284                append_sql = " WHERE password = '" + password + "'"; 
     285            } 
     286            else 
     287            { 
     288                append_sql += " and password = '" + password + "'"; 
     289            } 
     290        } 
     291        if (!append_sql.equals("")) 
     292        { 
     293            sql_find_user += append_sql; 
     294        } 
     295 
     296        try 
     297        { 
     298            ArrayList<HashMap<String, String>> users = new ArrayList<HashMap<String, String>>(); 
     299            ResultSet rs = state.executeQuery(sql_find_user); 
     300            while (rs.next()) 
     301            { 
     302                HashMap<String, String> user = new HashMap<String, String>(); 
     303                user.put("username", rs.getString("username")); 
     304                user.put("password", rs.getString("password")); 
     305                user.put("as", rs.getString("accountstatus")); 
     306                user.put("comment", rs.getString("comment")); 
     307                user.put("email", rs.getString("email")); 
     308 
     309                users.add(user); 
     310            } 
     311            conn.commit(); 
     312 
     313            for (HashMap<String, String> user : users) 
     314            { 
     315                ResultSet gs = state.executeQuery("SELECT role FROM " + ROLES + " WHERE username = '" + user.get("username") + "'"); 
     316 
     317                String group = ""; 
     318                while (gs.next()) 
     319                { 
     320                    if (!group.equals("")) 
     321                    { 
     322                        group += ","; 
     323                    } 
     324                    group += gs.getString("role"); 
     325                } 
     326 
     327                userQueryResult.addUserTerm(user.get("username"), user.get("password"), group, user.get("as"), user.get("comment"), user.get("email")); 
     328            } 
     329        } 
     330        catch (Exception ex) 
     331        { 
     332            ex.printStackTrace(); 
     333            return null; 
     334        } 
     335 
     336        if (userQueryResult.getSize() > 0) 
     337        { 
     338            return userQueryResult; 
     339        } 
     340        else 
     341        { 
     342            System.out.println("couldn't find the user"); 
     343            return null; 
     344        } 
     345    } 
     346 
     347    public UserQueryResult findUser(String username) throws SQLException 
     348    { 
     349        UserQueryResult userQueryResult = new UserQueryResult(); 
     350 
    260351        conn.setAutoCommit(false); 
    261         String sql_find_user = "SELECT  username, password, accountstatus, comment FROM " + USERS; 
     352        String sql_find_user = "SELECT  username, password, accountstatus, comment, email FROM " + USERS; 
    262353        String append_sql = ""; 
    263354 
     
    265356        { 
    266357            append_sql = " WHERE username = '" + username + "'"; 
    267         } 
    268         if (password != null) 
    269         { 
    270             if (append_sql.equals("")) 
    271             { 
    272                 append_sql = " WHERE password = '" + password + "'"; 
    273             } 
    274             else 
    275             { 
    276                 append_sql += " and password = '" + password + "'"; 
    277             } 
    278358        } 
    279359        if (!append_sql.equals("")) 
     
    291371            user.put("as", rs.getString("accountstatus")); 
    292372            user.put("comment", rs.getString("comment")); 
     373            user.put("email", rs.getString("email")); 
    293374 
    294375            users.add(user); 
     
    310391            } 
    311392 
    312             userQueryResult.addUserTerm(user.get("username"), user.get("password"), group, user.get("as"), user.get("comment")); 
     393            userQueryResult.addUserTerm(user.get("username"), user.get("password"), group, user.get("as"), user.get("comment"), user.get("email")); 
    313394        } 
    314395 
     
    324405    } 
    325406 
    326     public UserQueryResult findUser(String username) throws SQLException 
    327     { 
    328         UserQueryResult userQueryResult = new UserQueryResult(); 
    329  
    330         conn.setAutoCommit(false); 
    331         String sql_find_user = "SELECT  username, password, accountstatus, comment FROM " + USERS; 
    332         String append_sql = ""; 
    333  
    334         if (username != null) 
    335         { 
    336             append_sql = " WHERE username = '" + username + "'"; 
    337         } 
    338         if (!append_sql.equals("")) 
    339         { 
    340             sql_find_user += append_sql; 
    341         } 
    342  
    343         ArrayList<HashMap<String, String>> users = new ArrayList<HashMap<String, String>>(); 
    344         ResultSet rs = state.executeQuery(sql_find_user); 
    345         while (rs.next()) 
    346         { 
    347             HashMap<String, String> user = new HashMap<String, String>(); 
    348             user.put("username", rs.getString("username")); 
    349             user.put("password", rs.getString("password")); 
    350             user.put("as", rs.getString("accountstatus")); 
    351             user.put("comment", rs.getString("comment")); 
    352  
    353             users.add(user); 
    354         } 
    355         conn.commit(); 
    356  
    357         for (HashMap<String, String> user : users) 
    358         { 
    359             ResultSet gs = state.executeQuery("SELECT role FROM " + ROLES + " WHERE username = '" + user.get("username") + "'"); 
    360  
    361             String group = ""; 
    362             while (gs.next()) 
    363             { 
    364                 if (!group.equals("")) 
    365                 { 
    366                     group += ","; 
    367                 } 
    368                 group += gs.getString("role"); 
    369             } 
    370  
    371             userQueryResult.addUserTerm(user.get("username"), user.get("password"), group, user.get("as"), user.get("comment")); 
    372         } 
    373  
    374         if (userQueryResult.getSize() > 0) 
    375         { 
    376             return userQueryResult; 
    377         } 
    378         else 
    379         { 
    380             System.out.println("couldn't find the user"); 
    381             return null; 
    382         } 
    383     } 
    384  
    385     public String modifyUserInfo(String username, String new_password, String groups, String accountstatus, String comment) 
     407    public String modifyUserInfo(String username, String new_password, String groups, String accountstatus, String comment, String email) 
    386408    { 
    387409        try 
     
    389411            conn.setAutoCommit(false); 
    390412            String sql_modify_user_info = "update " + USERS + " set "; 
     413             
     414            boolean needComma = false; 
    391415            if (new_password != null && !new_password.equals("")) 
    392416            { 
    393417                sql_modify_user_info += "password='" + new_password + "'"; 
     418                needComma = true; 
    394419            } 
    395420 
    396421            if (accountstatus != null && comment != null) 
    397422            { 
    398                 sql_modify_user_info += ", accountstatus='" + accountstatus + "'" + ", comment='" + comment + "'"; 
    399             } 
     423                sql_modify_user_info += (needComma ? "," : "") + " accountstatus='" + accountstatus + "'" + ", comment='" + comment + "'"; 
     424                needComma = true; 
     425            } 
     426             
     427            if(email != null) 
     428            { 
     429                sql_modify_user_info += (needComma ? "," : "") + " email='" + email + "'"; 
     430            } 
     431             
    400432            sql_modify_user_info += " where username='" + username + "'"; 
    401             System.out.println(sql_modify_user_info); 
    402433            state.execute(sql_modify_user_info); 
    403434 
     
    431462    } 
    432463 
    433     public void db2txt() throws SQLException 
    434     { 
    435         UserQueryResult userQueryResult = new UserQueryResult(); 
    436         String sql_list_all_user = "select username, password, accountstatus, comment from " + USERS; 
    437         ResultSet rs = state.executeQuery(sql_list_all_user); 
    438  
    439         while (rs.next()) 
    440         { 
    441             String returned_username = rs.getString("username"); 
    442             System.out.println("[" + returned_username + "]"); 
    443             String returned_comment = rs.getString("comment"); 
    444             System.out.println("<comment>" + returned_comment); 
    445             String returned_accountstatus = rs.getString("accountstatus"); 
    446             System.out.println("<enabled>" + returned_accountstatus); 
    447             ResultSet groupsSet = state.executeQuery("SELECT role FROM " + ROLES + " WHERE username = '" + returned_username + "'"); 
    448             String returned_groups = ""; 
    449             while (groupsSet.next()) 
    450             { 
    451                 if (!returned_groups.equals("")) 
     464    public void db2txt() 
     465    { 
     466        try 
     467        { 
     468            conn.setAutoCommit(false); 
     469            String sql_list_all_user = "select username, password, accountstatus, comment, email from " + USERS; 
     470            ResultSet rs = state.executeQuery(sql_list_all_user); 
     471 
     472            ArrayList<HashMap<String, String>> infoMap = new ArrayList<HashMap<String, String>>(); 
     473 
     474            while (rs.next()) 
     475            { 
     476                HashMap<String, String> userMap = new HashMap<String, String>(); 
     477                userMap.put("username", rs.getString("username")); 
     478                userMap.put("password", rs.getString("password")); 
     479                userMap.put("status", rs.getString("accountstatus")); 
     480                userMap.put("comment", rs.getString("comment")); 
     481                userMap.put("email", rs.getString("email")); 
     482                infoMap.add(userMap); 
     483            } 
     484            conn.commit(); 
     485 
     486            for (HashMap<String, String> user : infoMap) 
     487            { 
     488                ResultSet groupsSet = state.executeQuery("SELECT role FROM " + ROLES + " WHERE username = '" + user.get("username") + "'"); 
     489                String returnedGroups = ""; 
     490                while (groupsSet.next()) 
    452491                { 
    453                     returned_groups += ","; 
     492                    if (!returnedGroups.equals("")) 
     493                    { 
     494                        returnedGroups += ","; 
     495                    } 
     496                    returnedGroups += groupsSet.getString("role"); 
    454497                } 
    455                 returned_groups += groupsSet.getString("role"); 
    456             } 
    457             System.out.println("<groups>" + returned_groups); 
    458             String returned_password = rot13(rs.getString("password")); 
    459             System.out.println("<password>" + returned_password); 
    460             System.out.println("<username>" + returned_username); 
    461             System.out.println(""); 
    462             System.out.println("----------------------------------------------------------------------"); 
    463         } 
    464         conn.commit(); 
    465         closeDatabase(); 
     498                conn.commit(); 
     499 
     500                System.err.println("-------------------------------------"); 
     501                System.err.println("USERNAME = " + user.get("username")); 
     502                System.err.println("PASSWORD = " + user.get("password")); 
     503                System.err.println("GROUPS = " + returnedGroups); 
     504                System.err.println("STATUS = " + user.get("status")); 
     505                System.err.println("COMMENT = " + user.get("comment")); 
     506                System.err.println("EMAIL = " + user.get("email")); 
     507                System.err.println("-------------------------------------"); 
     508            } 
     509 
     510            conn.commit(); 
     511            closeDatabase(); 
     512        } 
     513        catch (Exception ex) 
     514        { 
     515            ex.printStackTrace(); 
     516        } 
    466517    } 
    467518 
     
    474525        } 
    475526    } 
    476  
    477     //Simply use rot-13 to encrypt and decrypt the password 
    478     public String rot13(String password) 
    479     { 
    480         String out_password = ""; 
    481         for (int i = 0; i < password.length(); i++) 
    482         { 
    483             char c = password.charAt(i); 
    484             if (c >= 'a' && c <= 'm') 
    485                 c += 13; 
    486             else if (c >= 'n' && c <= 'z') 
    487                 c -= 13; 
    488             else if (c >= 'A' && c <= 'M') 
    489                 c += 13; 
    490             else if (c >= 'A' && c <= 'Z') 
    491                 c -= 13; 
    492             out_password += c; 
    493         } 
    494         return out_password; 
    495     } 
    496527}