Horriblesubs/fansub/class-fansub-license.php

338 lines
9.1 KiB
PHP

<?php
if(!function_exists('add_filter')) exit;
class FANSUB_License {
private $hashed_password;
private $key;
private $key_map;
private $customer_name;
private $customer_email;
private $customer_phone;
private $customer_identity;
private $customer_url;
private $code;
private $hashed_code;
private $use_for;
private $domain;
private $password;
private $option;
private $type;
private $option_name;
private $valid;
private $generation;
private $generated;
public function set_generated($generated) {
$this->generated = $generated;
}
public function get_generated() {
return $this->generated;
}
public function set_generation($generation) {
$this->generation = $generation;
}
public function get_generation() {
return $this->generation;
}
public function set_valid($valid) {
$this->valid = $valid;
}
public function get_valid() {
return $this->valid;
}
public function set_option_name($option_name) {
$this->option_name = $option_name;
}
public function get_option_name() {
return $this->option_name;
}
public function set_type($type) {
$this->type = $type;
}
public function get_type() {
return $this->type;
}
public function set_option(FANSUB_Option $option) {
$this->option = $option;
}
public function get_option() {
return $this->option;
}
public function set_password($password) {
$this->password = $password;
}
public function get_password() {
return $this->password;
}
public function set_domain($domain) {
$domain = esc_url($domain);
$domain = fansub_get_root_domain_name($domain);
$this->domain = $domain;
}
public function get_domain() {
return $this->domain;
}
public function set_use_for($use_for) {
$this->use_for = $use_for;
}
public function get_use_for() {
return $this->use_for;
}
public function set_hashed_code($hashed_code) {
$this->hashed_code = $hashed_code;
}
public function get_hashed_code() {
return $this->hashed_code;
}
public function set_code($code) {
$this->code = $code;
}
public function get_code() {
return $this->code;
}
public function set_customer_url($customer_url) {
$customer_url = trailingslashit($customer_url);
$this->customer_url = $customer_url;
}
public function get_customer_url() {
return $this->customer_url;
}
public function set_customer_identity($customer_identity) {
$this->customer_identity = $customer_identity;
}
public function get_customer_identity() {
return $this->customer_identity;
}
public function set_customer_phone($customer_phone) {
$this->customer_phone = $customer_phone;
}
public function get_customer_phone() {
return $this->customer_phone;
}
public function set_customer_email($customer_email) {
$this->customer_email = $customer_email;
}
public function get_customer_email() {
return $this->customer_email;
}
public function set_customer_name($customer_name) {
$this->customer_name = $customer_name;
}
public function get_customer_name() {
return $this->customer_name;
}
public function set_hashed_password($hashed_password) {
$this->hashed_password = $hashed_password;
}
public function get_hashed_password() {
return $this->hashed_password;
}
public function set_key($key) {
$this->key = $key;
}
public function get_key() {
return $this->key;
}
public function set_key_map($key_map) {
$this->key_map = $key_map;
}
public function get_key_map() {
return $this->key_map;
}
public function __construct() {
$this->set_hashed_password(FANSUB_HASHED_PASSWORD);
$this->set_key('');
$this->set_type('theme');
$this->set_use_for(get_option('template'));
$this->set_domain(home_url());
$this->set_customer_url(home_url('/'));
$this->set_customer_email(get_option('admin_email'));
$option = fansub_option_get_object_from_list('theme_license');
if(fansub_object_valid($option)) {
$this->set_option($option);
}
if(fansub_object_valid($option)) {
$this->set_option_name($option->get_option_name());
}
}
public function build_key_map() {
$pieces = array();
$email = $this->get_customer_email();
$phone = $this->get_customer_phone();
$identity = $this->get_customer_identity();
if(empty($email) && empty($phone) && empty($identity)) {
return $pieces;
}
if(!empty($email)) {
$pieces[] = 'email';
}
if(!empty($phone)) {
$pieces[] = 'phone';
}
if(!empty($identity)) {
$pieces[] = 'identity';
}
$pieces[] = 'code';
$pieces[] = 'domain';
$pieces[] = 'use_for';
shuffle($pieces);
$pieces[] = 'hashed_password';
$pieces = fansub_sanitize_array($pieces);
$this->set_key_map($pieces);
return $pieces;
}
public function get_map_key_value($key) {
$value = '';
switch($key) {
case 'email':
$value = $this->get_customer_email();
break;
case 'phone':
$value = $this->get_customer_phone();
break;
case 'identity':
$value = $this->get_customer_identity();
break;
case 'code':
$value = $this->get_code();
break;
case 'domain':
$value = $this->get_domain();
break;
case 'use_for':
$value = $this->get_use_for();
break;
default:
if(!$this->get_generation() || $this->compare_password()) {
$value = $this->get_hashed_password();
}
break;
}
return $value;
}
public function get_saved_license_data() {
return get_option($this->get_option_name());
}
public function get_saved_generated_data() {
$data = get_option('fansub_license');
$value = fansub_get_value_by_key($data, array($this->get_type(), md5($this->get_use_for())));
return $value;
}
public function create_key() {
if($this->get_generation()) {
$pieces = $this->build_key_map();
} else {
$pieces = $this->get_key_map();
if(!fansub_array_has_value($pieces)) {
$data = $this->get_saved_generated_data();
$pieces = fansub_get_value_by_key($data, 'key_map');
}
}
$result = '';
if(count($pieces) >= 3) {
foreach($pieces as $piece) {
if(!empty($piece)) {
$value = $this->get_map_key_value($piece);
if(!empty($value)) {
if(is_array($value)) {
$value = implode('_', $value);
}
$result .= $value . '_';
}
}
}
}
$result = trim($result, '_');
$this->set_key($result);
return $result;
}
public function compare_password() {
return wp_check_password($this->get_password(), $this->get_hashed_password());
}
public function generate() {
$result = array();
if(!$this->compare_password()) {
$result = new WP_Error('set_fansub_password', __('Please set default HocWP password first!', 'fansub'));
} else {
$this->set_generation(true);
$this->create_key();
$this->set_hashed_code(wp_hash_password($this->get_key()));
$url = $this->get_customer_url();
if(!empty($url)) {
$url = add_query_arg(array(
'hashed' => $this->get_hashed_code(),
'key_map' => $this->get_key_map(),
'type' => $this->get_type(),
'use_for' => $this->get_use_for(),
'fansub_password' => $this->get_password()
), $url);
$result['url'] = $url;
}
$result['code'] = $this->get_code();
$result['customer_email'] = $this->get_customer_email();
$result['hashed'] = $this->get_hashed_code();
$result['key_map'] = $this->get_key_map();
}
$this->set_generated($result);
return $result;
}
public function for_theme() {
if('theme' == $this->get_type()) {
return true;
}
return false;
}
public function get_transient_name() {
return fansub_build_license_transient_name($this->get_type(), $this->get_use_for());
}
public function check_valid($data = array()) {
return true;
}
}