Author: vdegtyarev Date: Wed Sep 9 08:12:38 2015 New Revision: 1701942 URL: http://svn.apache.org/r1701942 Log: OPENMEETINGS-1125 Connections are shown as expected - merge to trunk.
Added: openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/pages/auth/KickMessageDialog.html openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/pages/auth/KickMessageDialog.java Modified: openmeetings/trunk/singlewebapp/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/UserService.java openmeetings/trunk/singlewebapp/openmeetings-db/src/main/java/org/apache/openmeetings/IApplication.java openmeetings/trunk/singlewebapp/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/user/IUserService.java openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/connection/ConnectionsPanel.html openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/connection/ConnectionsPanel.java openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application.java openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Client.java openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/WebSession.java openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/pages/auth/SignInPage.html openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/pages/auth/SignInPage.java Modified: openmeetings/trunk/singlewebapp/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/UserService.java URL: http://svn.apache.org/viewvc/openmeetings/trunk/singlewebapp/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/UserService.java?rev=1701942&r1=1701941&r2=1701942&view=diff ============================================================================== --- openmeetings/trunk/singlewebapp/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/UserService.java (original) +++ openmeetings/trunk/singlewebapp/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/UserService.java Wed Sep 9 08:12:38 2015 @@ -19,11 +19,13 @@ package org.apache.openmeetings.core.remote; import static org.apache.openmeetings.util.OpenmeetingsVariables.webAppRootKey; +import static org.apache.openmeetings.util.OpenmeetingsVariables.wicketApplicationName; import java.util.Date; import java.util.HashMap; import java.util.List; +import org.apache.openmeetings.IApplication; import org.apache.openmeetings.core.remote.red5.ScopeApplicationAdapter; import org.apache.openmeetings.db.dao.server.ISessionManager; import org.apache.openmeetings.db.dao.server.ServerDao; @@ -37,6 +39,7 @@ import org.apache.openmeetings.db.entity import org.apache.openmeetings.db.entity.user.UserContact; import org.apache.openmeetings.db.util.AuthLevelUtil; import org.apache.openmeetings.db.util.TimezoneUtil; +import org.apache.wicket.Application; import org.red5.logging.Red5LoggerFactory; import org.red5.server.api.scope.IScope; import org.slf4j.Logger; @@ -299,7 +302,21 @@ public class UserService implements IUse return true; } } catch (Exception err) { - log.error("[kickUserByStreamId]", err); + log.error("[kickUserByPublicSID]", err); + } + return null; + } + + @Override + public Boolean kickUserBySessionId(String SID, long userId, String sessionId) { + try { + Long users_id = sessiondataDao.checkSession(SID); + // admin only + if (AuthLevelUtil.hasAdminLevel(userDao.getRights(users_id))) { + ((IApplication)Application.get(wicketApplicationName)).invalidateClient(userId, sessionId); + } + } catch (Exception err) { + log.error("[kickUserBySessionId]", err); } return null; } Modified: openmeetings/trunk/singlewebapp/openmeetings-db/src/main/java/org/apache/openmeetings/IApplication.java URL: http://svn.apache.org/viewvc/openmeetings/trunk/singlewebapp/openmeetings-db/src/main/java/org/apache/openmeetings/IApplication.java?rev=1701942&r1=1701941&r2=1701942&view=diff ============================================================================== --- openmeetings/trunk/singlewebapp/openmeetings-db/src/main/java/org/apache/openmeetings/IApplication.java (original) +++ openmeetings/trunk/singlewebapp/openmeetings-db/src/main/java/org/apache/openmeetings/IApplication.java Wed Sep 9 08:12:38 2015 @@ -37,4 +37,5 @@ public interface IApplication { String getOmContactsLink(); String getOmInvitationLink(String baseUrl, Invitation i); String urlForActivatePage(PageParameters pp); + void invalidateClient(Long userId, String sessionId); } Modified: openmeetings/trunk/singlewebapp/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/user/IUserService.java URL: http://svn.apache.org/viewvc/openmeetings/trunk/singlewebapp/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/user/IUserService.java?rev=1701942&r1=1701941&r2=1701942&view=diff ============================================================================== --- openmeetings/trunk/singlewebapp/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/user/IUserService.java (original) +++ openmeetings/trunk/singlewebapp/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/user/IUserService.java Wed Sep 9 08:12:38 2015 @@ -21,4 +21,6 @@ package org.apache.openmeetings.db.dao.u //FIXME HACK to bypass cross project compilation public interface IUserService { Boolean kickUserByStreamId(String SID, String streamid, long serverId); + + Boolean kickUserBySessionId(String sid, long userId, String sessionId); } Modified: openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/connection/ConnectionsPanel.html URL: http://svn.apache.org/viewvc/openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/connection/ConnectionsPanel.html?rev=1701942&r1=1701941&r2=1701942&view=diff ============================================================================== --- openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/connection/ConnectionsPanel.html (original) +++ openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/connection/ConnectionsPanel.html Wed Sep 9 08:12:38 2015 @@ -44,6 +44,16 @@ <td wicket:id="server"></td> </tr> </tbody> + <tbody wicket:id="containerWeb" > + <tr wicket:id="clientListWeb"> + <td wicket:id="id"></td> + <td wicket:id="login"></td> + <td wicket:id="since"></td> + <td wicket:id="scope"></td> + <td><a wicket:id="kick"><wicket:message key="603" /></a></td> + <td> </td> + </tr> + </tbody> </table> </div> <div class="adminPanelColumnForm"> Modified: openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/connection/ConnectionsPanel.java URL: http://svn.apache.org/viewvc/openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/connection/ConnectionsPanel.java?rev=1701942&r1=1701941&r2=1701942&view=diff ============================================================================== --- openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/connection/ConnectionsPanel.java (original) +++ openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/connection/ConnectionsPanel.java Wed Sep 9 08:12:38 2015 @@ -27,11 +27,14 @@ import java.util.ArrayList; import java.util.Iterator; import java.util.List; +import org.apache.openmeetings.core.remote.UserService; import org.apache.openmeetings.db.dao.server.ISessionManager; import org.apache.openmeetings.db.dao.user.IUserService; import org.apache.openmeetings.db.entity.room.Client; import org.apache.openmeetings.web.admin.AdminPanel; import org.apache.openmeetings.web.admin.SearchableDataView; +import org.apache.openmeetings.web.app.Application; +import org.apache.openmeetings.web.app.WebSession; import org.apache.openmeetings.web.common.ConfirmableAjaxLink; import org.apache.openmeetings.web.common.PagedEntityListPanel; import org.apache.openmeetings.web.data.SearchableDataProvider; @@ -125,6 +128,76 @@ public class ConnectionsPanel extends Ad }; add(container.add(dataView).setOutputMarkupId(true), details.setVisible(false).setOutputMarkupPlaceholderTag(true)); + SearchableDataProvider<org.apache.openmeetings.web.app.Client> sdpWeb = new SearchableDataProvider<org.apache.openmeetings.web.app.Client>(null) { + private static final long serialVersionUID = 1L; + + @Override + public Iterator<? extends org.apache.openmeetings.web.app.Client> iterator(long first, long count) { + List<org.apache.openmeetings.web.app.Client> l = new ArrayList<org.apache.openmeetings.web.app.Client>(Application.getClients()); + return l.subList((int)Math.max(0, first), (int)Math.min(first + count, l.size())).iterator(); + } + + @Override + public long size() { + return Application.getClientsSize(); + } + }; + + final WebMarkupContainer containerWeb = new WebMarkupContainer("containerWeb"); + SearchableDataView<org.apache.openmeetings.web.app.Client> dataViewWeb = new SearchableDataView<org.apache.openmeetings.web.app.Client>("clientListWeb", sdpWeb) { + private static final long serialVersionUID = 1L; + + @Override + protected void populateItem(final Item<org.apache.openmeetings.web.app.Client> item) { + org.apache.openmeetings.web.app.Client c = item.getModelObject(); + item.add(new Label("id", c.getUserId())); + item.add(new Label("login", getBean(UserService.class).getUserById(getSid(), c.getUserId()).getLogin())); + item.add(new Label("since", c.getConnectedSince())); + item.add(new Label("scope", "hibernate")); + item.add(new ConfirmableAjaxLink("kick", 605) { + private static final long serialVersionUID = 1L; + + @Override + public void onClick(AjaxRequestTarget target) { + org.apache.openmeetings.web.app.Client c = item.getModelObject(); + getBean(IUserService.class).kickUserBySessionId(getSid(), c.getUserId() + , c.getSessionId()); + target.add(containerWeb, details.setVisible(false)); + } + }.setEnabled(!c.getSessionId().equals(WebSession.get().getId()))); + item.add(new AjaxEventBehavior("onclick") { + private static final long serialVersionUID = 1L; + + @Override + protected void onEvent(AjaxRequestTarget target) { + Field[] ff = org.apache.openmeetings.web.app.Client.class.getDeclaredFields(); + RepeatingView lines = new RepeatingView("line"); + org.apache.openmeetings.web.app.Client c = item.getModelObject(); + for (Field f : ff) { + int mod = f.getModifiers(); + if (Modifier.isStatic(mod) || Modifier.isTransient(mod)) { + continue; + } + WebMarkupContainer line = new WebMarkupContainer(lines.newChildId()); + line.add(new Label("name", f.getName())); + String val = ""; + try { + f.setAccessible(true); + val = "" + f.get(c); + } catch (Exception e) { + } + line.add(new Label("value", val)); + lines.add(line); + } + details.addOrReplace(lines); + target.add(details.setVisible(true)); + } + }); + item.add(AttributeModifier.append("class", "clickable ui-widget-content")); + } + }; + + add(containerWeb.add(dataViewWeb).setOutputMarkupId(true), details.setVisible(false).setOutputMarkupPlaceholderTag(true)); add(new PagedEntityListPanel("navigator", dataView) { private static final long serialVersionUID = 1L; Modified: openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application.java URL: http://svn.apache.org/viewvc/openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application.java?rev=1701942&r1=1701941&r2=1701942&view=diff ============================================================================== --- openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application.java (original) +++ openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application.java Wed Sep 9 08:12:38 2015 @@ -27,8 +27,10 @@ import static org.springframework.web.co import static org.springframework.web.context.support.WebApplicationContextUtils.getWebApplicationContext; import java.text.MessageFormat; +import java.util.ArrayList; import java.util.Arrays; import java.util.HashSet; +import java.util.List; import java.util.Locale; import java.util.Map; import java.util.Map.Entry; @@ -38,6 +40,9 @@ import java.util.concurrent.ConcurrentHa import javax.servlet.ServletContext; +import org.apache.commons.collections.MapIterator; +import org.apache.commons.collections.keyvalue.MultiKey; +import org.apache.commons.collections.map.MultiKeyMap; import org.apache.openmeetings.IApplication; import org.apache.openmeetings.db.dao.basic.ConfigurationDao; import org.apache.openmeetings.db.dao.label.LabelDao; @@ -97,7 +102,8 @@ import ro.fortsoft.wicket.dashboard.web. public class Application extends AuthenticatedWebApplication implements IApplication { private static final Logger log = getLogger(Application.class, webAppRootKey); private static boolean isInstalled; - private static Map<Long, Set<Client>> ONLINE_USERS = new ConcurrentHashMap<Long, Set<Client>>(); + private static MultiKeyMap ONLINE_USERS = new MultiKeyMap(); + private static Map<String, org.apache.openmeetings.web.app.Client> INVALID_SESSIONS = new ConcurrentHashMap<String, org.apache.openmeetings.web.app.Client>(); private static Map<Long, Set<Client>> ROOMS = new ConcurrentHashMap<Long, Set<Client>>(); //additional maps for faster searching should be created private DashboardContext dashboardContext; @@ -203,25 +209,84 @@ public class Application extends Authent return get().dashboardContext; } - public static void addOnlineUser(Client client) { - long userId = client.getUserId(); - if (!ONLINE_USERS.containsKey(userId)) { - ONLINE_USERS.put(userId, new ConcurrentHashSet<Client>()); - } - ONLINE_USERS.get(userId).add(client); + public synchronized static void addOnlineUser(org.apache.openmeetings.web.app.Client client) { + try { + ONLINE_USERS.put(client.getUserId(), client.getSessionId(), client); + } catch (Exception err) { + log.error("[addOnlineUser]", err); + } } - public static void removeOnlineUser(Client c) { - long userId = c.getUserId(); - if (ONLINE_USERS.containsKey(userId)) { - Set<Client> clients = ONLINE_USERS.get(userId); - clients.remove(c); - if (clients.isEmpty()) { - ONLINE_USERS.remove(userId); + public synchronized static void removeOnlineUser(org.apache.openmeetings.web.app.Client c) { + try { + if (c != null) { + ONLINE_USERS.remove(c.getUserId(), c.getSessionId()); + } + } catch (Exception err) { + log.error("[removeOnlineUser]", err); + } + } + + public static boolean isUserOnline(Long userId) { + MapIterator it = ONLINE_USERS.mapIterator(); + boolean isUserOnline = false; + while (it.hasNext()) { + MultiKey multi = (MultiKey) it.next(); + if (multi.size() > 0 && userId.equals(multi.getKey(0))){ + isUserOnline = true; + break; + } + } + return isUserOnline; + } + + @SuppressWarnings("unchecked") + public static List<org.apache.openmeetings.web.app.Client> getClients() { + return new ArrayList<org.apache.openmeetings.web.app.Client>(ONLINE_USERS.values()); + } + + public static List<org.apache.openmeetings.web.app.Client> getClients(Long userId) { + List<org.apache.openmeetings.web.app.Client> result = new ArrayList<org.apache.openmeetings.web.app.Client>(); + MapIterator it = ONLINE_USERS.mapIterator(); + while (it.hasNext()) { + MultiKey multi = (MultiKey) it.next(); + if (multi.size() > 1 && userId.equals(multi.getKey(0))){ + result.add(getClientByKeys(userId, (String)(multi.getKey(1)))); + break; + } + } + return result; + } + + public static int getClientsSize() { + return ONLINE_USERS.size(); + } + + public static org.apache.openmeetings.web.app.Client getClientByKeys(Long userId, String sessionId) { + return (org.apache.openmeetings.web.app.Client) ONLINE_USERS.get(userId, sessionId); + } + + @Override + public void invalidateClient(Long userId, String sessionId) { + org.apache.openmeetings.web.app.Client client = getClientByKeys(userId, sessionId); + if (client != null) { + if (!INVALID_SESSIONS.containsKey(client.getSessionId())) { + INVALID_SESSIONS.put(client.getSessionId(), client); + removeOnlineUser(client); } } } + public static boolean isInvaldSession(String sessionId) { + return sessionId == null ? false : INVALID_SESSIONS.containsKey(sessionId); + } + + public static void removeInvalidSession(String sessionId) { + if (INVALID_SESSIONS.containsKey(sessionId)){ + INVALID_SESSIONS.remove(sessionId); + } + } + public static Client addUserToRoom(long roomId, int pageId) { if (!ROOMS.containsKey(roomId)) { ROOMS.put(roomId, new ConcurrentHashSet<Client>()); @@ -290,14 +355,6 @@ public class Application extends Authent return false; } - public static boolean isUserOnline(long userId) { - return ONLINE_USERS.containsKey(userId); - } - - public static Set<Client> getClients(long userId) { - return ONLINE_USERS.containsKey(userId) ? ONLINE_USERS.get(userId) : new HashSet<Client>(); - } - //TODO need more safe way FIXME public <T> T _getBean(Class<T> clazz) { WebApplicationContext wac = getWebApplicationContext(getServletContext()); Modified: openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Client.java URL: http://svn.apache.org/viewvc/openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Client.java?rev=1701942&r1=1701941&r2=1701942&view=diff ============================================================================== --- openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Client.java (original) +++ openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Client.java Wed Sep 9 08:12:38 2015 @@ -19,9 +19,11 @@ package org.apache.openmeetings.web.app; import java.io.Serializable; +import java.util.Date; import java.util.HashSet; import java.util.Set; +import org.apache.openmeetings.db.entity.IDataProviderEntity; import org.apache.wicket.protocol.ws.api.registry.IKey; /** @@ -29,7 +31,7 @@ import org.apache.wicket.protocol.ws.api * @author solomax * */ -public class Client implements Serializable { +public class Client implements IDataProviderEntity, Serializable { private static final long serialVersionUID = 1L; public enum Right { @@ -40,8 +42,10 @@ public class Client implements Serializa private long userId; private String uid; private Set<Right> rights = new HashSet<Right>(); + private Date connectedSince; public Client() { + this.connectedSince = new Date(); } public Client(String sessionId, IKey key, long userId) { @@ -52,6 +56,7 @@ public class Client implements Serializa this.sessionId = sessionId; this.pageId = pageId; this.userId = userId; + this.connectedSince = new Date(); } public String getSessionId() { @@ -124,4 +129,24 @@ public class Client implements Serializa public boolean hasRight(Right right) { return rights.contains(Right.moderator) ? true : rights.contains(right); } + + public Date getConnectedSince() { + return connectedSince; + } + + public void setConnectedSince(Date connectedSince) { + this.connectedSince = connectedSince; + } + + @Override + public Long getId() { + // TODO Auto-generated method stub + return null; + } + + @Override + public void setId(Long id) { + // TODO Auto-generated method stub + + } } Modified: openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/WebSession.java URL: http://svn.apache.org/viewvc/openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/WebSession.java?rev=1701942&r1=1701941&r2=1701942&view=diff ============================================================================== --- openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/WebSession.java (original) +++ openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/WebSession.java Wed Sep 9 08:12:38 2015 @@ -24,7 +24,11 @@ import static org.apache.openmeetings.ut import static org.apache.openmeetings.util.OpenmeetingsVariables.CONFIG_DEFAULT_LANG_KEY; import static org.apache.openmeetings.web.app.Application.getAuthenticationStrategy; import static org.apache.openmeetings.web.app.Application.getBean; +import static org.apache.openmeetings.web.app.Application.getClientByKeys; import static org.apache.openmeetings.web.app.Application.getDashboardContext; +import static org.apache.openmeetings.web.app.Application.isInvaldSession; +import static org.apache.openmeetings.web.app.Application.removeInvalidSession; +import static org.apache.openmeetings.web.app.Application.removeOnlineUser; import java.text.DateFormat; import java.text.SimpleDateFormat; @@ -100,6 +104,7 @@ public class WebSession extends Abstract private Long recordingId; private Long loginError = null; private String externalType; + public static boolean kickedByAdmin = false; public final static List<String> AVAILABLE_TIMEZONES = Arrays.asList(TimeZone.getAvailableIDs()); public final static Set<String> AVAILABLE_TIMEZONE_SET = new LinkedHashSet<String>(AVAILABLE_TIMEZONES); @@ -110,6 +115,7 @@ public class WebSession extends Abstract @Override public void invalidate() { + removeOnlineUser(getClientByKeys(getUserId(), get().getId())); super.invalidate(); userId = -1; rights = new HashSet<User.Right>(); @@ -296,6 +302,7 @@ public class WebSession extends Abstract } public static long getLanguage() { + checkIsInvalid(); WebSession session = get(); if (session.languageId < 0) { if (session.isSignedIn()) { @@ -330,6 +337,7 @@ public class WebSession extends Abstract } public static long getUserId() { + checkIsInvalid(); return get().userId; } @@ -362,8 +370,17 @@ public class WebSession extends Abstract } public static Set<Right> getRights() { + checkIsInvalid(); return get().rights; } + + public static void setKickedByAdmin(boolean kicked) { + kickedByAdmin = kicked; + } + + public boolean isKickedByAdmin() { + return kickedByAdmin; + } public OmUrlFragment getArea() { return area; @@ -483,4 +500,14 @@ public class WebSession extends Abstract public long getOmLanguage() { return getLanguage(); } + + private static void checkIsInvalid() { + if (isInvaldSession(get().getId())) { + setKickedByAdmin(true); + removeInvalidSession(get().getId()); + org.apache.wicket.Session session = (org.apache.wicket.Session)get(); + session.invalidate(); + Application.get().restartResponseAtSignInPage(); + } + } } Added: openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/pages/auth/KickMessageDialog.html URL: http://svn.apache.org/viewvc/openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/pages/auth/KickMessageDialog.html?rev=1701942&view=auto ============================================================================== --- openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/pages/auth/KickMessageDialog.html (added) +++ openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/pages/auth/KickMessageDialog.html Wed Sep 9 08:12:38 2015 @@ -0,0 +1,29 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + Licensed to the Apache Software Foundation (ASF) under one + or more contributor license agreements. See the NOTICE file + distributed with this work for additional information + regarding copyright ownership. The ASF licenses this file + to you under the Apache License, Version 2.0 (the + "License"); you may not use this file except in compliance + with the License. You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, + software distributed under the License is distributed on an + "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + KIND, either express or implied. See the License for the + specific language governing permissions and limitations + under the License. + +--> +<html xmlns:wicket="http://wicket.apache.org"> + <wicket:panel> + <table> + <tr> + <td wicket:id="message">[message]</td> + </tr> + </table> + </wicket:panel> +</html> \ No newline at end of file Added: openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/pages/auth/KickMessageDialog.java URL: http://svn.apache.org/viewvc/openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/pages/auth/KickMessageDialog.java?rev=1701942&view=auto ============================================================================== --- openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/pages/auth/KickMessageDialog.java (added) +++ openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/pages/auth/KickMessageDialog.java Wed Sep 9 08:12:38 2015 @@ -0,0 +1,75 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License") + you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +package org.apache.openmeetings.web.pages.auth; + +import org.apache.openmeetings.web.app.Application; +import org.apache.openmeetings.web.app.WebSession; +import org.apache.wicket.ajax.AjaxRequestTarget; +import org.apache.wicket.core.request.handler.IPartialPageRequestHandler; +import org.apache.wicket.markup.html.basic.Label; + +import com.googlecode.wicket.jquery.core.JQueryBehavior; +import com.googlecode.wicket.jquery.core.Options; +import com.googlecode.wicket.jquery.ui.widget.dialog.AbstractDialog; +import com.googlecode.wicket.jquery.ui.widget.dialog.DialogButton; + +public class KickMessageDialog extends AbstractDialog<String> { + + /** + * + */ + private static final long serialVersionUID = 1L; + + public KickMessageDialog(String id) { + super(id, ""); + add(new Label("message", Application.getString(606))); + } + + @Override + protected void onInitialize() { + super.onInitialize(); + add(new JQueryBehavior(JQueryWidget.getSelector(this), "dialog") { + private static final long serialVersionUID = 1L; + + @Override + protected String $() { + return this.$(Options.asString("open")); + } + }); + }; + + @Override + public void onConfigure(JQueryBehavior behavior) { + super.onConfigure(behavior); + behavior.setOption("closeOnEscape", false); + behavior.setOption("dialogClass", Options.asString("no-close")); + behavior.setOption("resizable", false); + } + + public String getOnClickJavaScript() { + return "$('#" + getButtons().get(0).getMarkupId() +"').click(function(e){$('#" + getMarkupId() +"').close(); })"; + } + + @Override + public void onClose(IPartialPageRequestHandler arg0, DialogButton arg1) { + WebSession.setKickedByAdmin(false); + Application.get().restartResponseAtSignInPage(); + } + +} Modified: openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/pages/auth/SignInPage.html URL: http://svn.apache.org/viewvc/openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/pages/auth/SignInPage.html?rev=1701942&r1=1701941&r2=1701942&view=diff ============================================================================== --- openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/pages/auth/SignInPage.html (original) +++ openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/pages/auth/SignInPage.html Wed Sep 9 08:12:38 2015 @@ -38,5 +38,6 @@ <div wicket:id="signin"></div> <div wicket:id="register"></div> <div wicket:id="forget"></div> + <div wicket:id="kick"></div> </wicket:extend> </html> Modified: openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/pages/auth/SignInPage.java URL: http://svn.apache.org/viewvc/openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/pages/auth/SignInPage.java?rev=1701942&r1=1701941&r2=1701942&view=diff ============================================================================== --- openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/pages/auth/SignInPage.java (original) +++ openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/pages/auth/SignInPage.java Wed Sep 9 08:12:38 2015 @@ -75,6 +75,7 @@ public class SignInPage extends BaseInit private static final long serialVersionUID = 1L; private static final Logger log = Red5LoggerFactory.getLogger(SignInPage.class, webAppRootKey); private SignInDialog d; + private KickMessageDialog m; static boolean allowRegister() { return "1".equals(getBean(ConfigurationDao.class).getConfValue(CONFIG_FRONTEND_REGISTER_KEY, String.class, "0")); @@ -137,7 +138,9 @@ public class SignInPage extends BaseInit d.setForgetPasswordDialog(f); r.setSignInDialog(d); f.setSignInDialog(d); - add(d, r.setVisible(allowRegister()), f); + m = new KickMessageDialog("kick"); + add(d.setVisible(!WebSession.get().isKickedByAdmin()), + r.setVisible(allowRegister()), f, m.setVisible(WebSession.get().isKickedByAdmin())); } public SignInPage() { @@ -147,8 +150,7 @@ public class SignInPage extends BaseInit @Override public void renderHead(IHeaderResponse response) { super.renderHead(response); - //TODO need to be removed if autoOen will be enabled - response.render(OnDomReadyHeaderItem.forScript("$('#" + d.getMarkupId() + "').dialog('open');")); + response.render(OnDomReadyHeaderItem.forScript(m.getOnClickJavaScript())); response.render(new CssContentHeaderItem(".no-close .ui-dialog-titlebar-close { display: none; }", "dialog-noclose", "")); }