lucenarenato/laravel-email-domain-blacklist

A Laravel package for adding email domain blacklist validation rule

v1.0.1 2023-04-26 20:51 UTC

This package is auto-updated.

Last update: 2024-10-27 00:03:02 UTC


README

Build Status Maintainability Test Coverage Latest Stable Version Total Downloads Latest Unstable Version License Monthly Downloads composer.lock FOSSA Status

Validate email input that it's not blacklisted for a specific domain name.

Usage

Add blacklist to the validation rules string.

  public function store(Request $request) {

      $this->validate($request,
        ['email' => 'required|email|blacklist']
      );

  }

Installation

Require this package with composer:

composer require Lucenarenato/laravel-email-domain-blacklist

This package uses AutoDiscovery.

If you are using Laravel <= 5.4 manually add the Service Provider to the providers array in config/app.php

Lucenarenato\EmailDomainBlacklist\EmailDomainBlacklistServiceProvider::class,

Publish the package config:

php artisan vendor:publish --provider="Lucenarenato\EmailDomainBlacklist\EmailDomainBlacklistServiceProvider" --tag=config

Documentation

Laravel Email Domain Blacklist is a lightweight package that extends your validation rules with blacklist.

You may pass a local or remote JSON file containing all the blacklisted email domains, usually disposable email services.

If you use a third-party remote list, you may also append your custom email domains.

You may update the cached list with the console command (manually or scheduled).

An auto-update option is available if you don't want to run the command and prefer to auto-update on the first validation.

The validation message translation is available in English and Spanish; feel free to PR your translation.

Laravel validator

public function store(Request $request) {
    $this->validate($request,
      ['email' => 'required|email|blacklist']
    );
}

Configuration

source: string|null

You may specify the preferred URL or file path to update the blacklist.

Keep null if you don't want to use a remote source.

Default: https://raw.githubusercontent.com/ivolo/disposable-email-domains/master/index.json

cache-key: string|null

You may change the cache key for the sourced blacklist.

Keep null if you want to use the default value.

auto-update: true|false

Specify if it should automatically get the source when the cache is empty.

ADVICE: This may slow down the first request upon validation.

Default: false

append: string|null

You may use a string of pipe | separated domains list.

Keep null if you don't want to append custom domains.

Example: example.com|example.net|foobar.com.

Updating the blacklist with command

Manually updating the cached blacklist:

php artisan blacklist:update-email-domains

It's OK if you run this command after deployment and refresh it on a weekly/monthly basis.

Scheduling the cached blacklist update (example):

    // app/Console/Kernel.php @schedule

    // ...
    $schedule->command('blacklist:update-email-domains')
             ->monthly()
             ->sundays()
             ->at('05:00')
             ->withoutOverlapping()
             ->sendOutputTo(storage_path('logs/email-domains-blacklist.txt'));
    // ...

Overriding translation

Add the JSON translation key to your project core translations, which will override the package validation message.

More info on overriding translation

Testing

vendor/bin/phpunit

Projects using this package

I built this package to offload some code in my application Fimedi NET, a clinical nutrition control app for dietitians and patients.

ToDo

  • Update the project lexicon to avoid the use of offensive terms.

Contributing

Please try to follow the psr-2 coding style guide. http://www.php-fig.org/psr/psr-2/

Credits

This package was inspired on this great post by Matt Kingshott

Package alternatives

License

MIT

FOSSA Status