`

openfire修改程序,使得在同一个分组里的用户,自动和该组admin互为好友

 
阅读更多

openfire修改程序,使得在同一个分组里的用户,自动和该组admin互为好友,另外当把用户从组里删除时,自动删除和admin之间的好友列表

在group-edit.jsp中,修改程序,标记为黑体为新添加的,

注意在create和update之间需要sleep一段实践,不然可能会造成客户端(spark)处理会有问题,因为spark是并发处理消息的,

<%  // Get parameters
    boolean add = request.getParameter("add") != null;
    boolean delete = request.getParameter("remove") != null;
    boolean updateMember = request.getParameter("updateMember") != null;
    boolean update = request.getParameter("save") != null;
    boolean cancel = request.getParameter("cancel") != null;
    String username = ParamUtils.getParameter(request, "username");
    String [] adminIDs = ParamUtils.getParameters(request, "admin");
    String [] deleteMembers = ParamUtils.getParameters(request, "delete");
    String groupName = ParamUtils.getParameter(request, "group");
    GroupManager groupManager = webManager.getGroupManager();
    boolean groupInfoChanged = ParamUtils.getBooleanParameter(request, "groupChanged", false);


    Map<String,String> errors = new HashMap<String,String>();


    // Get the presence manager
    PresenceManager presenceManager = webManager.getPresenceManager();
    UserManager userManager = webManager.getUserManager();


    boolean enableRosterGroups = ParamUtils.getBooleanParameter(request,"enableRosterGroups");
    boolean shareAdditional = ParamUtils.getParameter(request, "shareContactList") != null;
    String groupDisplayName = ParamUtils.getParameter(request,"groupDisplayName");
    String showGroup = ParamUtils.getParameter(request,"showGroup");
    String[] groupNames = ParamUtils.getParameters(request, "groupNames");


    Group group = groupManager.getGroup(groupName);
    boolean success;
    StringBuffer errorBuf = new StringBuffer();


    if (cancel) {
        response.sendRedirect("group-summary.jsp");
        return;
    }


    if (update) {
        if (enableRosterGroups && (groupDisplayName == null || groupDisplayName.trim().length() == 0)) {
            errors.put("groupDisplayName", "");
        }
        if (errors.isEmpty()) {
            if (enableRosterGroups) {
                if (showGroup == null || !shareAdditional) {
                    showGroup = "onlyGroup";
                }
                if ("spefgroups".equals(showGroup)) {
                    showGroup = "onlyGroup";
                }
                else {
                    groupNames = new String[] {};
                }
                group.getProperties().put("sharedRoster.showInRoster", showGroup);
                if (groupDisplayName != null) {
                    group.getProperties().put("sharedRoster.displayName", groupDisplayName);
                }
                group.getProperties().put("sharedRoster.groupList", toList(groupNames, "UTF-8"));


                if (!SecurityAuditManager.getSecurityAuditProvider().blockGroupEvents()) {
                    // Log the event
                    webManager.logEvent("enabled roster groups for "+groupName, "showinroster = "+showGroup+"\ndisplayname = "+groupDisplayName+"\ngrouplist = "+toList(groupNames, "UTF-8"));
                }
            }
            else {
                group.getProperties().put("sharedRoster.showInRoster", "nobody");
                group.getProperties().put("sharedRoster.displayName", "");
                group.getProperties().put("sharedRoster.groupList", "");


                if (!SecurityAuditManager.getSecurityAuditProvider().blockGroupEvents()) {
                    // Log the event
                    webManager.logEvent("disabled roster groups for "+groupName, null);
                }
            }


            // Get admin list and compare it the admin posted list.
            response.sendRedirect("group-edit.jsp?group=" + URLEncoder.encode(groupName, "UTF-8") + "&groupChanged=true");
            return;
        }
        else {
            // Continue editing since there are some errors
            updateMember = false;
        }
    }




    if (updateMember) {
        Set<JID> adminIDSet = new HashSet<JID>();
        for (String adminID : adminIDs) {
            JID newAdmin = new JID(adminID);
            adminIDSet.add(newAdmin);
            boolean isAlreadyAdmin = group.getAdmins().contains(newAdmin);
            if (!isAlreadyAdmin) {
                // Add new admin
                group.getAdmins().add(newAdmin);              
                Collection<JID> members = group.getMembers();
                for(JID member:members){
                Roster roster = webManager.getRosterManager().getRoster(member.getNode());
                List<String> groups = new ArrayList<String>();
                groups.add("\u6211\u7684\u597d\u53cb");
                String nickName = UserManager.getInstance().getUser(newAdmin.getNode()).getName();
                    roster.createRosterItem(newAdmin, nickName, groups, true, true);
                    
                    Roster roster1 = webManager.getRosterManager().getRoster(newAdmin.getNode());
                    String nickName1 = UserManager.getInstance().getUser(member.getNode()).getName();
                    roster1.createRosterItem(member, nickName1, groups, true, true);
                    
                    try{
                    Thread.sleep(1000);
                    }catch(Exception e){
                    
                    }
                    RosterItem item = roster.getRosterItem(newAdmin);
                    item.setNickname(nickName);
                    item.setSubStatus(RosterItem.SUB_BOTH);
                    roster.updateRosterItem(item);
                    
                    RosterItem item1 = roster1.getRosterItem(member);
                    item1.setNickname(nickName1);
                    item1.setSubStatus(RosterItem.SUB_BOTH);
                    roster1.updateRosterItem(item1);
                }
            }
        }
        Collection<JID> admins = Collections.unmodifiableCollection(group.getAdmins());
        Set<JID> removeList = new HashSet<JID>();
        for (JID admin : admins) {
            if (!adminIDSet.contains(admin)) {
                removeList.add(admin);
            }
        }
        Collection<JID> members = group.getMembers();//JUSTIN added
        for (JID member : removeList) {
            group.getMembers().add(member);                  
            for(JID jid:members){
            Roster roster = webManager.getRosterManager().getRoster(jid.getNode());
                roster.deleteRosterItem(member,false);                
                
                Roster roster1 = webManager.getRosterManager().getRoster(member.getNode());
                roster1.deleteRosterItem(jid,false);                 
            }
        }
        if (!SecurityAuditManager.getSecurityAuditProvider().blockGroupEvents()) {
            // Log the event
            // TODO: Should log more here later
            webManager.logEvent("updated group membership for "+groupName, null);
        }
        // Get admin list and compare it the admin posted list.
        response.sendRedirect("group-edit.jsp?group=" + URLEncoder.encode(groupName, "UTF-8") + "&updatesuccess=true");
        return;
    }
    else if (add && username != null) {
        int count = 0;
        username = username.trim();
        username = username.toLowerCase();


        if (username.indexOf('@') != -1) {
            try {
                UserManager.getInstance().getUser(JID.escapeNode(username));
                // That means that this user has an email address as their node.
                username = JID.escapeNode(username);
            }
            catch (UserNotFoundException e) {


            }
        }


        // Add to group as member by default.
        try {
            boolean added;
            if (username.indexOf('@') == -1) {
                // No @ was found so assume this is a JID of a local user
                username = JID.escapeNode(username);
                username = Stringprep.nodeprep(username);
                User user = UserManager.getInstance().getUser(username);
                JID newUser = webManager.getXMPPServer().createJID(username, null);
                added = group.getMembers().add(newUser);                
                Collection<JID> admins = group.getAdmins();
                for(JID admin:admins){
                Roster roster = webManager.getRosterManager().getRoster(admin.getNode());
                List<String> groups = new ArrayList<String>();
                groups.add("\u6211\u7684\u597d\u53cb");
                    roster.createRosterItem(newUser, user.getName(), groups, true, true);
                    
                    Roster roster1 = webManager.getRosterManager().getRoster(newUser.getNode());
                    String nickName1 = UserManager.getInstance().getUser(admin.getNode()).getName();
                    roster1.createRosterItem(admin, nickName1, groups, true, true);
                    
                    try{
                    Thread.sleep(1000);
                    }catch(Exception e){
                    
                    }
                    
                    RosterItem item = roster.getRosterItem(newUser);
                    item.setNickname(user.getName());
                    item.setSubStatus(RosterItem.SUB_BOTH);
                    roster.updateRosterItem(item);
                    
                    RosterItem item1 = roster1.getRosterItem(admin);
                    item1.setNickname(nickName1);
                    item1.setSubStatus(RosterItem.SUB_BOTH);
                    roster1.updateRosterItem(item1);
                }
            }
            else {
                // Admin entered a JID. Add the JID directly to the list of group members
                JID newUser = new JID(username);
                added = group.getMembers().add(newUser);               
                Collection<JID> admins = group.getAdmins();
                for(JID admin:admins){
                Roster roster = webManager.getRosterManager().getRoster(admin.getNode());
                List<String> groups = new ArrayList<String>();
                groups.add("\u6211\u7684\u597d\u53cb");
                String nickName = UserManager.getInstance().getUser(username).getName();
                    roster.createRosterItem(newUser, nickName, groups, true, true);
                    
                    Roster roster1 = webManager.getRosterManager().getRoster(newUser.getNode());
                    String nickName1 = UserManager.getInstance().getUser(admin.getNode()).getName();
                    roster1.createRosterItem(admin, nickName1, groups, true, true);
                    
                    try{
                    Thread.sleep(1000);
                    }catch(Exception e){
                    
                    }
                    
                    RosterItem item = roster.getRosterItem(newUser);
                    item.setNickname(nickName);
                    item.setSubStatus(RosterItem.SUB_BOTH);
                    roster.updateRosterItem(item);
                    
                    RosterItem item1 = roster1.getRosterItem(admin);
                    item1.setNickname(nickName1);
                    item1.setSubStatus(RosterItem.SUB_BOTH);
                    roster1.updateRosterItem(item1);
                }
                if (!SecurityAuditManager.getSecurityAuditProvider().blockGroupEvents()) {
                    // Log the event
                    webManager.logEvent("added group member to "+groupName, "username = "+username);
                }
            }


            if (added) {
                count++;
            }
            else {
                errorBuf.append("<br>").append(
                        LocaleUtils.getLocalizedString("group.edit.already_user", Arrays.asList(username)));
            }


        }
        catch (Exception e) {
            Log.warn("Problem adding new user to existing group", e);
            errorBuf.append("<br>").append(
                    LocaleUtils.getLocalizedString("group.edit.inexistent_user", Arrays.asList(username)));
        }
        if (count > 0) {
            response.sendRedirect("group-edit.jsp?group=" +
                    URLEncoder.encode(groupName, "UTF-8") + "&success=true");
            return;
        }
        else {
            success = false;
            add = true;
        }


    }
    else if(add && username == null){
        add = false;
    }
    else if (delete) {
        for (String deleteMember : deleteMembers) {
            JID member = new JID(deleteMember);           
            if(group.getAdmins().contains(member)){
            for(JID jid:group.getMembers()){
                Roster roster = webManager.getRosterManager().getRoster(jid.getNode());
                    roster.deleteRosterItem(member,false);                
                    
                    Roster roster1 = webManager.getRosterManager().getRoster(member.getNode());
                    roster1.deleteRosterItem(jid,false);                 
                }
            }else{
            for(JID jid:group.getAdmins()){
                Roster roster = webManager.getRosterManager().getRoster(jid.getNode());
                    roster.deleteRosterItem(member,false);                
                    
                    Roster roster1 = webManager.getRosterManager().getRoster(member.getNode());
                    roster1.deleteRosterItem(jid,false);                 
                }
            }
            group.getMembers().remove(member);
            group.getAdmins().remove(member);
        }
        response.sendRedirect("group-edit.jsp?group=" + URLEncoder.encode(groupName, "UTF-8") + "&deletesuccess=true");
        return;
    }
    success = groupInfoChanged || "true".equals(request.getParameter("success")) ||
            "true".equals(request.getParameter("deletesuccess")) ||
            "true".equals(request.getParameter("updatesuccess")) ||
            "true".equals(request.getParameter("creategroupsuccess"));


    if (errors.size() == 0) {
        showGroup = group.getProperties().get("sharedRoster.showInRoster");
        enableRosterGroups = !"nobody".equals(showGroup);
        shareAdditional = "everybody".equals(showGroup);
        if ("onlyGroup".equals(showGroup)) {
            String glist = group.getProperties().get("sharedRoster.groupList");
            List<String> l = new ArrayList<String>();
            if (glist != null) {
                StringTokenizer tokenizer = new StringTokenizer(glist,",\t\n\r\f");
                while (tokenizer.hasMoreTokens()) {
                    String tok = tokenizer.nextToken().trim();
                    l.add(tok.trim());
                }
                if (!l.isEmpty()) {
                    shareAdditional = true;
                }
            }
            groupNames = l.toArray(new String[]{});
        }
        groupDisplayName = group.getProperties().get("sharedRoster.displayName"); 
    }
%>

 

分享到:
评论

相关推荐

    openfire好友关系解析

    Openfire 是一个基于 XMPP 协议的实时通信服务器,它允许用户进行即时消息传递、群聊和其他形式的交互。在 Openfire 中,好友关系管理是核心功能之一,涉及到数据包交换和数据库状态的更新。以下是对 Openfire 好友...

    [经典]Openfire整合现有用户

    - **创建用户组**:在Openfire管理控制台,管理员可以创建用户组,将用户分配到不同的组,便于权限管理和沟通组织。 - **扩展用户组**:通过API或插件,可以实现动态创建和管理用户组,比如根据部门或项目自动...

    android Openfire的测试客户端程序

    在Android平台上,为了与Openfire服务器进行交互,通常需要一个客户端应用程序来完成连接、登录、发送和接收消息等功能。这个“android Openfire的测试客户端程序”就是这样一个示例应用,用于开发者调试和理解...

    openfire添加好友

    在Openfire中,用户可以通过添加好友来建立联系人列表,从而实现消息的发送和接收。下面将详细解释Openfire中添加好友的过程以及涉及到的相关概念。 1. **Presence包与类型**: - `unavailable`: 用户下线或者离线...

    OpenFire所有在线用户

    这里的"127.0.0.1"是本地主机地址,"8080"是OpenFire服务器运行的端口,"/plugins"表示服务器提供的插件服务,"onlineuser"可能是处理在线用户查询的特定插件名,而"getallusers"则可能是该插件提供的一个API端点,...

    openfire 集成用户数据库

    在企业级即时通讯系统部署过程中,为了确保数据的一致性和提高用户体验,通常会遇到一个关键需求:将Openfire服务器与现有的用户数据库进行集成。这样的集成可以实现统一的用户认证管理、避免数据冗余,并能充分利用...

    MQ和openfire 即时通讯【升级版】

    本文将深入探讨MQ与Openfire的结合,以及如何实现一个增强版的即时通讯系统,特别是在信息推送、个性化特性以及日志管理方面的改进。 首先,ActiveMQ是Apache软件基金会下的一个开源消息中间件,它是基于Java ...

    基于openfire服务器的的IM系统源程序

    Qt是一个跨平台的C++图形用户界面应用程序开发框架,而QXMPP则是一个用于Qt的轻量级XMPP库,它允许开发者轻松地在Qt应用程序中实现XMPP功能,包括登录、发送和接收消息、管理联系人列表等。 【知识点详解】 1. **...

    openfire插件,用户入群加web接口

    "mucautojoin"这个文件名可能是这个实现用户自动入群功能的插件名称,它可能包含了必要的代码和配置文件,用于处理用户加入群组的逻辑。 在Openfire中,要实现用户入群的Web接口,通常需要以下步骤: 1. **安装...

    openfire_4_0_1

    下面我们将深入探讨Openfire的核心特性和在Windows上的安装与配置过程。 1. **Openfire的主要特性** - **跨平台性**:由于其基于Java,Openfire可以在多种操作系统上运行,包括Windows、Linux和Mac OS。 - **XMPP...

    openfire表结构

    1. ofGroup: 这个表存储用户组的信息,包括组名称和描述。每个组都有一个唯一的主键`groupName`,允许快速查找和操作特定的用户组。`description`字段则用于记录组的详细描述。 2. ofGroupProp: 此表关联了组属性,...

    Openfire安装配置手册

    Openfire是一个基于XMPP协议的即时通讯服务器,提供了强大的聊天功能和插件架构。本手册将指导您搭建开发环境,安装和配置Openfire服务器。 一、 搭建开发环境 要搭建开发环境,需要安装以下软件: * windowsXP...

    openfire3.9.3 WINDOWS安装包

    1. **Openfire 3.9.3 版本**:这个版本是Openfire的一个稳定发行版,发布于2015年。它包含了对之前版本的一些错误修复、性能优化以及新功能的添加。对于Windows操作系统,它提供了易于安装的.exe文件,方便用户快速...

    基于openfire 仿QQ

    总的来说,"基于Openfire 仿QQ"项目展示了如何利用开源技术实现一个功能完备的即时通讯应用,涉及到Android客户端开发、服务器集成、即时通讯协议、用户体验优化等多个方面,对于学习和研究即时通讯系统有着很高的...

    第一个openfire插件源码及说明

    Openfire是一款开源的即时通讯(IM)服务器,它基于XMPP协议,允许用户进行实时通信和协作。在Openfire中,插件是扩展其功能的关键方式。本教程将引导初学者了解如何开发第一个Openfire插件,从而深入理解Openfire的...

    openfire webchat开发包

    3. **Webchat**:Openfire Webchat是Openfire附带的一个Web应用程序,允许用户通过浏览器与Openfire服务器建立连接并进行即时通讯。它通常依赖于Strophe.js,这是一个JavaScript库,实现了XMPP协议的客户端部分。 4...

    openfire xmpp协议源码

    1. 数据安全:在Android客户端和Openfire服务器间使用SSL/TLS加密,保护用户隐私。 2. 性能优化:合理设计消息推送策略,避免过度耗电和网络资源。 3. 异常处理:对网络断开、服务器异常等状况进行优雅的处理,提高...

    openfire的用户接收消息计数器

    在Openfire的上下文中,这个计数器可能是一个独立的应用,能够连接到Openfire服务器,通过指定的用户身份(user_no和密码)登录,并实时记录接收的消息数目。 `config.ini`文件是配置文件,包含了连接到Openfire...

    openfire群聊持久化插件

    然而,标准的Openfire配置可能会遇到一个问题:当用户退出群聊房间后,该房间可能会被销毁,导致所有聊天记录丢失,这对于需要保留历史记录的团队来说是一个显著的不足。为了解决这个问题,"openfire群聊持久化插件...

Global site tag (gtag.js) - Google Analytics