libmcaptcha 0.2.4

core of mCaptcha captcha system
Documentation
## 0.2.4

### Fixed

1. Fix typo already fixed in redis module name (#12)

## 0.2.3

### Fixed:

1. `crossbeam::channel::Receiver::try_recv` is non-blocking and results
   in busy waiting, which caused high CPU usage even when idling.
   Switching to `crossbeam::channel::Receiver::recv` to fixed this.

2. `System::verify_pow` returns `CaptchaResult<(String, u32)>`, where
   the second `u32` is the difficulty factor of the challenge factor.

## 0.2.2

### Added:

-   `libmcaptcha::system::System`: extra parameter `queue_length`. PoW
    IP queues are limited by queue_length

## 0.2.1

### Added:

-   `libmcaptcha::system::System`: extra parameter `runners`. PoW
    are now scheduled for execution based on IP addresses.

## 0.1.4

### Added:

-   `Master` trait: provides methods to manage mCaptcha
-   `MCaptcha::get_defense()`: returns the `MCaptcha` instance's defense
    configuration

### Changed:

-   `PoWConfig` has an extra field to send internal `PoW` salt to clients.
    Salt is used to prevent dictionary attacks using rainbow tables. This
    salt shouldn't be used elsewhere in the program as it's exposed to the
    internet. Ideally `mCaptcha` should automatically generate random
    salt and rotate periodically, maybe in the next version.

-   `master::Master` is moved to `master::embedded::master` in preparation
    for Redis based implementation.

-   `AddSite` message for `Master` now requires an instance of
    `crate::mcaptcha::MCaptcha`. In the case of
    `crate::master::embedded::master`, it automatically starts `Counter`
    actor.

-   `System::get_pow` returns `errors::CaptchaResult<Option<PoWConfig>>`
    instead of `Option<PoWConfig>`

### Removed

-   `MCaptcha::decrement_visiotr`: seemed redundant when
    `MCaptcha::decrement_visitor_by` was available

## 0.1.3

### Added

-   `HashCache` was extended to store captcha responses
-   `HashCache` was extended to cache site keys when caching `PoW` configurations
    as a result:
-   <strike>`Retrieve`</strike> `RetrievePoW` now returns `CachedPoWConfig`
-   random token generation post `PoW` verification
-   token validation

### Changed

-   `Cache` became `CachePoW` (`HashCache` extension)
-   `Retrieve` became `RetrievePoW`(`HashCache` extension)
-   `DeleteString` became `DeletePoW` (`HashCache` extension)
-   `Save` trait now requires three new message impls (`HashCache` extension\_
-   `System.verify_pow` now returns a `String` instead of `bool`

### Removed

-   `CachePoW` constructor was removed in favour of `CachwPoWBuilder`

### Fixed

-   a bug in `mCaptcha/pow_sha256` was causing errors in PoW computation

## 0.1.2

### Changed

-   `actix` upgraded to `0.11`

## 0.1.1

#### Added

-   `Master` packs a garbage collector to stop and get rid of inactive
    `MCaptcha` actors
-   `serde::{Serialize, Deserialize}` impls (shouldn't break anything)

### Changed

-   typo fix: `MCaptcha::decrement_visiotr()` became `MCaptcha::decrement_visitor()`
-   `MCaptcha` throws error when duration is 0
-   `Visitor` is changed to `AddVisitor`
-   `Master` constructor accepts a parameter to configure GC(see previous
    point) period