roelofr/laravel-encryption-cast

View on GitHub
README.md

Summary

Maintainability
Test Coverage
# Encryption Cast for Laravel

[![Build status][shield-build]][link-build]
[![Code Climate maintainability rating][shield-cc-maintainability]][link-cc-maintainability]
[![Code Climate coverage rating][shield-cc-coverage]][link-cc-coverage]


[![PHP code style: PSR-12][shield-php]][link-php]
[![License: MIT][shield-license]][link-license]

A super-simple, fully tested database encryption system, which allows for extra
conversions to take place afterwards.

## End of Life

This package has reached it's end of life. [Laravel now supports encryption out-of-the-box][eol],
so adding a separate package that does the same is useless.

[eol]: https://laravel.com/docs/9.x/eloquent-mutators#encrypted-casting

## License

The software is licensed under the [MIT License][link-license].

## Requirements

This project requires Laravel 7.x and PHP 7.4 or newer. You should also update
your database schemas to allow for encrypted data. Encrypted data is
base64-encoded, and might be significantly longer than the same data as, for
example, JSON.

It's recommended to use long `VARCHAR` fields or even `TEXT` fields.

## Installation

Just require it via composer, it doesn't register a service provider.

```
composer require roelofr/laravel-encryption-cast
```

## Usage

This class contains a two-way cast that takes extra casts as first and only
argument. `null`-values are not encrypted.

### Encrypted strings

To encrypt the `phone_number` field, simply cast it.

```php
protected $casts = [
    'phone_number' => \Roelofr\EncryptionCast\Casts\EncryptedAttribute::class
];
```

### Encrypted basic types

Say we have a `date_of_birth` field, we can cast that as a date.

```php
protected $casts = [
    'date_of_birth' => \Roelofr\EncryptionCast\Casts\EncryptedAttribute::class . ':date'
];
```

### Encrypted collections

Now, say we have an `address` which is a collection, we can also cast it like
that.

```php
protected $casts = [
    'address' => \Roelofr\EncryptionCast\Casts\EncryptedAttribute::class . ':collection'
];
```

### Encrypted complex models

Now, lastly, say you made a [custom cast][docs-custom-casts] that casts the
`medication` field to some other type, and named it `App\Casts\MedicationCast`,
you can send that as a second argument.

```php
protected $casts = [
    'medication' => \Roelofr\EncryptionCast\Casts\EncryptedAttribute::class . ':' . \App\Casts\MedicationCast::class
];
```

And that's about it.

## Compatibility

To ease development you can use one of the casts in the `Compat` namespace.
These are included:

- For [`austinheap/laravel-database-encryption`][compat-1] you can use
  `AustinHeapEncryptedAttribute`.

[compat-1]: https://github.com/austinheap/laravel-database-encryption

## Contributing

If you found any bugs or issues and can help, please open an issue. The code is
linted for code style and coverage is exected to be >95% at all times.

<!-- Links -->

[shield-build]: https://img.shields.io/github/workflow/status/roelofr/laravel-encryption-cast/Run%20unit%20tests.svg?style=flat
[shield-cc-maintainability]: https://img.shields.io/codeclimate/maintainability/roelofr/laravel-encryption-cast.svg?label=CodeClimate+Maintainability&style=flat
[shield-cc-coverage]: https://img.shields.io/codeclimate/coverage-letter/roelofr/laravel-encryption-cast.svg?style=flat
[shield-php]: https://img.shields.io/badge/php%20code%20style-PSR--12-8892be.svg?style=flat
[shield-license]: https://img.shields.io/github/license/roelofr/laravel-encryption-cast.svg?style=flat

[link-build]: https://github.com/roelofr/laravel-encryption-cast/actions
[link-cc-maintainability]: https://codeclimate.com/github/roelofr/laravel-encryption-cast
[link-cc-coverage]: https://codeclimate.com/github/roelofr/laravel-encryption-cast
[link-php]: https://www.php-fig.org/psr/psr-12/
[link-license]: LICENSE.md

[docs-custom-casts]: https://laravel.com/docs/7.x/eloquent-mutators#custom-casts