2 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
4 * The contents of this file are subject to the terms of either the GNU
5 * General Public License Version 2 only ("GPL") or the Common
6 * Development and Distribution License("CDDL") (collectively, the
7 * "License"). You may not use this file except in compliance with the
8 * License. You can obtain a copy of the License at
9 * http://www.netbeans.org/cddl-gplv2.html
10 * or nbbuild/licenses/CDDL-GPL-2-CP. See the License for the
11 * specific language governing permissions and limitations under the
12 * License. When distributing the software, include this License Header
13 * Notice in each file and include the License file at
14 * nbbuild/licenses/CDDL-GPL-2-CP. Sun designates this
15 * particular file as subject to the "Classpath" exception as provided
16 * by Sun in the GPL Version 2 section of the License file that
17 * accompanied this code. If applicable, add the following below the
18 * License Header, with the fields enclosed by brackets [] replaced by
19 * your own identifying information:
20 * "Portions Copyrighted [year] [name of copyright owner]"
24 * Portions Copyrighted 2009 Jaroslav Tulach
27 package cz.xelfi.quoridor.emailer
32 import scala.collection.Map
33 import scala.collection.mutable.HashMap
34 import javax.mail.internet._
35 import javax.mail.Message
36 import javax.mail.Transport
39 def main(args: Array[String]) {
40 if (args == null || args.size != 4) {
41 Console.println("Usage: emailer.jar <quoridor API URL> <login name> <password> <smtp server IP>")
45 val api = new URL(args(0));
47 val id = login(api, args(1), args(2))
54 val props = java.lang.System.getProperties
55 props.put("mail.smtp.host", args(3));
57 val session = javax.mail.Session.getDefaultInstance(props, null)
60 for (val address <- emails(api, id, ret.keySet)) {
61 Console.println("Sending message to " + address)
63 val message = new MimeMessage(session)
64 message.setFrom(new InternetAddress("quoridor@xelfi.cz"))
65 message.addRecipient(Message.RecipientType.TO, new InternetAddress(address))
66 message.setSubject("Play Quoridor!")
67 message.setText("Visit http://quoridor.xelfi.cz")
69 Transport.send(message)
73 def login(url : URL, name : String, password : String) : String = {
74 val u = new URL(url, "login?name=" + name + "&password=" + password);
75 val conn = u.openConnection.asInstanceOf[java.net.HttpURLConnection]
76 conn.setRequestMethod("PUT")
79 val reply = Source.fromInputStream(conn.getInputStream)
80 return reply.mkString("")
83 def allPlayers(url : URL, okDelay : Long): Map[String,List[Node]] = {
84 val u = new URL(url, "games");
85 val conn = u.openConnection
86 conn.setRequestProperty("Accept", "text/xml")
88 val ret = new HashMap[String,List[Node]]
90 val before = System.currentTimeMillis - okDelay
91 val games = XML.load(conn.getInputStream)
92 for (val g : Node <- games \\ "gameId") {
93 val modified = (g \\ "@modified").text.toLong
94 if (modified < before) {
95 val status = (g \\ "@status").text;
97 if (status == "blackMove") {
99 } else if (status == "whiteMove") {
105 val prev = ret.getOrElse(name, Nil)
114 def emails(url : URL, loginID : String, ids : Collection[String]): List[String] = {
115 var ret : List[String] = Nil;
117 val u = new URL(url, "users/" + p + "?loginID=" + loginID)
118 val conn = u.openConnection
119 conn.setRequestProperty("Accept", "text/xml")
120 val xml = XML.load(conn.getInputStream)
121 val res = (xml \\ "property").filter({
122 n => n.attribute("name") match {
123 case Some(attr) => attr.text == "email"
128 ret = res(0).text :: ret;