/** * $RCSfile$ * $Revision$ * $Date$ * * Copyright (C) 2004 Jive Software. All rights reserved. * * This software is published under the terms of the GNU Public License (GPL), * a copy of which is included in this distribution. */ package org.jivesoftware.messenger.spi; import org.jivesoftware.messenger.Presence; import org.jivesoftware.messenger.PresenceManager; import org.jivesoftware.messenger.XMPPAddress; import org.jivesoftware.messenger.auth.AuthToken; import org.jivesoftware.messenger.auth.Permissions; import org.jivesoftware.messenger.auth.UnauthorizedException; import org.jivesoftware.messenger.user.User; import java.util.Collection; /** * Enforces security constraints. * * @author Iain Shigeoka */ public class PresenceManagerProxy implements PresenceManager { private PresenceManager manager; private AuthToken authToken; private Permissions permissions; public PresenceManagerProxy(PresenceManager manager, AuthToken authToken, Permissions permissions) { this.manager = manager; this.authToken = authToken; this.permissions = permissions; } public boolean isAvailable(User user) { return manager.isAvailable(user); } public Presence getPresence(User user) { return manager.getPresence(user); } public Collection<Presence> getPresences(User user) { return manager.getPresences(user); } public int getOnlineGuestCount() { return manager.getOnlineGuestCount(); } public Collection<User> getOnlineUsers() { return manager.getOnlineUsers(); } public Collection<User> getOnlineUsers(boolean ascending, int sortField) { return manager.getOnlineUsers(ascending, sortField); } public Collection<User> getOnlineUsers(boolean ascending, int sortField, int numResults) { return manager.getOnlineUsers(ascending, sortField, numResults); } public Presence createPresence(User user, String uid) throws UnauthorizedException { if (permissions.hasPermission(Permissions.SYSTEM_ADMIN | Permissions.USER_ADMIN)) { return manager.createPresence(user, uid); } else { throw new UnauthorizedException(); } } public void setOffline(Presence presence) throws UnauthorizedException { if (presence.getUsername().equals(authToken.getUsername()) || permissions.hasPermission(Permissions.SYSTEM_ADMIN | Permissions.USER_ADMIN)) { manager.setOffline(presence); } else { throw new UnauthorizedException(); } } public void setOffline(XMPPAddress jid) throws UnauthorizedException { if (permissions.hasPermission(Permissions.SYSTEM_ADMIN | Permissions.USER_ADMIN)) { manager.setOffline(jid); } else { throw new UnauthorizedException(); } } public void probePresence(String prober, XMPPAddress probee) throws UnauthorizedException { if (permissions.hasPermission(Permissions.SYSTEM_ADMIN | Permissions.USER_ADMIN)) { manager.probePresence(prober, probee); } else { throw new UnauthorizedException(); } } public void probePresence(XMPPAddress prober, XMPPAddress probee) throws UnauthorizedException { if (permissions.hasPermission(Permissions.SYSTEM_ADMIN | Permissions.USER_ADMIN)) { manager.probePresence(prober, probee); } else { throw new UnauthorizedException(); } } }