001/** 002 * 003 * Copyright 2016 Florian Schmaus 004 * 005 * This file is part of smack-repl. 006 * 007 * smack-repl is free software; you can redistribute it and/or modify 008 * it under the terms of the GNU General Public License as published by 009 * the Free Software Foundation; either version 3 of the License, or 010 * (at your option) any later version. 011 * 012 * This program is distributed in the hope that it will be useful, 013 * but WITHOUT ANY WARRANTY; without even the implied warranty of 014 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 015 * GNU General Public License for more details. 016 * 017 * You should have received a copy of the GNU General Public License 018 * along with this program; if not, write to the Free Software Foundation, 019 * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA 020 */ 021package org.igniterealtime.smack.smackrepl; 022 023import java.io.IOException; 024import java.security.KeyManagementException; 025import java.security.NoSuchAlgorithmException; 026 027import org.jivesoftware.smack.SmackException; 028import org.jivesoftware.smack.SmackException.NoResponseException; 029import org.jivesoftware.smack.SmackException.NotConnectedException; 030import org.jivesoftware.smack.XMPPConnection; 031import org.jivesoftware.smack.XMPPException; 032import org.jivesoftware.smack.XMPPException.XMPPErrorException; 033import org.jivesoftware.smack.tcp.XMPPTCPConnection; 034import org.jivesoftware.smack.tcp.XMPPTCPConnectionConfiguration; 035import org.jivesoftware.smack.util.TLSUtils; 036 037import org.jivesoftware.smackx.iqregister.AccountManager; 038 039import org.jxmpp.jid.DomainBareJid; 040import org.jxmpp.jid.impl.JidCreate; 041import org.jxmpp.jid.parts.Localpart; 042 043public class XmppTools { 044 045 public static void main(String[] args) throws SmackException, IOException, XMPPException, InterruptedException, 046 KeyManagementException, NoSuchAlgorithmException { 047 boolean one = createAccount("xmpp.foobar.io", "smack1", "smack1"); 048 boolean two = createAccount("xmpp.foobar.io", "smack2", "smack2"); 049 // CHECKSTYLE:OFF 050 System.out.println("Account created: " + one + ' ' + two); 051 // CHECKSTYLE:ON 052 } 053 054 public static boolean supportsIbr(String xmppDomain) throws SmackException, IOException, XMPPException, 055 InterruptedException, KeyManagementException, NoSuchAlgorithmException { 056 DomainBareJid xmppDomainJid = JidCreate.domainBareFrom(xmppDomain); 057 return supportsIbr(xmppDomainJid); 058 } 059 060 public static boolean supportsIbr(DomainBareJid xmppDomain) throws SmackException, IOException, XMPPException, 061 InterruptedException, KeyManagementException, NoSuchAlgorithmException { 062 XMPPTCPConnectionConfiguration.Builder configBuilder = XMPPTCPConnectionConfiguration.builder() 063 .setXmppDomain(xmppDomain); 064 TLSUtils.acceptAllCertificates(configBuilder); 065 XMPPTCPConnectionConfiguration config = configBuilder.build(); 066 XMPPTCPConnection connection = new XMPPTCPConnection(config); 067 connection.connect(); 068 try { 069 return supportsIbr(connection); 070 } finally { 071 connection.disconnect(); 072 } 073 } 074 075 public static boolean supportsIbr(XMPPConnection connection) 076 throws NoResponseException, XMPPErrorException, NotConnectedException, InterruptedException { 077 AccountManager accountManager = AccountManager.getInstance(connection); 078 return accountManager.supportsAccountCreation(); 079 } 080 081 public static boolean createAccount(String xmppDomain, String username, String password) 082 throws KeyManagementException, NoSuchAlgorithmException, SmackException, IOException, XMPPException, 083 InterruptedException { 084 DomainBareJid xmppDomainJid = JidCreate.domainBareFrom(xmppDomain); 085 Localpart localpart = Localpart.from(username); 086 return createAccount(xmppDomainJid, localpart, password); 087 } 088 089 public static boolean createAccount(DomainBareJid xmppDomain, Localpart username, String password) 090 throws KeyManagementException, NoSuchAlgorithmException, SmackException, IOException, XMPPException, 091 InterruptedException { 092 XMPPTCPConnectionConfiguration.Builder configBuilder = XMPPTCPConnectionConfiguration.builder() 093 .setXmppDomain(xmppDomain); 094 TLSUtils.acceptAllCertificates(configBuilder); 095 XMPPTCPConnectionConfiguration config = configBuilder.build(); 096 XMPPTCPConnection connection = new XMPPTCPConnection(config); 097 connection.connect(); 098 try { 099 if (!supportsIbr(connection)) 100 return false; 101 102 AccountManager accountManager = AccountManager.getInstance(connection); 103 accountManager.createAccount(username, password); 104 return true; 105 } finally { 106 connection.disconnect(); 107 } 108 } 109}