aboutsummaryrefslogtreecommitdiff
path: root/src/main/scala/byspel/Inserts.scala
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/scala/byspel/Inserts.scala')
-rw-r--r--src/main/scala/byspel/Inserts.scala57
1 files changed, 57 insertions, 0 deletions
diff --git a/src/main/scala/byspel/Inserts.scala b/src/main/scala/byspel/Inserts.scala
new file mode 100644
index 0000000..c82b98d
--- /dev/null
+++ b/src/main/scala/byspel/Inserts.scala
@@ -0,0 +1,57 @@
+package byspel
+
+import app.{DatabaseApi, DatabaseApp}
+import java.security.SecureRandom
+import java.sql.Timestamp
+import java.time.Instant
+import java.util.UUID
+import scala.concurrent.Await
+import scala.concurrent.duration._
+
+trait Inserts extends DatabaseApp { self: DatabaseApi =>
+ import profile.api._
+
+ private val root =
+ UsersRow(new UUID(0l, 0l).toString,
+ "root@crashbox.io",
+ Some("Root User"),
+ "no avatar",
+ Some(Timestamp.from(Instant.now())))
+
+ private val password = {
+ val prng = new SecureRandom()
+ val bytes = new Array[Byte](8)
+ prng.nextBytes(bytes)
+ bytes.map(b => f"$b%02x").mkString("")
+ }
+
+ private def inserts = Seq(
+ Users insertOrUpdate root,
+ Shadow insertOrUpdate ShadowRow(
+ root.id,
+ PasswordHash.protect(password)
+ )
+ )
+
+ override def start(): Unit = {
+ super.start()
+ log("checking for root user")
+
+ val f = Users.filter(_.id === root.id).exists.result.flatMap {
+ case false =>
+ log("creating root user")
+ log(s"root password is: $password")
+ (Users insertOrUpdate root).andThen(
+ Shadow insertOrUpdate ShadowRow(
+ root.id,
+ PasswordHash.protect(password)
+ )
+ )
+ case true =>
+ log("root user exists")
+ DBIO.successful(())
+ }
+ Await.result(database.run(f), 2.seconds)
+ }
+
+}