# Changelog
## 0.6.0
**Breaking**: changed the endpoint setup. Previously the client code had to configure https via the `Phoenix.Endpoint.init/2` callback. However, this callback is deprecated in the latest Phoenix, which now favours passing endpoint options via an argument to `start_link/1` (or `child_spec/1`). This style was previously not supported by site_encrypt.
So to make all of this work, the setup flow has been changed and simplified. To upgrade from the previous version you need to do the following:
1. Remove `use SiteEncrypt.Phoenix` from the endpoint module.
1. Replace `use Phoenix.Endpoint` with `use SiteEncrypt.Phoenix.Endpoint`. Keep the `:otp_app` option.
1. Remove invocation of `SiteEncrypt.Phoenix.configure_https/1` from your endpoint's `init/1`.
1. In the parent supervisor children list, replace the child `{SiteEncrypt.Phoenix, MyEndpoint}` with `MyEndpoint`.
Note that `init/1` callback is deprecated. To specify endpoint config at runtime, you can use the spec `{MyEndpoint, endpoint_config}`. Alternatively, you can override the `child_spec/1` function in the endpoint module:
```elixir
# in your endpoint module
defoverridable child_spec: 1
def child_spec(_arg) do
endpoint_config = [
http: [...],
https: [...],
...
]
super(endpoint_config)
end
```
## 0.5.1
- Support bandit 1.x
## 0.5.0
- added `SiteEncrypt.refresh_config/1`
- added the support for bandit web server
## 0.4.2
- correctly handle relative paths
## 0.4.1
- use dialyxir only on dev
## 0.4.0
This version upgrades to the Parent 0.11 and changes the internals. Strictly speaking this version doesn't change anything, so it could have been a patch update. However, moving to Parent 0.11 might introduce breaking changes in the client code, so the major version is bumped.
## 0.3.1
- Fixes invalid dependency requirement.
## 0.3.0
### Additions and non-breaking changes
- Exposed lower-level ACME client API functions through `SiteEncrypt.Acme.Client` and `SiteEncrypt.Acme.Client.API`.
- Native client keeps the history of old keys.
- Key size is configurable, with the default of 4096.
- Added support for manual production testing through `SiteEncrypt.dry_certify/2`. See "Testing in production" section in readme for details.
- Renewal happens at a random time of day to avoid possible spikes on CA.
### Breaking changes
- The internal folders structure has been changed. If you're running a site_encrypt system in production and using the certbot client, you need to create the folder `acme-v02.api.letsencrypt.org` (assuming you're using Let's Encrypt production) under `db_folder/certbot`, and then recursively copy the contents of `db_folder/certbot` into the new folder. If you're using the native client, you don't need to do anything.
## 0.2.0
### Breaking changes
- The interface for writing tests has been changed. A certification test should now be written as
```elixir
defmodule MyEndpoint.CertificationTest do
use ExUnit.Case, async: false
import SiteEncrypt.Phoenix.Test
test "certification" do
clean_restart(MyEndpoint)
cert = get_cert(MyEndpoint)
assert cert.domains == ~w/mysite.com www.mysite.com/
end
end
```
## 0.1.0
- added a basic native ACME client
- simplified interface
- improved tests
- expanded docs
This version introduces many breaking changes. If you've been using a pre 0.1 version, here's how to upgrade your project:
1. In your endpoint, replace `@behaviour SiteEncrypt` with `use SiteEncrypt.Phoenix`
2. Also in the endpoint, change the `certification/0` callback to pass the options to `SiteEncrypt.configure/1` instead of just returning them.
3. Changes in options:
- `:mode` is no longer supported. Manual mode will be automatically set in tests.
- use `:domains` instead of `:domain` and `:extra_domain`
- `:ca_url` has been renamed to `directory_url`
- `:email` has been renamed to `emails` and must be a list
- `:base_folder` has been renamed to `:db_folder`
- `:cert_folder` is no longer supported. It will chosen automatically inside the `:db_folder`
4. The internal folders structure has been changed. If you're running a site_encrypt system in production, you need to create the folder called `certbot` inside the `:db_folder`, and recurisvely copy top-level folders under `:db_folder` into the newly created `certbot` folder.
5. If you have been using `SiteEncrypt.Phoenix.Test.verify_certification` for certification testing, drop that test, and add the following module somewhere in your test suite:
```elixir
defmodule CertificationTest do
use SiteEncrypt.Phoenix.Test, endpoint: MyEndpoint
end
```