2011-04-05 00:14:27 +02:00
|
|
|
/* sbt -- Simple Build Tool
|
|
|
|
|
* Copyright 2009 Mark Harrah
|
|
|
|
|
*/
|
|
|
|
|
package sbt
|
|
|
|
|
|
|
|
|
|
import java.io.File
|
|
|
|
|
import org.apache.ivy.util.url.CredentialsStore
|
|
|
|
|
|
|
|
|
|
object Credentials
|
|
|
|
|
{
|
2011-04-06 00:44:47 +02:00
|
|
|
def apply(realm: String, host: String, userName: String, passwd: String): Credentials =
|
|
|
|
|
new DirectCredentials(realm, host, userName, passwd)
|
|
|
|
|
def apply(file: File): Credentials =
|
|
|
|
|
new FileCredentials(file)
|
|
|
|
|
|
2011-04-05 00:14:27 +02:00
|
|
|
/** Add the provided credentials to Ivy's credentials cache.*/
|
|
|
|
|
def add(realm: String, host: String, userName: String, passwd: String): Unit =
|
|
|
|
|
CredentialsStore.INSTANCE.addCredentials(realm, host, userName, passwd)
|
|
|
|
|
/** Load credentials from the given file into Ivy's credentials cache.*/
|
2011-04-06 00:44:47 +02:00
|
|
|
def add(path: File, log: Logger): Unit =
|
2011-04-05 00:14:27 +02:00
|
|
|
if(path.exists)
|
|
|
|
|
{
|
|
|
|
|
val properties = read(path)
|
|
|
|
|
def get(keys: List[String]) = keys.flatMap(properties.get).firstOption.toRight(keys.head + " not specified in credentials file: " + path)
|
|
|
|
|
|
|
|
|
|
List.separate( List(RealmKeys, HostKeys, UserKeys, PasswordKeys).map(get) ) match
|
|
|
|
|
{
|
2011-04-06 00:44:47 +02:00
|
|
|
case (Nil, List(realm, host, user, pass)) => add(realm, host, user, pass)
|
2011-04-05 00:14:27 +02:00
|
|
|
case (errors, _) => log.warn(errors.mkString("\n"))
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
log.warn("Credentials file " + path + " does not exist")
|
|
|
|
|
|
2011-04-06 00:44:47 +02:00
|
|
|
def register(cs: Seq[Credentials], log: Logger): Unit =
|
|
|
|
|
cs foreach {
|
|
|
|
|
case f: FileCredentials => add(f.path, log)
|
|
|
|
|
case d: DirectCredentials => add(d.realm, d.host, d.userName, d.passwd)
|
|
|
|
|
}
|
|
|
|
|
|
2011-04-05 00:14:27 +02:00
|
|
|
private[this] val RealmKeys = List("realm")
|
|
|
|
|
private[this] val HostKeys = List("host", "hostname")
|
|
|
|
|
private[this] val UserKeys = List("user", "user.name", "username")
|
|
|
|
|
private[this] val PasswordKeys = List("password", "pwd", "pass", "passwd")
|
|
|
|
|
|
|
|
|
|
import collection.JavaConversions._
|
|
|
|
|
private[this] def read(from: File): Map[String,String] =
|
|
|
|
|
{
|
|
|
|
|
val properties = new java.util.Properties
|
|
|
|
|
IO.load(properties, from)
|
|
|
|
|
properties map { case (k,v) => (k.toString, v.toString) } toMap;
|
|
|
|
|
}
|
2011-04-06 00:44:47 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
sealed trait Credentials
|
|
|
|
|
final class FileCredentials(val path: File) extends Credentials
|
|
|
|
|
final class DirectCredentials(val realm: String, val host: String, val userName: String, val passwd: String) extends Credentials
|