diff options
author | Henri Herscher <henri@oreka.org> | 2005-12-02 16:31:48 +0000 |
---|---|---|
committer | Henri Herscher <henri@oreka.org> | 2005-12-02 16:31:48 +0000 |
commit | c851c21a303403f24f19572ba09905473c55a8b9 (patch) | |
tree | 1b6524c555665882d375ffe06f620ea78d538735 /orkweb/src/net/sf/oreka | |
parent | 53bc868730fd5da3d7bba4014783cca1d13dbb21 (diff) |
Added Authentication against database
git-svn-id: https://oreka.svn.sourceforge.net/svnroot/oreka/trunk@84 09dcff7a-b715-0410-9601-b79a96267cd0
Diffstat (limited to 'orkweb/src/net/sf/oreka')
-rw-r--r-- | orkweb/src/net/sf/oreka/orkweb/ContextListener.java | 2 | ||||
-rw-r--r-- | orkweb/src/net/sf/oreka/orkweb/OrkWeb.java | 8 | ||||
-rw-r--r-- | orkweb/src/net/sf/oreka/pages/Home.java | 52 | ||||
-rw-r--r-- | orkweb/src/net/sf/oreka/pages/HomePage.java | 69 | ||||
-rw-r--r-- | orkweb/src/net/sf/oreka/pages/OrkPage.java | 15 | ||||
-rw-r--r-- | orkweb/src/net/sf/oreka/pages/ProtectedPage.java | 21 | ||||
-rw-r--r-- | orkweb/src/net/sf/oreka/pages/RecSegmentsPage.java | 2 | ||||
-rw-r--r-- | orkweb/src/net/sf/oreka/pages/SessionStateObject.java | 26 | ||||
-rw-r--r-- | orkweb/src/net/sf/oreka/services/RecSegmentServiceHbn.java | 4 | ||||
-rw-r--r-- | orkweb/src/net/sf/oreka/services/UserService.java | 10 | ||||
-rw-r--r-- | orkweb/src/net/sf/oreka/services/UserServiceHbn.java | 102 |
11 files changed, 255 insertions, 56 deletions
diff --git a/orkweb/src/net/sf/oreka/orkweb/ContextListener.java b/orkweb/src/net/sf/oreka/orkweb/ContextListener.java index 52ab577..ea21194 100644 --- a/orkweb/src/net/sf/oreka/orkweb/ContextListener.java +++ b/orkweb/src/net/sf/oreka/orkweb/ContextListener.java @@ -46,7 +46,7 @@ public class ContextListener implements ServletContextListener { } try { - HibernateManager.configure(hibernateConfigFile); + OrkWeb.hibernateManager.configure(hibernateConfigFile); } catch (Exception e) { log.error("orkweb.ContextListener: Error configuring Hibernate: " + e.getMessage()); diff --git a/orkweb/src/net/sf/oreka/orkweb/OrkWeb.java b/orkweb/src/net/sf/oreka/orkweb/OrkWeb.java new file mode 100644 index 0000000..e55a1e9 --- /dev/null +++ b/orkweb/src/net/sf/oreka/orkweb/OrkWeb.java @@ -0,0 +1,8 @@ +package net.sf.oreka.orkweb; + +import net.sf.oreka.HibernateManager; + +public class OrkWeb { + + public static HibernateManager hibernateManager = new HibernateManager(); +} diff --git a/orkweb/src/net/sf/oreka/pages/Home.java b/orkweb/src/net/sf/oreka/pages/Home.java deleted file mode 100644 index 4cec56e..0000000 --- a/orkweb/src/net/sf/oreka/pages/Home.java +++ /dev/null @@ -1,52 +0,0 @@ -/* - * Oreka -- A media capture and retrieval platform - * - * Copyright (C) 2005, orecx LLC - * - * http://www.orecx.com - * - * This program is free software, distributed under the terms of - * the GNU General Public License. - * Please refer to http://www.gnu.org/copyleft/gpl.html - * - */ - -package net.sf.oreka.pages; - -import net.sf.oreka.orkweb.ContextListener; - -import org.apache.tapestry.IRequestCycle; -import org.apache.tapestry.html.BasePage; - -public abstract class Home extends BasePage { - - public abstract String getUsername(); - public abstract void setUsername(String username); - - public abstract String getPassword(); - public abstract void setPassword(String password); - - //@Persist - public abstract String getErrorMessage(); - public abstract void setErrorMessage(String msg); - - public Home() { - - } - - public void formSubmit(IRequestCycle cycle) { - - if( getUsername() != null && getPassword() != null && - getUsername().equals("admin") && - getPassword().equals("admin") ) - { - cycle.activate("RecSegments"); - } - else if(ContextListener.debugSwitch == true) { - cycle.activate("RecSegments"); - } - else { - setErrorMessage("Invalid login or password"); - } - } -} diff --git a/orkweb/src/net/sf/oreka/pages/HomePage.java b/orkweb/src/net/sf/oreka/pages/HomePage.java new file mode 100644 index 0000000..dc32314 --- /dev/null +++ b/orkweb/src/net/sf/oreka/pages/HomePage.java @@ -0,0 +1,69 @@ +/* + /* + * Oreka -- A media capture and retrieval platform + * + * Copyright (C) 2005, orecx LLC + * + * http://www.orecx.com + * + * This program is free software, distributed under the terms of + * the GNU General Public License. + * Please refer to http://www.gnu.org/copyleft/gpl.html + * + */ + +package net.sf.oreka.pages; + +import net.sf.oreka.orkweb.ContextListener; +import net.sf.oreka.persistent.User; +import net.sf.oreka.services.UserServiceHbn; + +import org.apache.tapestry.IRequestCycle; +import org.apache.tapestry.PageRedirectException; +import org.apache.tapestry.annotations.Persist; +import org.apache.tapestry.event.PageBeginRenderListener; +import org.apache.tapestry.event.PageEvent; + +public abstract class HomePage extends OrkPage implements PageBeginRenderListener { + + static UserServiceHbn srv = new UserServiceHbn(); + + public abstract String getUsername(); + public abstract void setUsername(String username); + + public abstract String getPassword(); + public abstract void setPassword(String password); + + @Persist + public abstract String getErrorMessage(); + public abstract void setErrorMessage(String msg); + + public HomePage() { + + } + + public void formSubmit(IRequestCycle cycle) { + + if (ContextListener.debugSwitch == true && getUsername() == null) { + // In debug mode, make user = admin by default + setUsername("admin"); + } + + User user = srv.login(getUsername(), getPassword()); + if (user != null) { + getSessionStateObject().setUser(user); + cycle.activate("RecSegments"); + } + else { + setErrorMessage("Invalid login or password"); + } + } + + public void pageBeginRender(PageEvent event) { + + if(getSessionStateObject().getUser() != null) { + RecSegmentsPage pg = (RecSegmentsPage)getRequestCycle().getPage("RecSegments"); + throw new PageRedirectException(pg); + } + } +} diff --git a/orkweb/src/net/sf/oreka/pages/OrkPage.java b/orkweb/src/net/sf/oreka/pages/OrkPage.java new file mode 100644 index 0000000..3ffd40e --- /dev/null +++ b/orkweb/src/net/sf/oreka/pages/OrkPage.java @@ -0,0 +1,15 @@ +package net.sf.oreka.pages; + +import org.apache.tapestry.IAsset; +import org.apache.tapestry.annotations.Asset; +import org.apache.tapestry.annotations.InjectState; +import org.apache.tapestry.html.BasePage; + +public abstract class OrkPage extends BasePage +{ + @InjectState("session-state-object") + public abstract SessionStateObject getSessionStateObject(); + + @Asset("css/orekastyle.css") + public abstract IAsset getGlobalStylesheet(); +} diff --git a/orkweb/src/net/sf/oreka/pages/ProtectedPage.java b/orkweb/src/net/sf/oreka/pages/ProtectedPage.java new file mode 100644 index 0000000..dc2e79f --- /dev/null +++ b/orkweb/src/net/sf/oreka/pages/ProtectedPage.java @@ -0,0 +1,21 @@ +package net.sf.oreka.pages; + +import org.apache.tapestry.PageRedirectException; +import org.apache.tapestry.event.PageEvent; +import org.apache.tapestry.event.PageValidateListener; + + +public abstract class ProtectedPage extends OrkPage implements PageValidateListener +{ + public void pageValidate(PageEvent event) + { + if(getSessionStateObject().isUserLoggedIn()) { + return; // Ok, all fine + } + // Need to authenticate user + HomePage home = (HomePage) getRequestCycle().getPage("Home"); + throw new PageRedirectException(home); + + // #### See if we can set a callback here + } +}
\ No newline at end of file diff --git a/orkweb/src/net/sf/oreka/pages/RecSegmentsPage.java b/orkweb/src/net/sf/oreka/pages/RecSegmentsPage.java index f431c3c..d9f2f22 100644 --- a/orkweb/src/net/sf/oreka/pages/RecSegmentsPage.java +++ b/orkweb/src/net/sf/oreka/pages/RecSegmentsPage.java @@ -31,7 +31,7 @@ import org.apache.tapestry.event.PageEvent; import org.apache.tapestry.event.PageRenderListener; import org.apache.tapestry.html.BasePage; -public abstract class RecSegmentsPage extends BasePage implements PageRenderListener { +public abstract class RecSegmentsPage extends ProtectedPage implements PageRenderListener { static Logger logger = Logger.getLogger(RecSegmentsPage.class); diff --git a/orkweb/src/net/sf/oreka/pages/SessionStateObject.java b/orkweb/src/net/sf/oreka/pages/SessionStateObject.java new file mode 100644 index 0000000..aba5f29 --- /dev/null +++ b/orkweb/src/net/sf/oreka/pages/SessionStateObject.java @@ -0,0 +1,26 @@ +package net.sf.oreka.pages; + +import net.sf.oreka.persistent.User; + +public class SessionStateObject { + + private User user = null; + + public boolean isUserLoggedIn() { + if(user == null) { + return false; + } + return true; + } + + public User getUser() { + return user; + } + + + public void setUser(User user) { + this.user = user; + } + + +} diff --git a/orkweb/src/net/sf/oreka/services/RecSegmentServiceHbn.java b/orkweb/src/net/sf/oreka/services/RecSegmentServiceHbn.java index 26a3746..03289f0 100644 --- a/orkweb/src/net/sf/oreka/services/RecSegmentServiceHbn.java +++ b/orkweb/src/net/sf/oreka/services/RecSegmentServiceHbn.java @@ -20,7 +20,7 @@ import java.text.SimpleDateFormat; import java.util.List; import net.sf.oreka.Direction; -import net.sf.oreka.HibernateManager; +import net.sf.oreka.orkweb.OrkWeb; import net.sf.oreka.persistent.RecSegment; import org.apache.log4j.Level; @@ -92,7 +92,7 @@ public class RecSegmentServiceHbn implements RecSegmentService{ Session session = null; try { - session = HibernateManager.getSession(); + session = OrkWeb.hibernateManager.getSession(); StringBuffer queryString = new StringBuffer("from RecSegment as seg left join seg.recTape as tape left join tape.service as srv "); //StringBuffer queryString = new StringBuffer("from RecSegment as seg "); diff --git a/orkweb/src/net/sf/oreka/services/UserService.java b/orkweb/src/net/sf/oreka/services/UserService.java new file mode 100644 index 0000000..2ac4ff8 --- /dev/null +++ b/orkweb/src/net/sf/oreka/services/UserService.java @@ -0,0 +1,10 @@ +package net.sf.oreka.services; + +import net.sf.oreka.persistent.User; + +public interface UserService { + + public User login(String username, String password); + public boolean changePassword(int userId, String oldPassword, String newPassword); + +} diff --git a/orkweb/src/net/sf/oreka/services/UserServiceHbn.java b/orkweb/src/net/sf/oreka/services/UserServiceHbn.java new file mode 100644 index 0000000..f78947d --- /dev/null +++ b/orkweb/src/net/sf/oreka/services/UserServiceHbn.java @@ -0,0 +1,102 @@ +package net.sf.oreka.services; + +import java.util.ArrayList; + +import net.sf.oreka.HibernateManager; +import net.sf.oreka.orkweb.ContextListener; +import net.sf.oreka.orkweb.OrkWeb; +import net.sf.oreka.persistent.User; + +import org.apache.log4j.Level; +import org.apache.log4j.Logger; +import org.hibernate.HibernateException; +import org.hibernate.Query; +import org.hibernate.Session; +import org.hibernate.Transaction; + +public class UserServiceHbn implements UserService { + + static Logger logger = Logger.getLogger(UserServiceHbn.class); + + public User login(String username, String password) { + + Session hbnSession = null; + User user = null; + + logger.debug("Trying to login user:" + username + " with passwd:" + password); + + try + { + hbnSession = OrkWeb.hibernateManager.getSession(); + + String queryString = new String("from LoginString as ls left join ls.user as user where ls.loginString=:ls"); + if (ContextListener.debugSwitch == false) { + queryString = queryString + " and user.password=:password"; + } + Query query = hbnSession.createQuery(queryString); + query.setString("ls", username); + if (ContextListener.debugSwitch == false) { + query.setString("password", password); + } + ArrayList results = (ArrayList)query.list(); + Object[] row = (Object[])query.uniqueResult(); + if (row != null) { + user = (User)row[1]; + logger.debug("Found userid:" + user.getId() + " for login string:" + username); + } + } + catch ( HibernateException he ) { + logger.error("login: exception:" + he.getClass().getName()); + } + catch (Exception e) + { + logger.error("login: exception:", e); + } + finally { + if(hbnSession != null) {hbnSession.close();} + } + return user; + } + + public boolean changePassword(int userId, String oldPassword, String newPassword) { + + Session hbnSession = null; + Transaction tx = null; + User user = null; + boolean success = false; + + logger.debug("Trying to change password for userid:" + userId); + + try + { + hbnSession = OrkWeb.hibernateManager.getSession(); + + + user = (User)hbnSession.get(User.class, userId); + if(user == null) { + logger.warn("Userid:" + userId + " does not exist"); + } + else { + if(user.getPassword().equals(oldPassword)) { + tx = hbnSession.beginTransaction(); + user.setPassword(newPassword); + hbnSession.save(user); + tx.commit(); + success = true; + logger.debug("Changed password for userid:" + userId); + } + } + } + catch ( HibernateException he ) { + logger.error("changePassword: exception:" + he.getClass().getName()); + } + catch (Exception e) + { + logger.error("changePassword: exception:", e); + } + finally { + if(hbnSession != null) {hbnSession.close();} + } + return success; + } +} |