Hatena::ブログ(Diary)

(ひ)メモ このページをアンテナに追加 RSSフィード

2006-11-28 (Tue)

Net::SSL::ExpireDate + Plagger で証明書の期限切れをチェック

g:subtech:id:miyagawa:20061024:1161678503 でとっくに先を越されてしまったけど、証明書の期限が切れる2か月前、2週間前、3日前、当日にNotifyしてくれるのをPlaggerでやってみた。

Net::SSL::ExpireDate 1.01からcheck-cert-expire.plというスクリプトを同梱しています。これは、テキストファイルに書かれたhttpsなURLやファイルパスの証明書について、N日後やNか月後など一定期間後に証明書の期限が切れているかどうかをチェックしてくれるスクリプトです。

check-cert-expire.plはYAMLで出力するので、これをCustomFeed::Scriptを使ってPlaggerに食べさせてあげれば、NotifyするのもPublishするのもミサイル打つのもあとはご自由にです。

例えば、期限が切れる

  • 10年前 (これはデバッグ用というか確認用)
  • 2か月前
  • 2週間前
  • 3日前
  • 当日

にNotifyするならこんなYAMLで。

plugins:
  - module: Subscription::Config
    config:
      feed:
        - script:check-cert-expire.pl -l -f /PATH/TO/cert-list.txt -d '10 years'
        - script:check-cert-expire.pl -l -f /PATH/TO/cert-list.txt -d '2 months'
        - script:check-cert-expire.pl -l -f /PATH/TO/cert-list.txt -d '2 weeks'
        - script:check-cert-expire.pl -l -f /PATH/TO/cert-list.txt -d '3 days'
        - script:check-cert-expire.pl -l -f /PATH/TO/cert-list.txt

  - module: CustomFeed::Script

  - module: Filter::Rule
    rule:
      - module: Deduped
        path: /var/state/plagger/cert-expire.db

check-cert-expire.plに-lオプションつけると、

    link: https://rt.cpan.org#10%20years

みたいに期間指定の文字列をフラグメントにつけたダミーのURLも出力してくれます。このオプションつけないと、Dedupedのキーが全部同じになるんで、-d '10 years'のNotifyが1回来るだけになっちゃうのでご注意を。

d:id:hirose31の人気エントリ

sectionモジュールな感じで、ダイアリの人気エントリ ( http://b.hatena.ne.jp/entrylist?url=http%3A%2F%2Fd.hatena.ne.jp%2Fhirose31%2F&sort=count とか) の上位N件をさくっと表示してくれるはてなモジュールってないのかなぁ。>教えてはてなダイアリーはてなちゃん


あ。

<hatena name="rss" url="http://b.hatena.ne.jp/entrylist?mode=rss&amp;url=http%3A%2F%2Fd.hatena.ne.jp%2Fhirose31%2F&amp;sort=count&amp;threshold=3" template="hatena-module" listlimit="10" moduletitle="人気順の過去エントリ">

こんなんでとりあえずできた。

けど、

  • タイトル削りたい
  • はてブ数表示したいな。

ああ。

に書いてあたよ。

2006-11-26 (Sun)

PHP×WebサービスAPIコネクションズにService_OpenSearchが掲載されました!

秋元@サイボウズラボさんが書いた

PHP×WebサービスAPIコネクションズ

PHP×WebサービスAPIコネクションズ

に、拙作のPEAR Services_OpenSearchが掲載されました+献本いただきました。

この本、巷のWeb APIの羅列にとどまらず、サンプルプログラムや既存の応用例の紹介もあるので、(PHPじゃない人でも)

  • Web APIってなんとなく知ってるけど使ったことない
  • XXX API使ってるけど、ほかのAPIでどんなのがあるか/どんなことができるのかしらにゃい

という向きにはいいんじゃないかと思います。

で、PEAR Services_OpenSearchなんですが、OpenSearch 1.0のみ対応で、1.1 (Atom対応とか) には対応してなかったりします。Magpie使えばいいんでない?という提案は随分前に使用者の方からいただいていたんですが、そろそろ本腰入れて調査+対応しようかと思います。


P.S.

Net::SSL::ExpireDateにしてもmregexpにしても、自分が作ったプロダクトの反応もらえるとうれしいですねぇー

2006-11-21 (Tue)

Net::SSL::ExpireDate + Test::Base で証明書の期限切れをチェック

拙作のNet::SSL::ExpireDateとTest::Baseとで証明書の期限切れをチェック。

こんな感じの出力。

$ prove -v sample/cert-expire.t
sample/cert-expire....1..2
ok 1 - rt.cpan.org
ok 2 - www.google.com
ok
All tests successful.
Files=1, Tests=2,  5 wallclock secs ( 0.33 cusr +  0.03 csys =  0.36 CPU)

で、期限切れのがいるとこんな感じに。

$ prove -v sample/cert-expire.t
sample/cert-expire....1..2

#   Failed test 'rt.cpan.org'
#   in sample/cert-expire.t at line 27.
#          got: '2015-04-14T05:12:17'
#     expected: undef
not ok 1 - rt.cpan.org
(snip)

追記


#!/usr/bin/env perl
# -*- mode: cperl; -*-
use Test::Base;
use Net::SSL::ExpireDate;
use Regexp::Common qw(net);

my $Check_Duration;
# $Check_Duration = '15 years';

plan tests => 1 * blocks;

run {
    my $block = shift;
    my $ed = Net::SSL::ExpireDate->new( build_arg($block->name) );
    is($ed->is_expired($Check_Duration) && $ed->expire_date->iso8601,
       undef,
       $block->name);
};

sub build_arg {
    my ($v) = @_;
    if ($v =~ m{^(file)://(.+)}) {
        return $1 => $2;
    } elsif ($v =~ m{^(https)://([^/]+)}) {
        return $1 => $2;
    } elsif ($v =~ m{^$RE{net}{domain}{-nospace}{-keep}$}) {
        return 'https' => $1;
    } elsif (-r $v) {
        return 'file' => $v;
    } else {
        croak "$v: assume file. but cannot read.";
    }
}

__END__
=== rt.cpan.org
=== www.google.com

2006-11-20 (Mon)

Net::SSL::ExpireDate 1.00

以前(id:hirose31:20061023:1161592213)ちょっと書いた、Net::SSL::ExpireDateをリリースしました。

SYNOPSISでだいたい使い方はわかるんじゃないかと思いますが、あとでサンプルスクリプトとか紹介するかもしれないす。

続きを読む

OpenSSL 0.9.6とNet::SSLeay 1.30

0.9.7でなくOpenSSL 0.9.6な環境にNet::SSLeay 1.30をインストールすると、

/usr/local/lib/perl5/site_perl/5.8.7/i686-linux/auto/Net/SSLeay/SSLeay.so' for module Net::SSLeay: /usr/local/lib/perl5/site_perl/5.8.7/i686-linux/auto/Net/SSLeay/SSLeay.so: undefined symbol: X509_STORE_set_trust at /usr/local/lib/perl5/5.8.7/i686-linux/DynaLoader.pm

てな感じでエラーになる。

対処法は、

にあるとおり、Net::SSLeayのsvn (http://svn.debian.org/wsvn/net-ssleay) のtrunkをもってきてそれをインストールすればOK。

$ svn co svn://svn.debian.org/net-ssleay/trunk/ Net-SSLeay
$ cd Net-SSLeay
$ perl Makefile.PL
...

2006-11-10 (Fri)

2006-11-06 (Mon)

いろんなプログラミング言語のコメント記法のまとめ

fjに流れてたのをふと思い出してさがしてみた。

ちなみに手元に残っていたのは1999年のv1.14だた。

関係ないけど、はてなパーカー欲しい!

Encode::ISO2022JPMS

Encode-EUCJPMSとあわせて使って相互変換ができるそうな。

が、ISO-2022-JP-MSじゃなくてCP50220 or CP50221 を使ったほうがいいらしい。

uwjhta mazkjuwjhta mazkj 2007/02/04 16:21 flsrkhw oxvnkwsz mvjnruqdi yjrqbhvfd povarldz eytpm yfjdvl

hfxpwet fyhghfxpwet fyhg 2007/02/04 16:22 cxszkm vwxnez lgypdnsr njgqec zjcmhxd gkjian jyumnkv http://www.itrlpasn.xonerskct.com

tyasuvobw cjhefutyasuvobw cjhefu 2007/02/04 16:23 uepjlm melxvagh ihojn durtzhekb gwjo yhleiwq alzm <A href=”http://www.ghqbfwoal.lsbnf.com”>imgkzu wjbzon</A>

tyasuvobw cjhefutyasuvobw cjhefu 2007/02/04 16:24 uepjlm melxvagh ihojn durtzhekb gwjo yhleiwq alzm <A href=”http://www.ghqbfwoal.lsbnf.com”>imgkzu wjbzon</A>

hxunftvy uxjdzwmlhhxunftvy uxjdzwmlh 2007/02/04 16:25 vmlbpoxq hxdbo ylopnvh ykjvnuha wygtom nhsct jshcxeipk [URL=http://www.mevyjrbq.edaopjgml.com]evpjg sbdhgcy[/URL]

hjxnacys vjmthjxnacys vjmt 2007/02/04 16:26 bahvplet jqlcgn jvpngmd bvpz mpuxiczb hnxg utrqzymc [URL]http://www.wbuzvgjnf.iubsn.com[/URL] fhdr nicdthlae

2006-11-01 (Wed)

Notify::XMPP 0.06

お知らせ

使っているモジュールの関係でNotify::XMPP用のplagger-xmppbotは動かなくなってしまったので、代わりに

を使うことをおすすめします。


ダウンロードはこちらから。

Notify::XMPPは、JabberやGoogle TalkといったXMPPを使ったIMにNotifyメッセージを送るためのPluginです。

日中、IMはずっと立上げているので、緊急度の高いモノはNotify::XMPPでIMに知らせるようにしていて重宝しています。


使い方はこんな感じです。

まず、こんな感じのYAMLを用意します。(globalとかは適宜設定してください)

plugins:
  - module: Notify::XMPP
    config:
      jid: foo@jabber.org
      password: XXXXX
      to:
        - bar@jabber.org
        - baz@gmail.com
        - qux@jabber.jp

toにはNotifyを受け取る人のIDを列挙します。(複数書けます)

一方、jidとpasswordには、Notifyを送るのに使うアカウントのID情報を指定します。このアカウントは後程起動するbotによって常駐することになるので、通知用の専用アカウントを作ったほうがいいと思います。

YAMLができたらbotを起動します。

$ ./bin/plagger-xmppbot -c xmpp.yaml

これでjidのアカウントが、JabberやGoogle Talkのコンタクトリスト上でオンラインになったはずです。まだコンタクトリストに登録していなかったら、jidで指定したIDに通常と同じように登録要求を送ればそっこーで承認されるはずです。

これでNotifyするための準備はできました。

あとは、

$ plagger -c xmpp.yaml

すれば、Notify::XMPP (実体は Notify::XMPP::IKC) が、plagger-xmppbot 経由でtoで指定したIDにメッセージを送ってくれます。

ちょうど、plagger-ircbotとNotify::IRCの構成と同じような感じです。


もし、常駐botなしでメッセージを送りたい場合は、YAMLにこのように、

  - module: Notify::XMPP
    config:
      jid: foo@jabber.org
      password: XXXXX
      direct: yes
      to:
        - bar@jabber.org
        - baz@gmail.com
        - qux@jabber.jp

「direct: yes」を指定すると、plagger-xmppbot経由ではなく、Notify::XMPP (実体は Notify::XMPP::Direct) が自前でメッセージを送ってくれます。

2003 | 11 | 12 |
2004 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 10 | 11 | 12 |
2005 | 01 | 02 | 03 | 05 | 08 | 09 | 10 | 11 | 12 |
2006 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2007 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2008 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2009 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2010 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2011 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 12 |
2012 | 01 | 02 | 03 | 06 | 08 | 10 | 11 | 12 |
2013 | 01 | 02 | 03 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2014 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 10 |
2015 | 01 | 02 | 07 | 10 |
2016 | 01 | 05 | 10 | 12 |
2017 | 07 |
2018 | 05 |