<?php

namespace App\Classes;

class SSL
{
	// Our CSR
	private $csr_pem = NULL;
	// Our Certificate
	private $crt = [];
	private $crt_pem = NULL;
	// Our Key
	private $key_pem = NULL;

	/**
	 * @param $key
	 * @return null
	 * @throws \Exception
	 */
	public function __get($key)
	{
		switch($key)
		{
			case 'cn': return $this->cn();
			default:
				throw new \App\Exceptions\SSLUnknownAttribute($key);
		}
	}

	private function cn()
	{
		$subject = array_get($this->crt,'subject');

		if (! $subject AND $this->csr_pem) {
			$subject = openssl_csr_get_subject($this->csr_pem);
		}

		return isset($subject['CN']) ? $subject['CN'] : NULL;
	}

	/**
	 * Add CSR
	 *
	 * @param $value
	 * @return mixed
	 */
	public function csr($value)
	{
		$this->csr_pem = $value;

		return $this;
	}

	/**
	 * Add certificate
	 *
	 * @param $value
	 * @return mixed
	 */
	public function crt($value)
	{
		$this->crt_pem = $value;
		$this->crt = openssl_x509_parse($this->crt);

		return $this;
	}

	/**
	 * Add the Key
	 *
	 * @param $value
	 * @return mixed
	 */
	public function key($value)
	{
		$this->key_pem = $value;

		return $this;
	}
}