<?php

namespace OAuth2\Encryption;

/**
 * Bridge file to use the firebase/php-jwt package for JWT encoding and decoding.
 *
 * @author Francis Chuang <francis.chuang@gmail.com>
 */
class FirebaseJwt implements EncryptionInterface {

	public function __construct() {
		if ( ! class_exists( '\JWT' ) ) {
			throw new \ErrorException( 'firebase/php-jwt must be installed to use this feature. You can do this by running "composer require firebase/php-jwt"' );
		}
	}

	public function encode( $payload, $key, $alg = 'HS256', $keyId = null ) {
		return \JWT::encode( $payload, $key, $alg, $keyId );
	}

	public function decode( $jwt, $key = null, $allowedAlgorithms = null ) {
		try {

			// Maintain BC: Do not verify if no algorithms are passed in.
			if ( ! $allowedAlgorithms ) {
				$key = null;
			}

			return (array) \JWT::decode( $jwt, $key, $allowedAlgorithms );
		} catch ( \Exception $e ) {
			return false;
		}
	}

	public function urlSafeB64Encode( $data ) {
		return \JWT::urlsafeB64Encode( $data );
	}

	public function urlSafeB64Decode( $b64 ) {
		return \JWT::urlsafeB64Decode( $b64 );
	}
}
