# pict-rs 0.5.5

## Overview

pict-rs 0.5.5 adds a bugfix for uploading images with trailing bytes and few new features for
advanced deployments.

### Features

- [Imagemagick Security Policy Configuration](#imagemagick-security-policy-configuration)
- [Serving with TLS](#serving-with-tls)


### Bugfixes

- [Broken Pipe Error](#broken-pipe-error)


## Upgrade Notes

There's no significant changes from 0.5.4, so upgrading should be as simple as pulling a new version
of pict-rs.


## Descriptions

### Imagemagick Security Policy Configuration

pict-rs now supports configuring the imagemagick security policy via the pict-rs.toml file,
environment variables, or via the commandline. The security policy defines the boundaries that
imagemagick will operate with, and will allow it to abort processing media that would exceed those
boundaries.

Currently, there are only a few items that can be configured.
```toml
# pict-rs.toml
[media.magick]
max_width = 10000
max_hight = 10000
max_area = 40000000
```
```bash
# environment variables
PICTRS__MEDIA__MAGICK__MAX_WIDTH=10000
PICTRS__MEDIA__MAGICK__MAX_HEIGHT=10000
PICTRS__MEDIA__MAGICK__MAX_AREA=40000000
```
```bash
# commandline
pict-rs run \
    --media-magick-max-width 10000 \
    --media-magick-max-height 10000 \
    --media-magick-max-aread 40000000
```

It will also apply the configured `process_timeout` to the security policy.


### Serving with TLS

pict-rs can now be configured to serve itself over TLS if provided with a server key and a server
certificate. This is for more advanced deployments that have Certificate Authority infrastructure in
place. When serving over TLS, downstream services need to be configured to access pict-rs over TLS.

```toml
# pict-rs.toml
[server]
certificate = "/path/to/server.crt"
private_key = "/path/to/server.key"
```
```bash
# environment variables
PICTRS__SERVER__CERTIFICATE=/path/to/server.crt
PICTRS__SERVER__PRIVATE_KEY=/path/to/server.key
```
```bash
# commandline
pict-rs run \
    --certificate /path/to/server.crt \
    --private-key /path/to/server.key
```


### Broken Pipe Error

In previous 0.5 releases with the default configurations, it was possible for valid images to fail
to upload if they contained excess trailing bytes. This was caused by exiftool completing metadata
processing on the image bytes before pict-rs had written the entire buffer to exiftool's stdin. The
fix was to simply treat the case of stdin closing early as a success, rather than a failure. In the
event there was actually an error in exiftool, the command will fail and pict-rs will return a
proper status error instead.
