mirror of
https://github.com/TheAnachronism/docspell.git
synced 2025-06-05 22:55:58 +00:00
Use doobie support from emil project
This commit is contained in:
parent
e305b46708
commit
43efb4e6ba
@ -6,6 +6,8 @@ import org.http4s._
|
|||||||
import org.http4s.dsl.Http4sDsl
|
import org.http4s.dsl.Http4sDsl
|
||||||
import org.http4s.circe.CirceEntityEncoder._
|
import org.http4s.circe.CirceEntityEncoder._
|
||||||
import org.http4s.circe.CirceEntityDecoder._
|
import org.http4s.circe.CirceEntityDecoder._
|
||||||
|
import emil.MailAddress
|
||||||
|
import emil.javamail.syntax._
|
||||||
|
|
||||||
import docspell.backend.BackendApp
|
import docspell.backend.BackendApp
|
||||||
import docspell.backend.auth.AuthToken
|
import docspell.backend.auth.AuthToken
|
||||||
@ -13,7 +15,6 @@ import docspell.backend.ops.OMail.{AttachSelection, ItemMail}
|
|||||||
import docspell.backend.ops.SendResult
|
import docspell.backend.ops.SendResult
|
||||||
import docspell.common._
|
import docspell.common._
|
||||||
import docspell.restapi.model._
|
import docspell.restapi.model._
|
||||||
import docspell.store.EmilUtil
|
|
||||||
|
|
||||||
object MailSendRoutes {
|
object MailSendRoutes {
|
||||||
|
|
||||||
@ -37,7 +38,7 @@ object MailSendRoutes {
|
|||||||
|
|
||||||
def convertIn(item: Ident, s: SimpleMail): Either[String, ItemMail] =
|
def convertIn(item: Ident, s: SimpleMail): Either[String, ItemMail] =
|
||||||
for {
|
for {
|
||||||
rec <- s.recipients.traverse(EmilUtil.readMailAddress)
|
rec <- s.recipients.traverse(MailAddress.parse)
|
||||||
fileIds <- s.attachmentIds.traverse(Ident.fromString)
|
fileIds <- s.attachmentIds.traverse(Ident.fromString)
|
||||||
sel = if (s.addAllAttachments) AttachSelection.All else AttachSelection.Selected(fileIds)
|
sel = if (s.addAllAttachments) AttachSelection.All else AttachSelection.Selected(fileIds)
|
||||||
} yield ItemMail(item, s.subject, rec, s.body, sel)
|
} yield ItemMail(item, s.subject, rec, s.body, sel)
|
||||||
|
@ -7,7 +7,8 @@ import org.http4s._
|
|||||||
import org.http4s.dsl.Http4sDsl
|
import org.http4s.dsl.Http4sDsl
|
||||||
import org.http4s.circe.CirceEntityEncoder._
|
import org.http4s.circe.CirceEntityEncoder._
|
||||||
import org.http4s.circe.CirceEntityDecoder._
|
import org.http4s.circe.CirceEntityDecoder._
|
||||||
import emil.MailAddress
|
import emil.{MailAddress, SSLType}
|
||||||
|
import emil.javamail.syntax._
|
||||||
|
|
||||||
import docspell.backend.BackendApp
|
import docspell.backend.BackendApp
|
||||||
import docspell.backend.auth.AuthToken
|
import docspell.backend.auth.AuthToken
|
||||||
@ -15,7 +16,6 @@ import docspell.backend.ops.OMail
|
|||||||
import docspell.common._
|
import docspell.common._
|
||||||
import docspell.restapi.model._
|
import docspell.restapi.model._
|
||||||
import docspell.store.records.RUserEmail
|
import docspell.store.records.RUserEmail
|
||||||
import docspell.store.EmilUtil
|
|
||||||
import docspell.restserver.conv.Conversions
|
import docspell.restserver.conv.Conversions
|
||||||
import docspell.restserver.http4s.QueryParam
|
import docspell.restserver.http4s.QueryParam
|
||||||
|
|
||||||
@ -90,15 +90,15 @@ object MailSettingsRoutes {
|
|||||||
ru.smtpPort,
|
ru.smtpPort,
|
||||||
ru.smtpUser,
|
ru.smtpUser,
|
||||||
ru.smtpPassword,
|
ru.smtpPassword,
|
||||||
EmilUtil.mailAddressString(ru.mailFrom),
|
ru.mailFrom.asUnicodeString,
|
||||||
ru.mailReplyTo.map(EmilUtil.mailAddressString _),
|
ru.mailReplyTo.map(_.asUnicodeString),
|
||||||
EmilUtil.sslTypeString(ru.smtpSsl),
|
ru.smtpSsl.name,
|
||||||
!ru.smtpCertCheck
|
!ru.smtpCertCheck
|
||||||
)
|
)
|
||||||
|
|
||||||
def makeSettings(ems: EmailSettings): Either[String, OMail.SmtpSettings] = {
|
def makeSettings(ems: EmailSettings): Either[String, OMail.SmtpSettings] = {
|
||||||
def readMail(str: String): Either[String, MailAddress] =
|
def readMail(str: String): Either[String, MailAddress] =
|
||||||
EmilUtil.readMailAddress(str).left.map(err => s"E-Mail address '$str' invalid: $err")
|
MailAddress.parse(str).left.map(err => s"E-Mail address '$str' invalid: $err")
|
||||||
|
|
||||||
def readMailOpt(str: Option[String]): Either[String, Option[MailAddress]] =
|
def readMailOpt(str: Option[String]): Either[String, Option[MailAddress]] =
|
||||||
str.traverse(readMail)
|
str.traverse(readMail)
|
||||||
@ -106,7 +106,7 @@ object MailSettingsRoutes {
|
|||||||
for {
|
for {
|
||||||
from <- readMail(ems.from)
|
from <- readMail(ems.from)
|
||||||
repl <- readMailOpt(ems.replyTo)
|
repl <- readMailOpt(ems.replyTo)
|
||||||
sslt <- EmilUtil.readSSLType(ems.sslType)
|
sslt <- SSLType.fromString(ems.sslType)
|
||||||
} yield OMail.SmtpSettings(
|
} yield OMail.SmtpSettings(
|
||||||
ems.name,
|
ems.name,
|
||||||
ems.smtpHost,
|
ems.smtpHost,
|
||||||
|
@ -6,13 +6,13 @@ import cats.data.OptionT
|
|||||||
import org.http4s._
|
import org.http4s._
|
||||||
import org.http4s.dsl.Http4sDsl
|
import org.http4s.dsl.Http4sDsl
|
||||||
import org.http4s.circe.CirceEntityEncoder._
|
import org.http4s.circe.CirceEntityEncoder._
|
||||||
|
import emil.javamail.syntax._
|
||||||
|
|
||||||
import docspell.backend.BackendApp
|
import docspell.backend.BackendApp
|
||||||
import docspell.backend.auth.AuthToken
|
import docspell.backend.auth.AuthToken
|
||||||
import docspell.backend.ops.OMail.Sent
|
import docspell.backend.ops.OMail.Sent
|
||||||
import docspell.common._
|
import docspell.common._
|
||||||
import docspell.restapi.model._
|
import docspell.restapi.model._
|
||||||
import docspell.store.EmilUtil
|
|
||||||
|
|
||||||
object SentMailRoutes {
|
object SentMailRoutes {
|
||||||
|
|
||||||
@ -46,7 +46,7 @@ object SentMailRoutes {
|
|||||||
s.id,
|
s.id,
|
||||||
s.senderLogin,
|
s.senderLogin,
|
||||||
s.connectionName,
|
s.connectionName,
|
||||||
s.recipients.map(EmilUtil.mailAddressString),
|
s.recipients.map(_.asUnicodeString),
|
||||||
s.subject,
|
s.subject,
|
||||||
s.body,
|
s.body,
|
||||||
s.created
|
s.created
|
||||||
|
@ -1,38 +0,0 @@
|
|||||||
package docspell.store
|
|
||||||
|
|
||||||
import cats.implicits._
|
|
||||||
import emil._
|
|
||||||
import emil.javamail.syntax._
|
|
||||||
|
|
||||||
object EmilUtil {
|
|
||||||
|
|
||||||
def readSSLType(str: String): Either[String, SSLType] =
|
|
||||||
str.toLowerCase match {
|
|
||||||
case "ssl" => Right(SSLType.SSL)
|
|
||||||
case "starttls" => Right(SSLType.StartTLS)
|
|
||||||
case "none" => Right(SSLType.NoEncryption)
|
|
||||||
case _ => Left(s"Invalid ssl-type: $str")
|
|
||||||
}
|
|
||||||
|
|
||||||
def unsafeReadSSLType(str: String): SSLType =
|
|
||||||
readSSLType(str).fold(sys.error, identity)
|
|
||||||
|
|
||||||
def sslTypeString(st: SSLType): String =
|
|
||||||
st match {
|
|
||||||
case SSLType.SSL => "ssl"
|
|
||||||
case SSLType.StartTLS => "starttls"
|
|
||||||
case SSLType.NoEncryption => "none"
|
|
||||||
}
|
|
||||||
|
|
||||||
def readMailAddress(str: String): Either[String, MailAddress] =
|
|
||||||
MailAddress.parse(str)
|
|
||||||
|
|
||||||
def unsafeReadMailAddress(str: String): MailAddress =
|
|
||||||
readMailAddress(str).fold(sys.error, identity)
|
|
||||||
|
|
||||||
def readMultipleAddresses(str: String): Either[String, List[MailAddress]] =
|
|
||||||
str.split(',').toList.map(_.trim).traverse(readMailAddress)
|
|
||||||
|
|
||||||
def mailAddressString(ma: MailAddress): String =
|
|
||||||
ma.asUnicodeString
|
|
||||||
}
|
|
@ -6,14 +6,13 @@ import io.circe.{Decoder, Encoder}
|
|||||||
import doobie._
|
import doobie._
|
||||||
import doobie.implicits.legacy.instant._
|
import doobie.implicits.legacy.instant._
|
||||||
import doobie.util.log.Success
|
import doobie.util.log.Success
|
||||||
import emil.{MailAddress, SSLType}
|
import emil.doobie.EmilDoobieMeta
|
||||||
import com.github.eikek.calev.CalEvent
|
import com.github.eikek.calev.CalEvent
|
||||||
|
|
||||||
import docspell.common._
|
import docspell.common._
|
||||||
import docspell.common.syntax.all._
|
import docspell.common.syntax.all._
|
||||||
import docspell.store.EmilUtil
|
|
||||||
|
|
||||||
trait DoobieMeta {
|
trait DoobieMeta extends EmilDoobieMeta {
|
||||||
|
|
||||||
implicit val sqlLogging = LogHandler({
|
implicit val sqlLogging = LogHandler({
|
||||||
case e @ Success(_, _, _, _) =>
|
case e @ Success(_, _, _, _) =>
|
||||||
@ -89,16 +88,6 @@ trait DoobieMeta {
|
|||||||
implicit val metaLanguage: Meta[Language] =
|
implicit val metaLanguage: Meta[Language] =
|
||||||
Meta[String].imap(Language.unsafe)(_.iso3)
|
Meta[String].imap(Language.unsafe)(_.iso3)
|
||||||
|
|
||||||
implicit val sslType: Meta[SSLType] =
|
|
||||||
Meta[String].imap(EmilUtil.unsafeReadSSLType)(EmilUtil.sslTypeString)
|
|
||||||
|
|
||||||
implicit val mailAddress: Meta[MailAddress] =
|
|
||||||
Meta[String].imap(EmilUtil.unsafeReadMailAddress)(EmilUtil.mailAddressString)
|
|
||||||
|
|
||||||
implicit def mailAddressList: Meta[List[MailAddress]] =
|
|
||||||
Meta[String].imap(str => str.split(',').toList.map(_.trim).map(EmilUtil.unsafeReadMailAddress))(
|
|
||||||
lma => lma.map(EmilUtil.mailAddressString).mkString(",")
|
|
||||||
)
|
|
||||||
|
|
||||||
implicit val metaCalEvent: Meta[CalEvent] =
|
implicit val metaCalEvent: Meta[CalEvent] =
|
||||||
Meta[String].timap(CalEvent.unsafe)(_.asString)
|
Meta[String].timap(CalEvent.unsafe)(_.asString)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user