@@ -28,14 +28,17 @@ import eu.timepit.refined.api.Refined
2828import eu .timepit .refined .auto ._
2929import eu .timepit .refined .collection .NonEmpty
3030import eu .timepit .refined .string .Uri
31+ import org .apache .james .core .Username
3132import org .apache .james .jmap .core .CapabilityIdentifier .{CapabilityIdentifier , EMAIL_SUBMISSION , JAMES_DELEGATION , JAMES_IDENTITY_SORTORDER , JAMES_QUOTA , JAMES_SHARES , JMAP_CORE , JMAP_MAIL , JMAP_MDN , JMAP_QUOTA , JMAP_VACATION_RESPONSE , JMAP_WEBSOCKET }
3233import org .apache .james .jmap .core .CoreCapabilityProperties .CollationAlgorithm
3334import org .apache .james .jmap .core .MailCapability .EmailQuerySortOption
3435import org .apache .james .jmap .core .SubmissionCapabilityFactory .maximumDelays
3536import org .apache .james .jmap .core .UnsignedInt .{UnsignedInt , UnsignedIntConstraint }
3637import org .apache .james .jmap .json .ResponseSerializer
3738import org .apache .james .util .Size
39+ import org .reactivestreams .Publisher
3840import play .api .libs .json .{JsObject , Json }
41+ import reactor .core .scala .publisher .SMono
3942import reactor .netty .http .server .HttpServerRequest
4043
4144import scala .util .{Failure , Success , Try }
@@ -98,7 +101,10 @@ object UrlPrefixes {
98101final case class UrlPrefixes (httpUrlPrefix : URI , webSocketURLPrefix : URI )
99102
100103trait CapabilityFactory {
101- def create (urlPrefixes : UrlPrefixes ): Capability
104+ def create (urlPrefixes : UrlPrefixes , username : Username ): Capability
105+
106+ def createReactive (urlPrefixes : UrlPrefixes , username : Username ): Publisher [Capability ] =
107+ SMono .fromCallable(() => create(urlPrefixes, username))
102108
103109 def id (): CapabilityIdentifier
104110}
@@ -109,7 +115,7 @@ final case class CoreCapability(properties: CoreCapabilityProperties,
109115final case class CoreCapabilityFactory (configration : JmapRfc8621Configuration ) extends CapabilityFactory {
110116 override def id (): CapabilityIdentifier = JMAP_CORE
111117
112- override def create (urlPrefixes : UrlPrefixes ): Capability = CoreCapability (CoreCapabilityProperties (
118+ override def create (urlPrefixes : UrlPrefixes , username : Username ): Capability = CoreCapability (CoreCapabilityProperties (
113119 configration.maxUploadSize,
114120 MaxConcurrentUpload (4L ),
115121 MaxSizeRequest (10_000_000L ), // See MaxSizeRequest.DEFAULT compile-time refinement only works with literals
@@ -125,7 +131,7 @@ case class WebSocketCapability(properties: WebSocketCapabilityProperties, identi
125131case object WebSocketCapabilityFactory extends CapabilityFactory {
126132 override def id (): CapabilityIdentifier = JMAP_WEBSOCKET
127133
128- override def create (urlPrefixes : UrlPrefixes ): Capability = WebSocketCapability (
134+ override def create (urlPrefixes : UrlPrefixes , username : Username ): Capability = WebSocketCapability (
129135 WebSocketCapabilityProperties (SupportsPush (true ), new URI (urlPrefixes.webSocketURLPrefix.toString + " /jmap/ws" )))
130136}
131137
@@ -188,7 +194,7 @@ case object SubmissionCapabilityFactory {
188194final case class SubmissionCapabilityFactory (clock : Clock , supportsDelaySends : Boolean ) extends CapabilityFactory {
189195 override def id (): CapabilityIdentifier = EMAIL_SUBMISSION
190196
191- override def create (urlPrefixes : UrlPrefixes ): Capability =
197+ override def create (urlPrefixes : UrlPrefixes , username : Username ): Capability =
192198 if (supportsDelaySends) {
193199 advertiseDelaySendSupport
194200 } else {
@@ -227,7 +233,7 @@ final case class MailCapability(properties: MailCapabilityProperties,
227233case class MailCapabilityFactory (configuration : JmapRfc8621Configuration ) extends CapabilityFactory {
228234 override def id (): CapabilityIdentifier = JMAP_MAIL
229235
230- override def create (urlPrefixes : UrlPrefixes ): Capability = MailCapability (MailCapabilityProperties (
236+ override def create (urlPrefixes : UrlPrefixes , username : Username ): Capability = MailCapability (MailCapabilityProperties (
231237 MaxMailboxesPerEmail (Some (10_000_000L )),
232238 MaxMailboxDepth (None ),
233239 MaxSizeMailboxName (200L ),
@@ -287,7 +293,7 @@ final case class QuotaCapability(properties: QuotaCapabilityProperties = QuotaCa
287293case object QuotaCapabilityFactory extends CapabilityFactory {
288294 override def id (): CapabilityIdentifier = JAMES_QUOTA
289295
290- override def create (urlPrefixes : UrlPrefixes ): Capability = QuotaCapability ()
296+ override def create (urlPrefixes : UrlPrefixes , username : Username ): Capability = QuotaCapability ()
291297}
292298
293299final case class IdentitySortOrderCapabilityProperties () extends CapabilityProperties {
@@ -300,7 +306,7 @@ final case class IdentitySortOrderCapability(properties: IdentitySortOrderCapabi
300306case object IdentitySortOrderCapabilityFactory extends CapabilityFactory {
301307 override def id (): CapabilityIdentifier = JAMES_IDENTITY_SORTORDER
302308
303- override def create (urlPrefixes : UrlPrefixes ): Capability = IdentitySortOrderCapability ()
309+ override def create (urlPrefixes : UrlPrefixes , username : Username ): Capability = IdentitySortOrderCapability ()
304310}
305311
306312final case class DelegationCapabilityProperties () extends CapabilityProperties {
@@ -313,7 +319,7 @@ final case class DelegationCapability(properties: DelegationCapabilityProperties
313319case object DelegationCapabilityFactory extends CapabilityFactory {
314320 override def id (): CapabilityIdentifier = JAMES_DELEGATION
315321
316- override def create (urlPrefixes : UrlPrefixes ): Capability = DelegationCapability ()
322+ override def create (urlPrefixes : UrlPrefixes , username : Username ): Capability = DelegationCapability ()
317323}
318324
319325final case class SharesCapabilityProperties () extends CapabilityProperties {
@@ -323,7 +329,7 @@ final case class SharesCapabilityProperties() extends CapabilityProperties {
323329case object SharesCapabilityFactory extends CapabilityFactory {
324330 override def id (): CapabilityIdentifier = JAMES_SHARES
325331
326- override def create (urlPrefixes : UrlPrefixes ): Capability = SharesCapability ()
332+ override def create (urlPrefixes : UrlPrefixes , username : Username ): Capability = SharesCapability ()
327333}
328334
329335final case class SharesCapability (properties : SharesCapabilityProperties = SharesCapabilityProperties (),
@@ -336,7 +342,7 @@ final case class MDNCapabilityProperties() extends CapabilityProperties {
336342case object MDNCapabilityFactory extends CapabilityFactory {
337343 override def id (): CapabilityIdentifier = JMAP_MDN
338344
339- override def create (urlPrefixes : UrlPrefixes ): Capability = MDNCapability ()
345+ override def create (urlPrefixes : UrlPrefixes , username : Username ): Capability = MDNCapability ()
340346}
341347
342348final case class MDNCapability (properties : MDNCapabilityProperties = MDNCapabilityProperties (),
@@ -349,7 +355,7 @@ final case class VacationResponseCapabilityProperties() extends CapabilityProper
349355case object VacationResponseCapabilityFactory extends CapabilityFactory {
350356 override def id (): CapabilityIdentifier = JMAP_VACATION_RESPONSE
351357
352- override def create (urlPrefixes : UrlPrefixes ): Capability = VacationResponseCapability ()
358+ override def create (urlPrefixes : UrlPrefixes , username : Username ): Capability = VacationResponseCapability ()
353359}
354360
355361final case class VacationResponseCapability (properties : VacationResponseCapabilityProperties = VacationResponseCapabilityProperties (),
@@ -365,5 +371,5 @@ final case class JmapQuotaCapabilityProperties() extends CapabilityProperties {
365371case object JmapQuotaCapabilityFactory extends CapabilityFactory {
366372 override def id (): CapabilityIdentifier = JMAP_QUOTA
367373
368- override def create (urlPrefixes : UrlPrefixes ): Capability = JmapQuotaCapability ()
374+ override def create (urlPrefixes : UrlPrefixes , username : Username ): Capability = JmapQuotaCapability ()
369375}
0 commit comments