アーカイブ
Tyzohブログ - ikarashiさんのエントリ
 ikarashiさんのエントリ配信

2007/07/25
[Secure-SBM:026] サービスの閉塞処理

執筆者: ikarashi (11:21 am)
こんにちは,五十嵐です.データベースのバックアップの処理を追加しますが,その前に,サービスの閉塞処理を行います.いわゆる 「メンテナンス画面」 の表示です.表示を変えるだけなら簡単ですが,データベースにアクセスしないようにする必要があるため,いままで作ってきたコントローラにすこしずつ処理を追加する必要があります.

現在利用している PostgreSQL (フリー版)には閉塞にする処理が無いようですので,アプリケーションの閉塞を行います.

サービスを停止するためにファイルを作成します.このロックファイルの中には,セッション ID を格納しておきます.同じセッション ID をもつブラウザのみがサービスを開始できます.(セッション ID のセキュリティについては別途)

"service_disable" と "service_enable" というアクションを用意して,閉塞処理と閉塞解除処理を行います.
sub service_disable : Local {
    my ( $self, $c ) = @_; 

    if( _makeLockfile( @_ ) ){
        $c->log->debug('Success: make ' . $c->config->{lockoutfile});
    }else{
        $c->stash->{resultmessage} = 'Cannot make lockfile';
    }   
    $c->stash->{lockout} = 1;
    $c->logout;
    $c->forward('index');
}

sub service_enable : Local {
    my ( $self, $c ) = @_; 

    if( _deleteLockfile( @_ ) ){
        $c->log->debug('Success: delete ' . $c->config->{lockoutfile});
        undef $c->stash->{lockout};
    }else{
        $c->stash->{resultmessage} = 'Cannot delete lockfile';
    }   
    $c->forward('index');
}


"$c->stash->{lockout}" を 1 に設定することで,メニューを一掃するようにします.

ロックファイルを作ることで,他のユーザがアクセスした場合に Root::auto でチェックします.

sub auto : Private {
    my ( $self, $c ) = @_; 

    if( my $sessionid = SecureSBMLib::_isServiceLocked( @_ ) ){

        $c->stash->{lockout} = 1;

        if( $c->controller eq $c->controller('Noauth::Mentenance') ){
            return 1;
        }

        if ( $c->sessionid eq $sessionid ) { 
            if( $c->controller eq $c->controller('Admin::ServiceCtl') ){
                return 1;
            }
        }

        $c->res->redirect( $c->uri_for('/mentenance') );
        return 0;

    }else{

...


"Noauth::Mentenance" は「メンテナンス中」を表示するページですので,無条件でチェックを抜けます."Admin::ServiceCtl" はサービス閉塞の解除を行うページですので,セッション ID を確認して,auto を抜けます.それ以外ではデータベースのバックアップを取り扱うコントローラ "Admin::DBMentenance" を追加予定ですが,これについては,次回にします.他のページにアクセスした場合には「メンテナンス中」を表示します.

auto アクションがあるおかげで,チェックが簡単に済みました.次回はデータベースのバックアップ処理です.

2007/07/05 記

参考:

Keyword: Perl Catalyst Secure-SBM SSBM セキュア・ソーシャル・ブックマーク オープンソース
ikarashiさんのブログを読む | コメント (0) | トラックバック数 (0) | 閲覧数 (4201)
Trackback is not accepted now.
印刷用ページ 友達に送る
 
投稿された内容の著作権はコメントの投稿者に帰属します。
サイト内検索
ブログ カレンダー
«  «  2008 3月  »  »
24 25 26 27 28 29 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5