package sihl-email
Install
Dune Dependency
Authors
Maintainers
Sources
md5=20516760578c31cfc0e56db9bb84cebc
sha512=787252e6acd1010ae3ffd8105f4abff4f66c5d6efffee827f2ffc6695a2ad7cea6b859dc62398acf4c7e8b08ffa44a5974fa14faf68f623db14e91e96f0e65e6
CHANGES.md.html
[3.0.5] - 2022-11-24
Updated
Make id generating function for id middleware configurable
Make
password
of Sihl_user.t[@opaque]
[3.0.4] - 2022-08-23
Updated
Make SMTP credentials optional
[3.0.3] - 2022-04-01
Updated
Update SQL queries to use caqti infix notation
[3.0.2] - 2022-02-28
Added
Expos all log sources
[3.0.1] - 2021-11-23
Fixed
Fixed a bug in the CSRF middleware where the current session cookie was overriden with an empty session
Fixed an issue where
Sihl.Database.Migration.execute_steps
ignored the provided database pool in?ctx
and instead creating its own pool
[3.0.0] - 2021-11-16
Fixed
CSRF tokens are now valid per session, not per request. This allows the user to open a form, use various parts of the website in another tab and then come back to the form and submit it.
Changed
Enforce OCaml 4.12.0, which doesn't allow named arguments after optional arguments
Added
Provide optional
?id
parameter whenever an entity is created, to override the generated it
[2.0.1] - 2021-10-22
Added
Expose service context on
user_from_session
[2.0.0] - 2021-10-04
Changed
Added the concept of a service context
ctx
which can be used for configuration that is valid for one function call only.
[1.0.1] - 2021-09-17
Added
Support
multipart/form-data
in CSRF middleware
[1.0.0] - 2021-09-08
Fixed
It is now possible to register multiple instances of the same service type simultaneously
Rename page title of queue dashboard
Document
EMAIL_BYPASS_INTERCEPT
andQUEUE_FORCE_ASYNC
Accept
true
,True
and1
for truthy boolean env varsDocument global middlewares
Fix issue where the default smtp certs path is an empty string
Fix trailing slash middleware to work with
PREFIX_PATH
Changed
The
search_query
forSihl.Database.prepare_search_request
has to return the total amount of rows for that query without limit. On PostgreSQL and MariaDB this can be done withCOUNT(*) OVER() as total
. Nocount_query
is needed anymore.
User service
Add optional
given_name
andname
Deprecate
update_details
in favor ofupdate
Consistent use of named arguments in service API
Added
Optional argument
format_filter
for formatting the search keyword when filtering inSihl.Database.prepare_search_request
[0.6.0] - 2021-04-30
Added
Add CLI generators as built-in CLI commands
gen.service
(for generating CRUD services),gen.view
(for generating CRUD views) andgen.html
(for generating CRUD RESTful resources)Sihl.Web.Rest.{query, to_query_string, of_query_string, next_page, previous_page, last_page, first_page, query_filter, query_sort, query_limit, query_offset}
Add ParcelJS based asset pipeline to template project in
template
Database helpers to conveniently run exactly one caqti request
Sihl.Database.find
,Sihl.Database.find_opt
,Sihl.Database.exec
andSihl.Database.collect
The
search
function of the user service fromsihl-user
takes an optional argumentoffset
. This allows you to implement offset based pagination.
Changed
Replace the usaged of
Lwt.Syntax
withlwt_ppx
for nicer error messages in your Sihl appsRework built-in commands (
start
is nowserver
, commands are namespaced with.
)The command function in
Sihl.Command.make
returnsunit option Lwt.t
and Sihl takes care of printing the usage ifLwt.return None
is returnedReplaced
Sihl.Database.prepare_requests
withSihl.Database.prepare_search_request
Replaced
Sihl.Database.run_request
withSihl.Database.run_search_request
Make search query type
'a Sihl.Database.prepared_search_query
abstract to reduce API clutter. The search queries are highly specific to the implementation and are not likely to be re-used independently fromrun_search_request
.Change
query
to fully fledgedsearch
inSihl.Rest.SERVICE
to support paginated, filtered and sorted views
[0.5.0] - 2021-04-10
Added
Sihl.Web.Rest
provides helpers to quickly create HTML resources. This is useful to expose any service of typeSihl.Web.Rest.SERVICE
through the Internet by making it part of a web app.
[0.4.1] - 2021-03-31
Fixed
Register timezone removal migration in
sihl-queue
. This makes it easy to change the timezone on the server without breaking applications.
[0.4.0] - 2021-03-27
Changed
Get rid of
Sihl.Web.Middleware.htmx
,Sihl.Web.Htmx
can be used directly nowSihl.Web.Csrf.find
returnsstring option
, useOption.get
if you are sure that the CSRF middleware has been appliedTake custom
unauthenticated_handler
forSihl.Web.Middleware.bearer_token
and enforce existence ofBearer
token inAuthorization
headerWeb helpers moved from
Sihl.Web.Http
toSihl.Web
. InSihl.Web.Http
there is only the Opium based HTTP service.Replace middlewares with helpers where they don't have to be middlewares such as bearer token (
Sihl.Web.Request.bearer_token
), htmx (Sihl.Web.Htmx
) and session (Sihl.Web.Session
)Remove
form
middleware (Sihl.Web.Middleware.form
), useSihl.Web.Request
directly to parse form requestsReplace
Sihl.Web.Flash.find_custom
withSihl.Web.Flash.find
andSihl.Web.Flash.set_custom
withSihl.Web.Fash.set
to support key-value based semantics. If you need to store your custom string, simply store it under a key likeSihl.Web.Flash.set [("custom", value)] resp
and retrieve it withSihl.Web.Flash.find "custom" request
Use
conformist
0.4.0
Added
Read
Request-ID-X
header if present instead of generating a random id forSihl.Web.Id
Implement composable router API
Sihl.Web.{get, post, ...}
andSihl.Web.choose
.Implement job queue dashboard for
sihl-queue
[0.3.0] - 2021-03-12
Fixed
Replace functor based approach with service facade pattern based approach to increase ergonomy
Move
user_token
middleware tosihl-token
package
Added
Implement MariaDB and PostgreSql backends for all services except storage service
JSON Web Token backend for the token service
Default middlewares for server side rendered forms and JSON API
[0.2.2] - 2020-12-17
Fixed
Merge form data and urlencoded form parsing and provide them in one middleware
[0.2.1] - 2020-12-09
Fixed
Two subsequent
POST
request works now with the CSRF middleware
[0.2] - 2020-12-07
Fixed
Extract
sihl-core
,sihl-type
,sihl-contract
,sihl-user
,sihl-persistence
andsihl-web
as separate opam packagesIncrease session key size to 20 bytes
Sign session cookies with
SIHL_SECRET
Simplify session service API
Implement generic flash storage on top of session storage and replace the specific message service
Update to httpaf-based Opium 0.19.0
Added
File log reporter to store logs in
logs/error.log
andlogs/app.log
Add log source to log text
[0.1.10] - 2020-11-18
Fixed
Properly load
.env
files based on project root, can be set usingENV_FILES_PATH
Add custom error types for user actions to allow overriding errors displayed to users
Added
Determine project rood using markers such as the .git folder
[0.1.9] - 2020-11-16
Fixed
Get rid of
Core.Ctx.t
Make sure migrations and repo cleaners are registered when registering service
Sihl.Core.*
modules are now accessible directly underSihl.*
[0.1.8] - 2020-11-12
Fixed
Get rid of
Result.get_ok
because it swallows errors
[0.1.7] - 2020-11-03
Fixed
Simplify
Database.Service
API: Only providetransaction
,query
andfetch_pool
Fixe dune package names, private dune packages don't have generic names like
http
ordatabase
causing conflicts in a Sihl app
[0.1.6] - 2020-10-31
Fixed
Database.Service
andRepository.Service
are assumed to have just one implementation, so they are referenced directly in service implementations instead of passing them as functor argumentsExtract
Random.Service
from utils as standalone top level serviceMerge utils into one
utils.ml
file
HTTP API
Sihl.Http.Response
andSihl.Http.Request
have consistent APISihl.Middleware
contains all provided middlewaresImplement multi-part form data parsing
[0.1.5] - 2020-10-14
Fixed
Remove seed service since the same functionality
Simplify app abstraction, instead of
with_
use service APIs directlyExtract storage service as
sihl-storage
opam packageExtract email service as
sihl-email
opam packageExtract queue service as
sihl-queue
opam packageMove configuration and logging into core, neither of the are implemented as services
Replace
pcre
withre
as regex library to get rid of a system dependency on pcreSplit up
Sihl.Data
intoSihl.Migration
,Sihl.Repository
andSihl.Database
Move module signatures from
Foo.Service.Sig
toFoo.Sig
, the services might live in a third party opam package, but the signatures are staying insihl
Move
Sihl.App
toSihl.Core.App
and simplify app APIMove log service, config service and cmd service into core (they don't have to be provided to other services through functors)
Simplify Sihl app creation and service configuration
[0.1.4] - 2020-09-24
Fixed
Remove
reason
andtyxml-jsx
as dependency as they are not used anymore
Added
Various combinators for
Sihl.Seed.t
including constructor and field accessors
[0.1.3] - 2020-09-14
Added
Seed Service with commands
seedlist
andseedrun <name>
Fixed
Lifecycle API: A service now has two additional functions
start
andstop
, which are used in the lifecycle definitionDatabase service query functions
query
,atomic
andwith_connection
can now be nested
[0.1.2] - 2020-09-09
Fixed
Re-export
Sihl.Queue.Job.t
Export content types under
Sihl.Web
[0.1.1] - 2020-09-07
Fixed
Don't raise exception when user login fails if it is a user error
Remove dev tools as dev dependencies
Added
Storage service can remove files
Move README.md documentation to ocamldoc based documentation
[0.1.0] - 2020-09-03
Fixed
DB connection leaks caused deadlocks
Provide all service dependencies using functors
Move Opium & Cohttp specific stuff into the web server service implementation to allow for swappable implementation based on something like httpaf
Inject log service to all other services by default
Added
Support letters 0.2.0 for SMTP emailing
Switch to exception based service API
HTTP Response API to respond with file
Sihl.Web.Res.file
[0.0.56] - 2020-08-17
Fixed
Stop running integration tests during OPAM release
[0.0.55] - 2020-08-17
Added
Initial release of Sihl