Ignore:
Timestamp:
2013-09-04T15:19:34+12:00 (11 years ago)
Author:
sjm84
Message:

Some fixes for when using the derby database as well as some improvements

Location:
main/trunk/greenstone3/src/java/org/greenstone/gsdl3
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • main/trunk/greenstone3/src/java/org/greenstone/gsdl3/service/Authentication.java

    r28202 r28210  
    128128    protected static final String GET_USER_INFORMATION_SERVICE = "GetUserInformation";
    129129
    130     protected static DerbyWrapper _derbyWrapper = null;
    131130    protected static boolean _derbyWrapperDoneForcedShutdown = false;
    132131
     
    157156
    158157            DerbyWrapper.shutdownDatabaseServer();
    159             _derbyWrapper = null;
    160158            _derbyWrapperDoneForcedShutdown = true;
    161159        }
     
    271269        }
    272270
    273         openDatabase();
     271        DerbyWrapper derbyWrapper = openDatabase();
    274272
    275273        try
    276274        {
    277             UserQueryResult userQueryResult = _derbyWrapper.findUser(username);
     275            UserQueryResult userQueryResult = derbyWrapper.findUser(username);
    278276
    279277            Vector<UserTermInfo> terms = userQueryResult.getUserTerms();
     
    282280            {
    283281                GSXML.addError(this.doc, result, _errorMessageMap.get(ERROR_REQUESTED_USER_NOT_FOUND));
    284                 closeDatabase();
    285282                return result;
    286283            }
     
    308305        }
    309306
    310         closeDatabase();
     307        derbyWrapper.closeDatabase();
    311308
    312309        return result;
     
    664661            }
    665662
     663            DerbyWrapper derbyWrapper = openDatabase();
    666664            String chpa_groups = retrieveDataForUser(user_name, "groups");
    667665            String chpa_comment = "password_changed_by_user";
    668             String info = this._derbyWrapper.modifyUserInfo(user_name, hashPassword(newPassword), chpa_groups, null, chpa_comment, null);
     666            String info = derbyWrapper.modifyUserInfo(user_name, hashPassword(newPassword), chpa_groups, null, chpa_comment, null);
     667            derbyWrapper.closeDatabase();
    669668            if (info != "succeed")
    670669            {//see DerbyWrapper.modifyUserInfo
     
    820819    private void checkAdminUserExists()
    821820    {
    822         openDatabase();
    823 
    824         UserQueryResult userQueryResult = _derbyWrapper.findUser(null, null);
     821        DerbyWrapper derbyWrapper = openDatabase();
     822        UserQueryResult userQueryResult = derbyWrapper.findUser(null, null);
     823        derbyWrapper.closeDatabase();
    825824
    826825        if (userQueryResult != null)
     
    842841            }
    843842        }
    844 
    845         closeDatabase();
    846     }
    847 
    848     private boolean openDatabase()
    849     {
    850         if (_derbyWrapper == null)
    851         {
    852             // check the usersDb database, if it isn't existing, check the etc dir, create the etc dir if it isn't existing, then create the  user database and add a "admin" user
    853             String usersDB_dir = GlobalProperties.getGSDL3Home() + File.separatorChar + "etc" + File.separatorChar + "usersDB";
    854 
    855             _derbyWrapper = new DerbyWrapper(usersDB_dir);
    856 
    857             File usersDB_file = new File(usersDB_dir);
    858             if (!usersDB_file.exists())
    859             {
    860                 String etc_dir = GlobalProperties.getGSDL3Home() + File.separatorChar + "etc";
    861                 File etc_file = new File(etc_dir);
    862                 if (!etc_file.exists())
    863                 {
    864                     boolean success = etc_file.mkdir();
    865                     if (!success)
    866                     {
    867                         logger.error("Couldn't create the etc dir under " + GlobalProperties.getGSDL3Home() + ".");
    868                         return false;
    869                     }
    870                 }
    871                 _derbyWrapper.createDatabase();
    872             }
    873         }
    874 
    875         return true;
    876     }
    877 
    878     private void closeDatabase()
    879     {
    880         if (_derbyWrapper != null)
    881         {
    882             _derbyWrapper.closeDatabase();
    883             _derbyWrapper = null;
    884         }
     843    }
     844
     845    private DerbyWrapper openDatabase()
     846    {
     847        // check the usersDb database, if it isn't existing, check the etc dir, create the etc dir if it isn't existing, then create the  user database and add a "admin" user
     848        String usersDB_dir = GlobalProperties.getGSDL3Home() + File.separatorChar + "etc" + File.separatorChar + "usersDB";
     849
     850        DerbyWrapper derbyWrapper = new DerbyWrapper(usersDB_dir);
     851
     852        File usersDB_file = new File(usersDB_dir);
     853        if (!usersDB_file.exists())
     854        {
     855            String etc_dir = GlobalProperties.getGSDL3Home() + File.separatorChar + "etc";
     856            File etc_file = new File(etc_dir);
     857            if (!etc_file.exists())
     858            {
     859                boolean success = etc_file.mkdir();
     860                if (!success)
     861                {
     862                    logger.error("Couldn't create the etc dir under " + GlobalProperties.getGSDL3Home() + ".");
     863                    return null;
     864                }
     865            }
     866            derbyWrapper.createDatabase();
     867        }
     868
     869        return derbyWrapper;
    885870    }
    886871
    887872    private int addUserInformationToNode(String username, Element serviceNode)
    888873    {
    889         openDatabase();
    890 
    891         UserQueryResult userQueryResult = _derbyWrapper.findUser(username, null);
     874        DerbyWrapper derbyWrapper = openDatabase();
     875        UserQueryResult userQueryResult = derbyWrapper.findUser(username, null);
     876        derbyWrapper.closeDatabase();
    892877
    893878        if (userQueryResult != null)
     
    895880            Element user_node = getUserNode(userQueryResult);
    896881            serviceNode.appendChild(user_node);
    897             closeDatabase();
    898882            return NO_ERROR;
    899883        }
    900884
    901         closeDatabase();
    902885        return ERROR_COULD_NOT_GET_USER_INFO;
    903886    }
     
    910893        }
    911894
    912         openDatabase();
    913 
    914         boolean success = _derbyWrapper.deleteUser(username);
     895        DerbyWrapper derbyWrapper = openDatabase();
     896        boolean success = derbyWrapper.deleteUser(username);
     897        derbyWrapper.closeDatabase();
    915898
    916899        if (success)
    917900        {
    918             closeDatabase();
    919901            return NO_ERROR;
    920902        }
    921903
    922         closeDatabase();
    923904        return ERROR_REMOVING_USER;
    924905    }
     
    926907    private int addUser(String newUsername, String newPassword, String newGroups, String newStatus, String newComment, String newEmail)
    927908    {
    928         openDatabase();
    929 
    930909        newGroups = newGroups.replaceAll(" ", "");
    931910
    932911        //Check if the user already exists
    933         UserQueryResult userQueryResult = _derbyWrapper.findUser(newUsername, null);
     912        DerbyWrapper derbyWrapper = openDatabase();
     913        UserQueryResult userQueryResult = derbyWrapper.findUser(newUsername, null);
    934914
    935915        if (userQueryResult != null)
    936916        {
    937             closeDatabase();
     917            derbyWrapper.closeDatabase();
    938918            return ERROR_USER_ALREADY_EXISTS;
    939919        }
     
    941921        {
    942922            System.err.println("ADDING " + newUsername + " " + newPassword);
    943             boolean success = _derbyWrapper.addUser(newUsername, newPassword, newGroups, newStatus, newComment, newEmail);
     923            boolean success = derbyWrapper.addUser(newUsername, newPassword, newGroups, newStatus, newComment, newEmail);
     924            derbyWrapper.closeDatabase();
     925
    944926            if (!success)
    945927            {
    946                 closeDatabase();
    947928                return ERROR_ADDING_USER;
    948929            }
    949930        }
    950931
    951         closeDatabase();
    952932        return NO_ERROR;
    953933    }
     
    957937        boolean check_status = false;
    958938
    959         openDatabase();
    960 
     939        DerbyWrapper derbyWrapper = openDatabase();
    961940        try
    962941        {
    963             UserQueryResult result = _derbyWrapper.findUser(username);
     942            UserQueryResult result = derbyWrapper.findUser(username);
    964943
    965944            if (result != null)
     
    974953            ex.printStackTrace();
    975954        }
    976 
    977         closeDatabase();
     955        derbyWrapper.closeDatabase();
     956
    978957        return check_status;
    979958    }
     
    987966        try
    988967        {
    989             UserQueryResult result = _derbyWrapper.findUser(username);
     968            DerbyWrapper derbyWrapper = openDatabase();
     969            UserQueryResult result = derbyWrapper.findUser(username);
     970            derbyWrapper.closeDatabase();
    990971            Vector userInfo = result.users;
    991972
     
    10241005        }
    10251006
    1026         closeDatabase();
    10271007        return data;
    10281008    }
  • main/trunk/greenstone3/src/java/org/greenstone/gsdl3/service/UserTracker.java

    r28202 r28210  
    9090    protected synchronized Element processGetActivityOnPage(Element request)
    9191    {
    92         System.err.println("CALLED");
    9392        Element result = GSXML.createBasicResponse(this.doc, GET_ACTIVITY_ON_PAGE);
    9493        try
     
    9897            if (paramList == null)
    9998            {
    100                 System.err.println("WHA?");
    10199                GSXML.addError(this.doc, result, "Request has no parameter list");
    102100                return result;
     
    110108            DerbyWrapper database = new DerbyWrapper(GlobalProperties.getGSDL3Home() + File.separatorChar + "etc" + File.separatorChar + "usersDB");
    111109            ArrayList<HashMap<String, String>> userActions = database.getMostRecentUserActions(site, collection, oid);
    112 
    113             System.err.println(userActions.size());
    114110
    115111            Element userList = this.doc.createElement("userList");
  • main/trunk/greenstone3/src/java/org/greenstone/gsdl3/util/DerbyWrapper.java

    r28201 r28210  
    197197        try
    198198        {
    199             String query = "SELECT username, action FROM usertracker WHERE site = '" + site + "' and collection = '" + collection + "' and oid = '" + oid + "' ORDER BY time";
     199            String query = "SELECT username, action, time FROM usertracker WHERE site = '" + site + "' and collection = '" + collection + "' and oid = '" + oid + "' ORDER BY time";
    200200            Statement state = conn.createStatement();
    201201            ResultSet rs = state.executeQuery(query);
     
    203203
    204204            HashSet<String> usernamesSeen = new HashSet<String>();
    205 
    206205            while (rs.next())
    207206            {
     207                String timeStr = rs.getString("time");
     208                long time = Long.parseLong(timeStr);
     209
     210                if (System.currentTimeMillis() - time > 6000)
     211                {
     212                    continue;
     213                }
     214
    208215                HashMap<String, String> action = new HashMap<String, String>();
    209216                if (!usernamesSeen.contains(rs.getString("username")))
     
    217224            }
    218225            state.close();
     226
     227            clearOldUserActions();
    219228        }
    220229        catch (Exception ex)
     
    223232        }
    224233        return actions;
     234    }
     235
     236    public void clearOldUserActions()
     237    {
     238        try
     239        {
     240            Statement state = conn.createStatement();
     241            state.execute("DELETE FROM usertracker WHERE (CAST (time AS BIGINT)) < " + (System.currentTimeMillis() - 20000));
     242            conn.commit();
     243            state.close();
     244        }
     245        catch (Exception ex)
     246        {
     247            ex.printStackTrace();
     248        }
    225249    }
    226250
     
    572596        Statement state = conn.createStatement();
    573597        ResultSet rs = state.executeQuery(sql_find_user);
     598        conn.commit();
    574599        while (rs.next())
    575600        {
     
    583608            users.add(user);
    584609        }
    585         conn.commit();
    586 
     610        state.close();
     611
     612        state = conn.createStatement();
    587613        for (HashMap<String, String> user : users)
    588614        {
    589615            ResultSet gs = state.executeQuery("SELECT role FROM " + ROLES + " WHERE username = '" + user.get("username") + "'");
     616            conn.commit();
    590617
    591618            String group = "";
Note: See TracChangeset for help on using the changeset viewer.