move signature to user object
This commit is contained in:
parent
e2ad08b61b
commit
e1fd0e1c39
4 changed files with 122 additions and 18 deletions
|
@ -5,6 +5,7 @@ use WP_Error;
|
|||
use DateTime;
|
||||
use DateTimeZone;
|
||||
use Activitypub\Model\User;
|
||||
use Activitypub\User_Factory;
|
||||
|
||||
/**
|
||||
* ActivityPub Signature Class
|
||||
|
@ -73,7 +74,7 @@ class Signature {
|
|||
*
|
||||
* @return void
|
||||
*/
|
||||
public static function generate_key_pair( $user_id ) {
|
||||
public static function generate_key_pair() {
|
||||
$config = array(
|
||||
'digest_alg' => 'sha512',
|
||||
'private_key_bits' => 2048,
|
||||
|
@ -84,22 +85,13 @@ class Signature {
|
|||
$priv_key = null;
|
||||
|
||||
\openssl_pkey_export( $key, $priv_key );
|
||||
|
||||
$detail = \openssl_pkey_get_details( $key );
|
||||
|
||||
if ( User::APPLICATION_USER_ID === $user_id ) {
|
||||
// private key
|
||||
\update_option( 'activitypub_magic_sig_private_key', $priv_key );
|
||||
|
||||
// public key
|
||||
\update_option( 'activitypub_magic_sig_public_key', $detail['key'] );
|
||||
|
||||
} else {
|
||||
// private key
|
||||
\update_user_meta( $user_id, 'magic_sig_private_key', $priv_key );
|
||||
|
||||
// public key
|
||||
\update_user_meta( $user_id, 'magic_sig_public_key', $detail['key'] );
|
||||
}
|
||||
return array(
|
||||
'private_key' => $priv_key,
|
||||
'public_key' => $detail['key'],
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -114,7 +106,8 @@ class Signature {
|
|||
* @return string The signature.
|
||||
*/
|
||||
public static function generate_signature( $user_id, $http_method, $url, $date, $digest = null ) {
|
||||
$key = self::get_private_key( $user_id );
|
||||
$user = User_Factory::get_by_id( $user_id );
|
||||
$key = $user->get_private_key();
|
||||
|
||||
$url_parts = \wp_parse_url( $url );
|
||||
|
||||
|
|
|
@ -40,4 +40,44 @@ class Application_User extends Blog_User {
|
|||
public function get_name() {
|
||||
return \esc_html( \get_option( 'activitypub_application_identifier', 'application' ) );
|
||||
}
|
||||
|
||||
public function get_public_key() {
|
||||
$key = \get_option( 'activitypub_application_user_public_key', true );
|
||||
|
||||
if ( $key ) {
|
||||
return $key;
|
||||
}
|
||||
|
||||
$this->generate_key_pair();
|
||||
|
||||
$key = \get_option( 'activitypub_application_user_public_key', true );
|
||||
|
||||
return $key;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param int $user_id
|
||||
*
|
||||
* @return mixed
|
||||
*/
|
||||
public function get_private_key() {
|
||||
$key = \get_option( 'activitypub_application_user_private_key', true );
|
||||
|
||||
if ( $key ) {
|
||||
return $key;
|
||||
}
|
||||
|
||||
$this->generate_key_pair();
|
||||
|
||||
return \get_option( 'activitypub_application_user_private_key', true );
|
||||
}
|
||||
|
||||
private function generate_key_pair() {
|
||||
$key_pair = Signature::generate_key_pair();
|
||||
|
||||
if ( ! is_wp_error( $key_pair ) ) {
|
||||
\update_option( 'activitypub_application_user_public_key', $key_pair['public_key'], true );
|
||||
\update_option( 'activitypub_application_user_private_key', $key_pair['private_key'], true );
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -2,6 +2,7 @@
|
|||
namespace Activitypub\Model;
|
||||
|
||||
use WP_Query;
|
||||
use Activitypub\Signature;
|
||||
use Activitypub\User_Factory;
|
||||
|
||||
class Blog_User extends User {
|
||||
|
@ -141,6 +142,42 @@ class Blog_User extends User {
|
|||
}
|
||||
|
||||
public function get_public_key() {
|
||||
return '';
|
||||
$key = \get_option( 'activitypub_blog_user_public_key', true );
|
||||
|
||||
if ( $key ) {
|
||||
return $key;
|
||||
}
|
||||
|
||||
$this->generate_key_pair();
|
||||
|
||||
$key = \get_option( 'activitypub_blog_user_public_key', true );
|
||||
|
||||
return $key;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param int $user_id
|
||||
*
|
||||
* @return mixed
|
||||
*/
|
||||
public function get_private_key() {
|
||||
$key = \get_option( 'activitypub_blog_user_private_key', true );
|
||||
|
||||
if ( $key ) {
|
||||
return $key;
|
||||
}
|
||||
|
||||
$this->generate_key_pair();
|
||||
|
||||
return \get_option( 'activitypub_blog_user_private_key', true );
|
||||
}
|
||||
|
||||
private function generate_key_pair() {
|
||||
$key_pair = Signature::generate_key_pair();
|
||||
|
||||
if ( ! is_wp_error( $key_pair ) ) {
|
||||
\update_option( 'activitypub_blog_user_public_key', $key_pair['public_key'], true );
|
||||
\update_option( 'activitypub_blog_user_private_key', $key_pair['private_key'], true );
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -130,7 +130,41 @@ class User {
|
|||
}
|
||||
|
||||
public function get_public_key() {
|
||||
return Signature::get_public_key( $this->user_id );
|
||||
$key = \get_user_meta( $this->get_user_id(), 'magic_sig_public_key', true );
|
||||
|
||||
if ( $key ) {
|
||||
return $key;
|
||||
}
|
||||
|
||||
$this->generate_key_pair();
|
||||
|
||||
return \get_user_meta( $this->get_user_id(), 'magic_sig_public_key', true );
|
||||
}
|
||||
|
||||
/**
|
||||
* @param int $user_id
|
||||
*
|
||||
* @return mixed
|
||||
*/
|
||||
public function get_private_key() {
|
||||
$key = \get_user_meta( $this->get_user_id(), 'magic_sig_private_key', true );
|
||||
|
||||
if ( $key ) {
|
||||
return $key;
|
||||
}
|
||||
|
||||
$this->generate_key_pair();
|
||||
|
||||
return \get_user_meta( $this->get_user_id(), 'magic_sig_private_key', true );
|
||||
}
|
||||
|
||||
private function generate_key_pair() {
|
||||
$key_pair = Signature::generate_key_pair();
|
||||
|
||||
if ( ! is_wp_error( $key_pair ) ) {
|
||||
\update_user_meta( $this->get_user_id(), 'magic_sig_public_key', $key_pair['public_key'], true );
|
||||
\update_user_meta( $this->get_user_id(), 'magic_sig_private_key', $key_pair['private_key'], true );
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
Loading…
Reference in a new issue