1:  2:  3:  4:  5:  6:  7:  8:  9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52: 53: 54: 55: 56: 57: 58: 59: 60: 
<?php
/**
 * Copyright (C) Marcelle Hövelmanns, art solution - All Rights Reserved
 *
 * @file        HasEncryption.php
 * @author      Marcelle Hövelmanns
 * @site        http://www.artsolution.de
 * @date        17.11.17
 */

namespace AffiliconApiClient\Traits;


use AffiliconApiClient\Client;
use AffiliconApiClient\Exceptions\ConfigurationInvalid;

trait HasEncryption
{
    /** @var  string */
    protected $cryptMethod;
    /** @var  string */
    protected $cryptKey;

    /** @var  Client */
    protected $client;

    protected function init()
    {
        $this->cryptKey = $this->client->getSecretKey();

        $cryptMethod = $this->client->config()->get('security.crypt_method');

        if (!is_string($cryptMethod)) {
            throw new ConfigurationInvalid('Crypt method must be a string.');
        }

        $this->cryptMethod = $this->client->config()->get('security.crypt_method');
    }
    /**
     * Returns an encrypted string
     * @param string $data json encoded prefill data
     * @return string
     */
    protected function encrypt($data)
    {
        $this->init();
        return urlencode(openssl_encrypt($data, $this->cryptMethod, $this->cryptKey));
    }

    /**
     * Decrypt a given string
     * @param $data
     * @return string
     */
    protected function decrypt($data)
    {
        $this->init();
        return urlencode(openssl_decrypt($data, $this->cryptMethod, $this->cryptKey));
    }
}