| Новости | FAQ | Авторы | Документация | В действии | Библиотека |
| Инструменты | Полезные ссылки | Хостинги | Скачать | Примеры | Форум |
Sanja v.2 24.05.2009 16:21
выкачайте и положите в ./lib новый модуль (не от JainRain), а consumer.cgi замените на#! /usr/bin/perl -I ./lib
use strict;
use warnings;
use CGI;
use LWP::UserAgent;
use Net::OpenID::Consumer;
use Digest::MD5 qw(md5_hex);
use URI::Escape;
my $SECRET = 'вставьте сюда что-нть своё.';
# Также замените http://lj.bougakov.com/table/login/
# /return.html в тексте ниже на свой URI
my $cgi = new CGI;
if ($cgi->param("user")) {
my $csr = init_consumer($cgi);
my $url;
if ($cgi->param('site')) {
$url = sprintf($cgi->param('site'),$cgi->param('user'));
} else {
$url = $cgi->param('user');
}
print STDERR "URL entered: $url\n";
my $claimed_identity = $csr->claimed_identity($url);
if (! defined $claimed_identity) {
foreach my $par ($cgi->param) {
print STDERR "$par = ".$cgi->param($par)."\n";
}
print "No identity on given URL";
}
my $check_url = $claimed_identity->check_url(
return_to =>
$cgi->url(-full=>1,-query=>0)."?openidvfy=1",
trust_root=>$cgi->url(-base=>1));
print $cgi->redirect(-location=> $check_url);
} elsif ($cgi->param("openidvfy")) {
my $csr = init_consumer($cgi);
if (my $setup_url = $csr->user_setup_url) {
print $cgi->redirect(-location=>$setup_url);
exit(0);
} elsif ($csr->user_cancel) {
print $cgi->header('text/html');
print $cgi->start_html("Login cancelled"),
$cgi->h1("Login cancelled"),
$cgi->p("You've cancelled login on other site"),
$cgi->end_html;
} elsif (my $vident = $csr->verified_identity) {
my $timestamp = time();
my $hash = md5_hex($SECRET . "|" . $vident->url . "|".$ENV{HTTP_USER_AGENT}."|".$ENV{REMOTE_ADDR}."|".$ENV{HTTP_VIA}."|".$timestamp);
print $cgi->redirect('http://lj.bougakov.com/table/login/return.html?timestamp=' . $timestamp . '&identity_url=' . uri_escape($vident->url) . '&token=' . uri_escape($hash) . '&dummy=1');
# print $cgi->header('text/html');
# print $cgi->start_html("Authentication successful"),
# $cgi->h1("Authentication successfull"),
# $cgi->p("You've successfully logged into our site as",
# $cgi->a({-href=>$vident->url},$vident->display),". Congratulations!"),
# $cgi->end_html;
} else {
print $cgi->header('text/html');
print $cgi->start_html("Authentication failed"),
$cgi->h1("Authentication failed"),
$cgi->p("Error validating identity:",
$cgi->escapeHTML($csr->err));
$cgi->end_html;
}
} else {
# Print out form to enter OpenID URL
my %site_list=(
'http://users.livejournal.com/%s'=>'LiveJournal');
# 'http://lj.rossia.org/users/%s'=>'LJ.Rossia.org',
# 'http://www.greatestjournal.com/users/%s'=>'GreatestJournal',
# '%s','Other (enter full URL into Login field');
print $cgi->header("text/html"),
$cgi->start_html("My test open_id page"),
$cgi->h1("My test open_id page"),
$cgi->start_form(-method=>'POST'),
"Login:",$cgi->textfield(-name=>"user",-size=>40),"<br>",
"Site:",
$cgi->popup_menu(-name=>"site",-Values=>[sort keys(%site_list)],
-labels=>\%site_list),
"<br>",$cgi->submit(-name=>'login',-value=>'Log in'),
$cgi->end_form,
$cgi->end_html;
exit(0);
}
sub init_consumer {
my $cgi=shift;
return Net::OpenID::Consumer->new(
ua => LWP::UserAgent->new(),
args => $cgi,
consumer_secret => $SECRET ,
required_root => $cgi->url(-base=>1),
);
}