/**
Esto creara una funcion generica que validara la fecha, dispositivo del usuario, navegador, ip, fecha de caducidad y demas
La funciones Decrypt debe ser creada y pasarla como JSON PARSE
*/
/** DRM */
function created_uri($contentShow, $data)
{
    $allowed = isset($_SERVER['HTTP_X_ALLOWED']) ? $_SERVER['HTTP_X_ALLOWED'] : false;
    $content = isset($_SERVER['HTTP_X_CONTENT']) ? $_SERVER['HTTP_X_CONTENT'] : false;
    if ($allowed and $content) {
        /** Firma */
        $sig = isset($data['sig']) ? $data['sig'] : false;
        if ($sig) {
            $signature = json_decode(Decrypt($sig));
            $method = $signature->encrypted;
            /** Permitido */
            $authenticated = true;
            /** exp */
            $exp = isset($method->expire) ? $method->expire : false;
            if (strtotime('now') >= $exp) {
                $authenticated = false;
            }
            /** ei */
            $ei = isset($method->ei) ? base64_decode($method->ei) : false;
            if (helper_user_agent() != $ei) {
                $authenticated = false;
            }
            /** ip */
            $ip = isset($method->ip) ? $method->ip : false;
            if (helper_user_ip() != $ip) {
                $authenticated = false;
            }
            /** id */
            $id = isset($method->id) ? $method->id : false;
            if ($content != $id) {
                $authenticated = false;
            }
            /** Acceso */
            if ($authenticated) {
                return $contentShow;
            } else {
                exit('{[Error.401]}');
            }
        } else {
            exit('{[Error.400]}');
        }
    } else {
        exit('{[Error.400]}');
    }
}
/*
    Lo siguiente es para utilizar los metodos created_uri()
*/
/** Tiempo */
$iat = time();
$exp = $iat + (60 * 1);
/** Firma */
$sig = array(
    'iat' => $iat,
    'exp' => $exp,
    'encrypted' => [
        'expire' => $exp,
        'ei' => base64_encode( helper_user_agent() ),
        'ip' => helper_user_ip(),
        'id' => 'Identificador del video ej: 1',
        'itag' => 'default',
        'source' => getenv('APP_NAME'),
        'mime' => 'application/x-mpegURL',
        'clen' => 'Segundos del video/content',
        'lmt' => $iat,
        'sparams' => 'expire,ei,ip,id,itag,source,mime,clen,dur,lmt'
    ]
);
/*
    El metodo Encrypt debe ser creada y pasarla como JSON PARSE
*/
/** Firma protegida */
$tplSig = Encrypt(json_encode($sig));
$urlSig = http_build_query($sig['encrypted']);
/** Firma Creada */
$signature = '?' . urldecode ( $urlSig ) . '&sig=' . $tplSig;
/*
    Enviando los parametros
*/
/** La firma debe pasar de la siguiente forma */
$uri = '/streamingProgressive/' . $slug . $signature;
/*
    Adicionalmente debe enviar varios parametros por los HEADER
    Asi evitara el uso de hotlinking fake IP / referrer
*/
/*
    Esto debe ser enviado en los Header's de su soliictud a la url
    streamingProgressive
 
    xhr.setRequestHeader('X-content', '<?php echo $sig['encrypted']['id']; ?>');
    xhr.setRequestHeader('X-allowed', '<?php echo $sig['encrypted']['itag']; ?>');
*/
/*
    Funciones genericas que se usan
*/
/** Metodo para la IP del usuario */
function helper_user_ip()
{
    if (!empty($_SERVER['HTTP_CLIENT_IP'])) {
        //check ip from share internet
        $ip = $_SERVER['HTTP_CLIENT_IP'];
    } elseif (!empty($_SERVER['HTTP_X_FORWARDED_FOR'])) {
        //to check ip is pass from proxy
        $ip = $_SERVER['HTTP_X_FORWARDED_FOR'];
    } elseif (!empty($_SERVER['REMOTE_ADDR'])) {
        $ip = $_SERVER['REMOTE_ADDR'];
    } else {
        $ip = null;
    }
    return $ip;
}
/** Metodo para obtener el agent del usuario */
function helper_user_agent()
{
    if (!empty($_SERVER['HTTP_USER_AGENT'])) {
        //check ip from share internet
        $agent = $_SERVER['HTTP_USER_AGENT'];
    } else {
        $agent = null;
    }
    return $agent;
}
/**
    Analizando las URL'S y entiendo el proceso realizado
*/
/**
    https://videos.com/videoplayback/1?expire=1576342267&ei=TW96aWxsYS81LjAgKFdpbmRvd3MgTlQgMTAuMDsgV2luNjQ7IHg2NCkgQXBwbGVXZWJLaXQvNTM3LjM2IChLSFRNTCwgbGlrZSBHZWNrbykgQ2hyb21lLzc4LjAuMzkwNC4xMDggU2FmYXJpLzUzNy4zNg==&ip=127.0.0.1&id=1&itag=default&source=Video&mime=application/x-mpegURL&clen=6932456&lmt=1576342207&sparams=expire,ei,ip,id,itag,source,mime,clen,dur,lmt&sig=eUFOVng2T2N2MFFZUFVHMDd6ZnVuZU1PUFBmNEE5TDFEN2JmWitQSFBGSTdCZ2VhZGlrTlBqVXQyQ2ptTWJMcC9YS0ZrZ3FTVkdkYTIvTERRTG8wWjY5cE9qMnVCYlhPQWNkcnJQcmxVYkVCR3lhSTcvMUxmRnpaTWVpcFNyYnpDVTZsa1FiZjFaanpUbklnOTVlS0pkNjRoVXlCNlRhY2dBR2ZRSloxYW9YN3YzVFI0WVpyVUFQYzM3ZnhXRU4yMUYrNE4yZFNEbW84NkJ0Sm56Z0xjMzFxaHNUbUF6T0gzeHg2Q1dWaWdOcWp6SVFSQ3ROaWJlVzB2aCt6SktOVDVVMXZybUtDakEvT0VFenEwUmVvc1FHWE9YeS9VZEs0UkVpS3ZLbjdCYXBEaUMxaTF3YXRzbjQ2WDAwUWx5cU8zVmhyUUFTNnU0THdvQ2NSNnkwaVY3S1Q4aSthbHpSdGJSbFZkc0phTGI2alJJVVB2Z0Z0WEx6V3JIalc4bXl2RzBQOFRvRXRVMXJKdzBSTS9mUW5TNXY4cHhFOVJPdTA4ajRCWFFoeWlYQ3g4bTJTZ3V4ZmdFY1BQaHB2bXVISEF0N3RlckxuNlhIUkVZZkoyRllXekpWS1RKL2czTWpreXQ3Vyt5aEZ4U2NTN01Td09remRwam90N1psQXQ4dVNtQ0ZPa0VtQ0RGOWpDWkdaY0VoS3Z1ZXIvVU15aVp1WDVyVlFWRWhxcW1rQ0FURy9QK1lrVjg1TjNONmpQU0FYT0ZNUVVheGxzYStSeU53ZHBjbUFRdz09
 
    URL PARTS
 
    Scheme:
    https
    Protocol:
    https
    Authority:
    videos.com
    Host:
    videos.com
    Hostname:
    videos.com
    Domain:
    videos.com
    Tld:
    com
    Resource:
    /videoplayback/1?expire=1576342267&ei=TW96aWxsYS81LjAgKFdpbmRvd3MgTlQgMTAuMDsgV2luNjQ7IHg2NCkgQXBwbGVXZWJLaXQvNTM3LjM2IChLSFRNTCwgbGlrZSBHZWNrbykgQ2hyb21lLzc4LjAuMzkwNC4xMDggU2FmYXJpLzUzNy4zNg==&ip=127.0.0.1&id=1&itag=default&source=Video&mime=application/x-mpegURL&clen=6932456&lmt=1576342207&sparams=expire,ei,ip,id,itag,source,mime,clen,dur,lmt&sig=eUFOVng2T2N2MFFZUFVHMDd6ZnVuZU1PUFBmNEE5TDFEN2JmWitQSFBGSTdCZ2VhZGlrTlBqVXQyQ2ptTWJMcC9YS0ZrZ3FTVkdkYTIvTERRTG8wWjY5cE9qMnVCYlhPQWNkcnJQcmxVYkVCR3lhSTcvMUxmRnpaTWVpcFNyYnpDVTZsa1FiZjFaanpUbklnOTVlS0pkNjRoVXlCNlRhY2dBR2ZRSloxYW9YN3YzVFI0WVpyVUFQYzM3ZnhXRU4yMUYrNE4yZFNEbW84NkJ0Sm56Z0xjMzFxaHNUbUF6T0gzeHg2Q1dWaWdOcWp6SVFSQ3ROaWJlVzB2aCt6SktOVDVVMXZybUtDakEvT0VFenEwUmVvc1FHWE9YeS9VZEs0UkVpS3ZLbjdCYXBEaUMxaTF3YXRzbjQ2WDAwUWx5cU8zVmhyUUFTNnU0THdvQ2NSNnkwaVY3S1Q4aSthbHpSdGJSbFZkc0phTGI2alJJVVB2Z0Z0WEx6V3JIalc4bXl2RzBQOFRvRXRVMXJKdzBSTS9mUW5TNXY4cHhFOVJPdTA4ajRCWFFoeWlYQ3g4bTJTZ3V4ZmdFY1BQaHB2bXVISEF0N3RlckxuNlhIUkVZZkoyRllXekpWS1RKL2czTWpreXQ3Vyt5aEZ4U2NTN01Td09remRwam90N1psQXQ4dVNtQ0ZPa0VtQ0RGOWpDWkdaY0VoS3Z1ZXIvVU15aVp1WDVyVlFWRWhxcW1rQ0FURy9QK1lrVjg1TjNONmpQU0FYT0ZNUVVheGxzYStSeU53ZHBjbUFRdz09
    Directory:
    /videoplayback
    Path:
    /videoplayback/1
    File name:
    1
    Query string:
    expire=1576342267&ei=TW96aWxsYS81LjAgKFdpbmRvd3MgTlQgMTAuMDsgV2luNjQ7IHg2NCkgQXBwbGVXZWJLaXQvNTM3LjM2IChLSFRNTCwgbGlrZSBHZWNrbykgQ2hyb21lLzc4LjAuMzkwNC4xMDggU2FmYXJpLzUzNy4zNg==&ip=127.0.0.1&id=1&itag=default&source=Video&mime=application/x-mpegURL&clen=6932456&lmt=1576342207&sparams=expire,ei,ip,id,itag,source,mime,clen,dur,lmt&sig=eUFOVng2T2N2MFFZUFVHMDd6ZnVuZU1PUFBmNEE5TDFEN2JmWitQSFBGSTdCZ2VhZGlrTlBqVXQyQ2ptTWJMcC9YS0ZrZ3FTVkdkYTIvTERRTG8wWjY5cE9qMnVCYlhPQWNkcnJQcmxVYkVCR3lhSTcvMUxmRnpaTWVpcFNyYnpDVTZsa1FiZjFaanpUbklnOTVlS0pkNjRoVXlCNlRhY2dBR2ZRSloxYW9YN3YzVFI0WVpyVUFQYzM3ZnhXRU4yMUYrNE4yZFNEbW84NkJ0Sm56Z0xjMzFxaHNUbUF6T0gzeHg2Q1dWaWdOcWp6SVFSQ3ROaWJlVzB2aCt6SktOVDVVMXZybUtDakEvT0VFenEwUmVvc1FHWE9YeS9VZEs0UkVpS3ZLbjdCYXBEaUMxaTF3YXRzbjQ2WDAwUWx5cU8zVmhyUUFTNnU0THdvQ2NSNnkwaVY3S1Q4aSthbHpSdGJSbFZkc0phTGI2alJJVVB2Z0Z0WEx6V3JIalc4bXl2RzBQOFRvRXRVMXJKdzBSTS9mUW5TNXY4cHhFOVJPdTA4ajRCWFFoeWlYQ3g4bTJTZ3V4ZmdFY1BQaHB2bXVISEF0N3RlckxuNlhIUkVZZkoyRllXekpWS1RKL2czTWpreXQ3Vyt5aEZ4U2NTN01Td09remRwam90N1psQXQ4dVNtQ0ZPa0VtQ0RGOWpDWkdaY0VoS3Z1ZXIvVU15aVp1WDVyVlFWRWhxcW1rQ0FURy9QK1lrVjg1TjNONmpQU0FYT0ZNUVVheGxzYStSeU53ZHBjbUFRdz09
    Query String
    'expire':
    1576342267 // Tiempo de vida
    'ei': // Navegador
    TW96aWxsYS81LjAgKFdpbmRvd3MgTlQgMTAuMDsgV2luNjQ7IHg2NCkgQXBwbGVXZWJLaXQvNTM3LjM2IChLSFRNTCwgbGlrZSBHZWNrbykgQ2hyb21lLzc4LjAuMzkwNC4xMDggU2FmYXJpLzUzNy4zNg==
    'ip': // Ip del usuario
    127.0.0.1
    'id':
    1 // Recurso solicitado
    'itag':
    default // Calidad del video
    'source':
    Video // Fuente donde se solicita (DOMINIO)
    'mime':
    application/x-mpegURL // Tipo de contenido
    'clen':
    6932456 // Duracion del video
    'lmt':
    1576342207 // Fecha de creacion
    'sparams':
    expire,ei,ip,id,itag,source,mime,clen,dur,lmt // Parametros validados
 
    'sig':
    SIGNATURE // Firma que sera validada por el back-end
*/