OpenXPKI

新規にページを作成する場合、以下の要領で可能。

  1. UIのメニューを追加
  2. クライアント側とサーバ側(必要に応じて)を追加

例えば、パスワード変更画面を作成するとする。

UIのメニュー追加

サンプル /etc/openxpki/config.d/realm/<realm>/uicontrol/User.yaml

Userというロールを定義しているとする。

main:
  - key: home
    label: I18N_OPENXPKI_UI_MENU_HOME
    entries:
      - key:    workflow!task
	label:  I18N_OPENXPKI_UI_MENU_MY_TASK
      - key:    workflow!mine
	label:  I18N_OPENXPKI_UI_MENU_MY_WORKFLOW
      - key:    certificate!mine
        label:  I18N_OPENXPKI_UI_MENU_MY_CERTIFICATE
# 追加
      - key:    login!changepass
        label: Change Password	

モジュール名!メソッド名 のルール。メソッドにパラメータが必要な場合は、その後にさらに!パラメータと続ける。
上記は、page=login!changepass としてクライアントにクエリパラメータが渡される。

クライアント側とサーバ側の処理追加

クライアント側

login!changepassとした場合は、UI/Login.pminit_changepassメソッドが呼ばれる。

現在のパスワードと新しいパスワードを入力するフォームを表示するには以下のようにする。

サンプル Client/UI/Login.pm

sub init_changepass {
    my $self = shift;
    my $args = shift;

    $self->_page ({
        'label' => 'Change Password'
    });

    $self->_result()->{main} = [{ 'type' => 'form', 'action' => 'login!update_password', content => {
        fields => [
            { 'name' => 'current_pass', 'label' => 'Current Password', 'type' => 'password' },
            { 'name' => 'new_pass', 'label' => 'New Password', 'type' => 'password' },
        ]}
    }];

    return $self;

}

sub action_update_password {
    my $self = shift;
    my $args = shift;

    $self->init_changepass($args);

    # パラメタはcgiオブジェクトのparamで取得
    my $cgi = $self->cgi();

    # 大体はbackendにコマンド送信して処理する
    my $result = $self->send_command_v2('change_user_password', {
        current_pass => $cgi->param('current_pass'),
        new_pass => $cgi->param('new_pass'),
    });

    # フォームの下にセクションブロックを追加
    $self->add_section({
        type => 'text',
        content => {
            label => 'Status',
            description => $result->{status}
        }
    });

    return $self;
}

sectionで以下のようなhtmlが表示される。

<h3>Status</h3>
<div class="description">Success</div>

サーバ側

サンプル OpenXPKI/Server/API2/Plugin/User/change_user_password.pm

ファイルは、新規に作成している、実装はあくまでサンプル用。

package OpenXPKI::Server::API2::Plugin::User::change_user_password;
use OpenXPKI::Server::API2::EasyPlugin;

use OpenXPKI::Server::Context qw( CTX );
use OpenXPKI::Server::API2::Types;

command "change_user_password" => {
    current_pass => { isa => 'Str', required => 1, },
    new_pass => { isa => 'Str', required => 1, },
} => sub {
    my ($self, $params) = @_;

    my $current_pass = $params->current_pass;
    my $new_pass = $params->new_pass;

    if (($current_pass eq "oldpass") && ($new_pass ne $current_pass)) {
        return { status => 'success' };
    }

    return { status => 'failure' };
};

__PACKAGE__->meta->make_immutable;

command "コマンド名" の箇所でコマンドとAPIパラメータ仕様の定義をする。
sub以降で呼ばれる処理を記述する。



以上で実際に表示された画面は以下。

openxpki-add-page.png

添付ファイル: fileopenxpki-add-page.png 24件 [詳細]

トップ   差分 バックアップ リロード   一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
目次
ダブルクリックで閉じるTOP | 閉じる
GO TO TOP