diff options
Diffstat (limited to '')
-rw-r--r-- | infrastructure/com.etherpad/easysync2support.scala (renamed from trunk/infrastructure/com.etherpad/easysync2support.scala) | 0 | ||||
-rw-r--r-- | infrastructure/com.etherpad/main.scala (renamed from trunk/infrastructure/com.etherpad/main.scala) | 0 | ||||
-rw-r--r-- | trunk/infrastructure/com.etherpad.openofficeservice/importexport.scala | 189 | ||||
-rw-r--r-- | trunk/infrastructure/com.etherpad/licensing.scala | 169 |
4 files changed, 0 insertions, 358 deletions
diff --git a/trunk/infrastructure/com.etherpad/easysync2support.scala b/infrastructure/com.etherpad/easysync2support.scala index 9f1c527..9f1c527 100644 --- a/trunk/infrastructure/com.etherpad/easysync2support.scala +++ b/infrastructure/com.etherpad/easysync2support.scala diff --git a/trunk/infrastructure/com.etherpad/main.scala b/infrastructure/com.etherpad/main.scala index 5110aba..5110aba 100644 --- a/trunk/infrastructure/com.etherpad/main.scala +++ b/infrastructure/com.etherpad/main.scala diff --git a/trunk/infrastructure/com.etherpad.openofficeservice/importexport.scala b/trunk/infrastructure/com.etherpad.openofficeservice/importexport.scala deleted file mode 100644 index f5150ad..0000000 --- a/trunk/infrastructure/com.etherpad.openofficeservice/importexport.scala +++ /dev/null @@ -1,189 +0,0 @@ -/** - * Copyright 2009 Google Inc. - * - * Licensed 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 com.etherpad.openofficeservice; - -import net.appjet.common.sars.{SarsServer,SarsMessageHandler}; - -import java.io.{DataInputStream,DataOutputStream}; -import java.io.{File,FileOutputStream,ByteArrayInputStream,ByteArrayOutputStream}; - -class OOSException(m: String) extends RuntimeException(m); -class UnsupportedFormatException(format: String) extends OOSException("Unsupported format: "+format); -object TemporaryFailure extends OOSException("Temporary failure"); - -// stub object here. Please replace if you'd like to use openoffice! -object OpenOfficeServerUtility { - def checkServerAvailability(host: String, port: Int): Boolean = { - return false; - } - def runOpenOfficeServer(path: String, host: String, port: Int, timeout: Int, wait: Boolean) { - // nothing - } -} - -class OpenOfficeFileConverter { - def setOpenOfficeServerDetails(host: String, port: Int) { - // nothing - } - - def convertFile(src: File, dst: File, converter: String, extension: String): Boolean = { - return false; - } -} - -object OpenOfficeService { - val formats = Map( - "pdf" -> "writer_pdf_Export", - "doc" -> "MS Word 97", - "html" -> "HTML (StarWriter)", - "odt" -> "writer8", - //"html" -> "XHTML Writer File", - "txt" -> "Text" - ); - - def createTempFile(bytes: Array[byte], suffix: String) = { - var f = File.createTempFile("ooconvert-", if (suffix == null) { null } else if (suffix == "") { "" } else { "."+suffix }); - if (bytes != null) { - val fos = new FileOutputStream(f); - fos.write(bytes); - } - f; - } - - var soffice = "soffice"; - def setExecutable(exec: String) { - soffice = exec; - } - - def convertFile(from: String, to: String, bytes: Array[byte]): Array[byte] = { - if (from == to) { - return bytes; - } - - val tempFile = createTempFile(bytes, from); - val outFile = createTempFile(null, to); - - val openOfficeServerHost = "localhost"; - val openOfficeServerPort = 8100; - if (! OpenOfficeServerUtility.checkServerAvailability(openOfficeServerHost, openOfficeServerPort)) { - try { - OpenOfficeServerUtility.runOpenOfficeServer(soffice, openOfficeServerHost, openOfficeServerPort, 20000, true); - } catch { - case e: java.io.IOException => { - e.printStackTrace(); - throw TemporaryFailure; - } - } - } - var converter = new OpenOfficeFileConverter(); - converter.setOpenOfficeServerDetails(openOfficeServerHost, openOfficeServerPort); - var status = false; - try { - status = converter.convertFile(tempFile, outFile, formats(to), to); - } catch { - case e => { - e.printStackTrace(); - throw new OOSException("Unknown exception occurred: "+e.getMessage()); - } - } - if (status == false) { - throw new UnsupportedFormatException(from); - } - net.appjet.common.util.BetterFile.getFileBytes(outFile); - } - - def main(args: Array[String]) { - if (args.length > 0) { - soffice = args(0); - if (soffice.length == 0) { - exit(1); - } - } - - // Query format: - // from: String, to: String, count: Int, bytes: Array[byte] - // Response format: - // status: Int, <data> - // status 0 (success) - <data>: count: Int, bytes: Array[byte] - // status 1 (temporary failure) - <data>: <none> - // status 2 (permanent failure) - <data>: type: Int - // type - 0: unknown failure. - // - 1: unsupported format - val handler = new SarsMessageHandler { - override def handle(b: Array[byte]): Option[Array[byte]] = { - val is = new DataInputStream(new ByteArrayInputStream(b)); - val from = is.readUTF; - val to = is.readUTF; - val len = is.readInt; - val bytes = new Array[byte](len); - is.readFully(bytes); - var status = 0; - var permfailuretype = 0; - - println("Converting "+from+" -> "+to+" ("+len+" bytes)"); - - val output = try { - convertFile(from, to, bytes); - } catch { - case TemporaryFailure => { - status = 1; - null; - } - case e: UnsupportedFormatException => { - status = 2; - permfailuretype = 1; - null; - } - case e => { - status = 2; - permfailuretype = 0; - e.printStackTrace(); - null; - } - } - - val retBytes = new ByteArrayOutputStream(); - val ret = new DataOutputStream(retBytes); - if (status != 0) { - ret.writeInt(status); // error - status match { - case 2 => { - ret.writeInt(permfailuretype); - } - case _ => { } - } - } else { - ret.writeInt(0); // success - ret.writeInt(output.length); - ret.write(output, 0, output.length); - } - Some(retBytes.toByteArray()); - } - } - - val server = new SarsServer("ooffice-password", handler, None, 8101); - server.start(); - println("Server running..."); - server.join(); - println("Server quitting..."); - } -} - - - - - diff --git a/trunk/infrastructure/com.etherpad/licensing.scala b/trunk/infrastructure/com.etherpad/licensing.scala deleted file mode 100644 index 620738f..0000000 --- a/trunk/infrastructure/com.etherpad/licensing.scala +++ /dev/null @@ -1,169 +0,0 @@ -/** - * Copyright 2009 Google Inc. - * - * Licensed 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 com.etherpad; - -import net.appjet.oui.{Encryptomatic, config}; -import net.appjet.common.util.BetterFile; - -import java.io.{FileInputStream, FileOutputStream, ByteArrayInputStream, ByteArrayOutputStream, PrintWriter} - -import java.security._; -import java.security.spec._; - -object Licensing { - val publicKey = "s0dD94jKFjlSHIumgDQ4ldcyIyna1vMHmG5tsgkP987eBTW88XeEIUTo5JtWOjPzb252GURUrr7MReTqMz6NnsOupeJMqtXgjuVxcXbK8AnckxkxhRqMiFfBW39T9NzPgq09yBdH4tKGlPZQmgaBvjFI8cXTYa7a64LrDnrzrpDhDdJsZPZI2kE7G4vBCGijuhsZpyowK8zT5y2cKqIgIdLxUnXNFtayDi0oyuX1ywfBds2OEil9fEUQOQvkcHAt6kYfPXkE2XgQZFasAv0DPeWMUEtaHTbMaQn1U6BsfmsKjHlLhM3oWEzp0wEwUWxCC39iHYjxa5QKtxm5BNvUTTqJgkoEvk7Uu08j8jhFeCFosph6igDWPmyfAPKTnETXJobO2VON83bVHlX8UfKonnalMy0Hnw2C0I7c0UE0MtMIRtJxtwU62a311Ohp1EVrY4LwKIFfqRMVWKDP0cjXDkJyjJS58rC1DRU7SfPspgfuOy5YZo9sLKztXfzAPzNbXerQ24m2AjmYLV4JQked7MnaKQ6VfyZbFBK5th9NFcJwY1bGbIHW2EsKmiKUoNjPKRJ6VMC7odUCIXQyE9J"; - - val pkhash = "f7a3dd5940a3f79904b81e4d32a08e2efaa0b2ab"; - val keyVersion = 2.toByte; - - def thanksForStealingFromPoorHackersTryingToEkeAMeagerLivingFromThisCruelWorld = - Encryptomatic.bytesToAscii(MessageDigest.getInstance("SHA1").digest(publicKey.getBytes())) == pkhash; - def sha1(b: Array[Byte]): String = Encryptomatic.bytesToAscii(MessageDigest.getInstance("SHA1").digest(b)); - def sha1(s: String): String = sha1(s.getBytes("UTF-8")); - - def toBytes(i: Int): Array[Byte] = - Array((i >> 24).toByte, - (i >> 16).toByte, - (i >> 8).toByte, - i.toByte); - def toByte(i: Int): Array[Byte] = - Array(i.toByte); - def toBytes(l: Long): Array[Byte] = - Array((l >> 56).toByte, - (l >> 48).toByte, - (l >> 40).toByte, - (l >> 32).toByte, - (l >> 24).toByte, - (l >> 16).toByte, - (l >> 8).toByte, - l.toByte); - - def toInt(b0: Array[Byte]): Int = { - val b = b0.map(_.toInt & 0x00FF); - (b(0) << 24) | (b(1) << 16) | (b(2) << 8) | b(3); - } - def toInt(b: Byte): Int = b.toInt & 0x00FF; - - def toLong(b0: Array[Byte]): Long = { - val b = b0.map(_.toLong & 0x000000FF); - (b(0) << 56) | (b(1) << 48) | (b(2) << 40) | (b(3) << 32) | (b(4) << 24) | (b(5) << 16) | (b(6) << 8) | b(7); - } - - def generateKey(personName: String, organizationName: String, expiresDate: Long, editionId: Int, userQuota: Int, majorVersion: Int, minorVersion: Int, patchVersion: Int) = { - if (config.licenseGeneratorKey == null) { - throw new RuntimeException("No private key available to generate license key."); - } - def privateKey = Encryptomatic.readPrivateKey("DSA", new FileInputStream(config.licenseGeneratorKey)); - def clean(s: String) = s.replaceAll(":", "-"); - val keyPrefix = - List(personName, organizationName, expiresDate.toString, editionId.toString, userQuota.toString, majorVersion.toString, minorVersion.toString, patchVersion.toString).map(clean).mkString(":"); - val sig = Encryptomatic.sign(new ByteArrayInputStream(keyPrefix.getBytes("UTF-8")), privateKey) - - List(personName, organizationName).mkString(":") + ":" + - Encryptomatic.bytesToAscii( - Array.concat[Byte](Array(keyVersion), // don't want BigInt dropping bytes, that'd be sad. :( - toBytes(expiresDate), - toBytes(editionId), - toBytes(userQuota), - toByte(majorVersion), - toByte(minorVersion), - toByte(patchVersion), - sig)); - } - - def decodeKey(key: String) = try { - val Array(personName0, organizationName0, sigAndInfo) = key.split(":"); - val sigAndInfoBytes = Encryptomatic.asciiToBytes(sigAndInfo); - val thisKeyVersion = toInt(sigAndInfoBytes(0)); - val expiresDate0 = toLong(sigAndInfoBytes.slice(1, 9)); - val editionId0 = toInt(sigAndInfoBytes.slice(9, 13)); - val userQuota0 = toInt(sigAndInfoBytes.slice(13, 17)); - val (majorVersion0, minorVersion0, patchVersion0) = - if (thisKeyVersion >= 2) { - (toInt(sigAndInfoBytes(17)), toInt(sigAndInfoBytes(18)), toInt(sigAndInfoBytes(19))); - } else { - (0, 0, 0); - } - val sig = sigAndInfoBytes.drop(if (thisKeyVersion >= 2) 20 else 17); - val keyPrefix = { - var a = Seq(personName0, organizationName0, expiresDate0.toString, editionId0.toString, userQuota0.toString); - if (thisKeyVersion >= 2) { - a = a ++ Seq(majorVersion0.toString, minorVersion0.toString, patchVersion0.toString); - } - a.mkString(":"); - } - if (! Encryptomatic.verify(new ByteArrayInputStream(keyPrefix.getBytes("UTF-8")), - Encryptomatic.readPublicKey("DSA", - new ByteArrayInputStream(publicKey.getBytes())), sig)) { - null; - } else { - new { - def personName = personName0; - def organizationName = organizationName0; - def expiresDate = expiresDate0; - def editionId = editionId0; - def userQuota = userQuota0; - def majorVersion = majorVersion0; - def minorVersion = minorVersion0; - def patchVersion = patchVersion0; - } - } - } catch { - case e => null; - } - - def main(args: Array[String]) { - args(0) match { - case "genkeypair" => { - println("Generating keypair..."); - Encryptomatic.writeKeyPair(Encryptomatic.generateKeyPair("DSA"), args(1), args(2)); - println("Done."); - } - case "genmainkey" => { - println("Generating key for pad.spline.inf.fu-berlin.de..."); - config.values("licenseGeneratorKey") = args(1); - val out = new PrintWriter(new FileOutputStream(args(2))); - out.print(generateKey("etherpad", "AppJet", -1, 0, -1, 0, 0, 0)) - out.close(); - println("Done."); - } - case "test" => { - println("Testing key generation."); - config.values("licenseGeneratorKey") = args(1); - val key = generateKey("Foo Bar", "Baz, Inc.", System.currentTimeMillis() + 86400*1000, 0, 100, 1, 2, 3); - println("Key is: "+key); - val obj = decodeKey(key); - println(List(obj.personName, obj.organizationName, obj.expiresDate, obj.editionId, obj.userQuota, obj.majorVersion, obj.minorVersion, obj.patchVersion).mkString(", ")); - } - case "parsekey" => { - println("Testing key decode."); - val obj = decodeKey(args(1)); - println("Key: "+List(obj.personName, obj.organizationName, obj.expiresDate, obj.editionId, obj.userQuota, obj.majorVersion, obj.minorVersion, obj.patchVersion).mkString(", ")); - } - case "testascii" => { - val one = 17; - val two = -1L; - val three = (Math.random*Math.pow(10, (Math.random*10).toInt)).toInt; - println(List(one, two, three).mkString(", ")); - println(List(toInt(toBytes(one)), toLong(toBytes(two)), toInt(toBytes(three))).mkString(", ")); - val bytes = Encryptomatic.asciiToBytes(Encryptomatic.bytesToAscii(Array.concat[Byte](Array(1.toByte), toBytes(one), toBytes(two), toBytes(three)))); - println("I can has bytes: "+bytes.length); - println(List(toInt(bytes.slice(1, 5)), toLong(bytes.slice(5, 13)), toInt(bytes.slice(13, 17))).mkString(", ")); - } - } - } -} |