001package var.mom.jms.tasks;
002
003import java.util.Random;
004
005import javax.jms.Connection;
006import javax.jms.ConnectionFactory;
007import javax.jms.JMSException;
008import javax.jms.Message;
009import javax.jms.MessageConsumer;
010import javax.jms.MessageListener;
011import javax.jms.MessageProducer;
012import javax.jms.Queue;
013import javax.jms.Session;
014import javax.jms.TextMessage;
015import javax.jms.Topic;
016import javax.naming.Context;
017import javax.naming.InitialContext;
018import javax.naming.NamingException;
019
020public class PasswordCandidateGenerator implements MessageListener {
021        private Connection connection;
022        private Session session;
023        private MessageProducer producer;
024        private MessageConsumer consumer;
025        private Random random;
026        private boolean stopped = false;
027
028        public PasswordCandidateGenerator() throws NamingException, JMSException {
029                this.random = new Random();
030                Context ctx = new InitialContext();
031                ConnectionFactory factory = (ConnectionFactory) ctx.lookup("ConnectionFactory");
032                this.connection = factory.createConnection();
033                this.session = this.connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
034                Queue taskQueue = (Queue) ctx.lookup(Conf.TASK_QUEUE);
035                this.producer = this.session.createProducer(taskQueue);
036                Topic successTopic = (Topic) ctx.lookup(Conf.SUCCESS_TOPIC);
037                this.consumer = this.session.createConsumer(successTopic);
038                this.consumer.setMessageListener(this);
039                this.connection.start();
040        }
041
042        @Override
043        public void onMessage(Message message) {
044                this.stopped = true;
045                System.out.println("Password gefunden. PasswordCandidateGenerator wird gestoppt.");
046        }
047
048        public void sendMessage(String text) throws JMSException {
049                TextMessage message = this.session.createTextMessage();
050                message.setText(text);
051                this.producer.send(message);
052        }
053
054        public String generatePasswordCandidate(int length) {
055                StringBuilder buffer = new StringBuilder(length);
056                final int letterA = 97;
057                final int letterZ = 122;
058                for (int i = 0; i < length; i++) {
059                        buffer.append((char) (letterA + (int) (this.random.nextFloat() * ((letterZ - letterA) + 1))));
060                }
061                return buffer.toString();
062        }
063
064        public static void main(String[] args) {
065                PasswordCandidateGenerator node = null;
066                try {
067                        node = new PasswordCandidateGenerator();
068                        while (!node.stopped) {
069                                node.sendMessage(node.generatePasswordCandidate(8));
070                        }
071                } catch (NamingException | JMSException e) {
072                        System.err.println(e);
073                } finally {
074                        try {
075                                if ((node != null) && (node.producer != null)) {
076                                        node.producer.close();
077                                }
078                                if ((node != null) && (node.session != null)) {
079                                        node.session.close();
080                                }
081                                if ((node != null) && (node.connection != null)) {
082                                        node.connection.close();
083                                }
084                        } catch (JMSException e) {
085                                System.err.println(e);
086                        }
087                }
088        }
089
090}