Mozilla-Persona
    
    
  
  
  
view release on metacpan or search on metacpan
lib/Mozilla/Persona/Server.pm view on Meta::CPAN
    eval "require $class"; panic $@ if $@;
    $self->{MP_validator} = $class->new(%$config);
}
sub privatePEM()
{   my $self = shift;
    my $pem  = read_file $self->{MP_pem_fn};
    my $key  = Crypt::OpenSSL::RSA->new_private_key($pem);
    $key->use_pkcs1_padding;
    $key->use_sha256_hash;
    $key;
}
#------------------------
sub getSession($)
{   my ($self, $cgi) = @_;
    my $cookie  = $cgi->cookie($self->cookie)
lib/Mozilla/Persona/Setup.pm view on Meta::CPAN
use Mozilla::Persona::Server ();
use Crypt::OpenSSL::Bignum   ();
use Crypt::OpenSSL::RSA      ();
use LWP::UserAgent           ();
my $ua;
my $latest_jquery = 'http://code.jquery.com/jquery.min.js';
my $restart;
sub get_jquery($$);
sub create_private_key($$);
sub publish_config($$);
sub publish_helpers($$$);
sub setup_persona(%)
{   my %args = @_;
    ### Configuration
    my $docroot = $args{docroot} or panic;
lib/Mozilla/Persona/Setup.pm view on Meta::CPAN
    -d $wk || mkdir $wk
        or fault __x"cannot create directory {dir} for publish", dir => $wk;
    my $publish = "$wk/browserid";
    (my $setup_src = __FILE__) =~ s!Setup.pm$!setup!;
    ### Work
    get_jquery $latest_jquery, $jquery;
    create_private_key $privkey, $group;
    publish_config $publish, $privkey;
    my $persona = Mozilla::Persona::Server->new
     ( private_pem => $privkey
     , cookie_name => 'persona'
     , domain      => $domain
     , validator   =>
        { class  => 'Mozilla::Persona::Validate::Table'
        , pwfile => "$secrets/passwords"
        , domain => $domain
lib/Mozilla/Persona/Setup.pm view on Meta::CPAN
    $ua ||= LWP::UserAgent->new;
    my $resp = $ua->get($from_url);
    $resp->is_success
        or error __x"failed downloading jquery from {url}: {err}"
             , url => $from_url. err => $resp->status_line;
    write_file $to_fn, $resp->decoded_content || $resp->content;
}
sub create_private_key($$)
{   my ($outfn, $group) = @_;
    my $gid = getpwnam $group
        or error __x"unknown group {name}", name => $group;
    if(-f $outfn && !$restart)
    {   info __x"reusing private key in {fn}", fn => $outfn;
        my $has_gid = (stat $outfn)[5];
        $gid == $has_gid
lib/Mozilla/Persona/Setup.pm view on Meta::CPAN
        return;
    }
    info __x"generating new private key at {fn}", fn => $outfn;
    ! -f $outfn || unlink $outfn
        or fault __x"cannot replace existing pem file in {fn}", fn => $outfn;
    my $key = Crypt::OpenSSL::RSA->generate_key(2048);
    write_file $outfn, $key->get_private_key_string;
    chmod 0440, $outfn;
    chown -1, $gid, $outfn
        or warning __x"please set group on {fn} to {group}"
             , fn => $outfn, group => $group;
    $key;
}
sub publish_config($$)
{   my ($outfn, $keyfn) = @_;
    my $pem = read_file $keyfn;
    my $key = Crypt::OpenSSL::RSA->new_private_key($pem);
    my ($n, $e, @stuff) = $key->get_key_parameters;
    write_file $outfn, encode_json
      { 'public-key'     =>
          { e => $e->to_decimal
          , n => $n->to_decimal
          , algorithm => 'RS'
          }
      , authentication => '/persona/authenticate.html'
      , provisioning   => '/persona/provision.html'
( run in 0.628 second using v1.01-cache-2.11-cpan-c333fce770f )