1. 通常CGIとのI/F | 2. 認証CGIとのI/F | 2.1 Linuxの認証 | 2.2 Windowsの認証 |
形式 | CGJS.cgjs_if(recv_obj, send_obj); | |
引数 | recv_obj | ■ 同期処理 CGIの処理結果を受け取る連想配列(Hash)。 最初の引数が連想配列の場合、cgjs_ifはCGIの処理が終わるの待つて、 結果をrecv_objに設定する。 recv_obj.CGI_CODE :CGIの終了コード。正常終了は0。 recv_obj.CGI_MESSAGE:CGIのエラーメッセージ。正常終了は空の文字列。 recv_obj.CGI_OBJ :CGIからの転送ObjectのHash ■ 非同期処理 CGIの処理結果を処理するCallBack関数名を設定する。 関数の定義・引数は以下の通りですが、引数の値は同期処理の場合と同じです。 function recv_obj(CGI_CODE, CGI_MESSAGE, CGI_OBJ) { ... } |
send_obj | CGIに渡すGLOBAL変数のパラメータや、制御用のパラメータを定義した 連想配列(Hash)。以下の内部処理用のキーワードを参照 |
|
戻り値 | CGIを起動した結果のエラーメッセージ。正常終了の場合空の文字列。 |
log_file |
ログファイル名を指定します。アプリ開発時に多数の開発者が同じログファイルを使用すると 不便なので、一時的にFront部で別のログファイルを指定します。 ログファイルのディレクトリはCGJS.configで定義されたログファイルと同じで、変更できません。 |
execute ※必須 |
実行するモジュールの中から、TOPで実行する関数、引数をJavaScript Statementの 文字列 "func_name(arg1, arg2, ...);" で指定する。 |
cgi |
実行するCGI(CGJS.cgi、CGJS.exe、debugCGJS.cgi、debugCGJS.exe)を指定します。 指定がないとcgjs.jsファイルに設定されたCGIが実行されます。 一時的にデバッグ用のCGIを実行したい時に指定します。指定するのはファイル名だけで、 ディレクトリは/cgi-bin/配下で、変更できません。 |
include |
Back Endで実行するモジュールを指定します。カンマ区切りで複数指定可能(指定順にLOADされる)。 モジュールが拡張子なしで指定された場合、ソースファイル(.js)とコンパイルされたObjectファイル (.jo)を比較し、TimeStampが新しいほうがLOADされます。 CGJS.configファイルで指定された共通モジュールは、include指定のモジュールより先にLOADされます。 |
timeout |
Ajaxのタイムアウト時間(秒)を指定します。アプリ開発中で、デバッガーでステップ実行する時に タイムアウトしないよう長く設定します。 Apache2 等ブラウザーのTimeOutも長い時間に設定してください。 |
形式 | CGJS.cgjs_login(recv_obj, send_obj, os_type); | |
引数 | recv_obj | CGIの処理結果を受け取る連想配列(Hash)。 最初の引数が連想配列の場合、cgjs_ifはCGIの処理が終わるの待つて、結果をrecv_objに設定する。 recv_obj.CGI_CODE :CGIの終了コード。正常終了は0。 recv_obj.CGI_MESSAGE:CGIのエラーメッセージ。正常終了は空の文字列。 recv_obj.CGI_OBJ :CGIからの転送ObjectのHash |
send_obj | CGIに渡すGLOBAL変数のパラメータや、制御用のパラメータを定義した連想配列(Hash) | |
os_type | OSがWindowsかLinuxかを指定する文字 OSがWindowsの場合'W'を、Linuxの場合'L'を指定する。 |
|
戻り値 | CGIを起動した結果のエラーメッセージ。正常終了の場合空の文字列。 |
execute ※必須 |
実行するモジュールの中から、TOPで実行する関数、引数を指定する。 |
include |
Back Endで実行するモジュールを指定します。カンマ区切りで複数指定可能(指定順にLOADされる)。 モジュールが拡張子なしで指定された場合、ソースファイル(.js)とコンパイルされたObjectファイル (.jo)を比較し、TimeStampが新しいほうがLOADされます。 CGJS.configファイルで指定された共通モジュールは、include指定のモジュールより先にLOADされます。 |
command ※必須 |
認証プログラムのコマンドライン文字列を指定する。プログラムのディレクトリはCGJS CGIと同じで、 /cgi-bin/から変更できません。 (例 Linux:"auth_check.sh ID_str PASS_str" Windows:"check_login.bat ID_str PASS_str") |
// ログインのボタン押下イベント
function check_data() {
let send_obj = {
command:'auth_check.sh ' + $('#id').val() + ' ' + $('#pass').val(), // 認証のコマンドライン
include:"demo_module/check_login.js", // 実行するモジュール
execute:"check_login()", // 実行するTOP関数
}
let obj = { };
let ret = CGJS.cgjs_login(obj, send_obj, 'L'); // 'L'はLinux
if (ret != "") {
alert(ret); // Ajaxで認証CGI起動エラー
return;
}
if (obj.CGI_CODE != 0) {
alert(obj.CGI_MESSAGE); // 認証CGIの後に起動されたCGJS CGIのエラー
return;
}
if (obj.CGI_OBJ.RESULT != 1) {
alert("認証エラー"); // 認証でのエラー
return;
}
sessionStorage.removeItem("company"); // 認証結果のsession変数を一旦クリア
sessionStorage.removeItem("division");
sessionStorage.removeItem("department");
sessionStorage.removeItem("user_mame");
let tmp = obj.CGI_OBJ.COMPANY;
if (tmp)
sessionStorage.setItem("company", tmp); // 会社名を設定
tmp = obj.CGI_OBJ.DIVISION;
if (tmp)
sessionStorage.setItem("division", tmp); // 本部名を設定
tmp = obj.CGI_OBJ.DEPARTMENT;
if (tmp)
sessionStorage.setItem("department", tmp); // 部室名を設定
tmp = obj.CGI_OBJ.NAME;
if (tmp)
sessionStorage.setItem("user_mame", tmp); // ログインユーザの氏名
location.href = "population.html"; // 認証後のページに遷移
return;
}
#!/bin/sh
# 引数のID、PASSWORDをチェックする
if [ "$1" = "CGJS" -a "$2" = "TEST" ]; then
# 認証成功の文字列を出力
STR="RESULT=CGJS;MESSAGE=認証に成功しました"
STR="${STR};COMPANY=テスト株式会社;DIVISION=テスト本部;DEPARTMENT=テスト第三部"
echo "${STR};NAME=試験 太郎"
else
# 認証失敗の文字列を出力
echo "RESULT=0;MESSAGE=認証に失敗しました"
fi
exit 0
// 認証後の処理(check_login.js)
function check_login() {
// フロントに結果を転送する
sendToFront('RESULT', 1);
sendToFront(COMPANY);
sendToFront(DIVISION);
sendToFront(DEPARTMENT);
sendToFront(NAME);
}
// ログインのボタン押下イベント
function check_data() {
let send_obj = {
command:'check_login.bat ' + $('#id').val() + ' ' + $('#pass').val(), // 認証コマンドライン
include:"demo_module/check_login.js", // 実行するモジュール
execute:"check_login()", // 実行するTOP関数
}
let obj = { };
let ret = CGJS.cgjs_login(obj, send_obj, 'W'); // 'W'はWindows
if (ret != "") {
alert(ret); // Ajaxで認証CGI起動エラー
return;
}
if (obj.CGI_CODE != 0) {
alert(obj.CGI_MESSAGE); // 認証CGIの後に起動されたCGJS CGIのエラー
return;
}
if (obj.CGI_OBJ.RESULT != 1) {
alert("認証エラー"); // 認証でのエラー
return;
}
// 認証結果のsession変数を一旦クリア
sessionStorage.removeItem("company");
sessionStorage.removeItem("division");
sessionStorage.removeItem("department");
sessionStorage.removeItem("user_mame");
let tmp = obj.CGI_OBJ.COMPANY;
if (tmp)
sessionStorage.setItem("company", tmp); // 会社名を設定
tmp = obj.CGI_OBJ.DIVISION;
if (tmp)
sessionStorage.setItem("division", tmp); // 本部名を設定
tmp = obj.CGI_OBJ.DEPARTMENT;
if (tmp)
sessionStorage.setItem("department", tmp); // 部室名を設定
tmp = obj.CGI_OBJ.NAME;
if (tmp)
sessionStorage.setItem("user_mame", tmp); // ログインユーザの氏名
location.href = "population.html"; // 認証後の人口検索ページに遷移
return;
}
@echo off
setlocal enabledelayedexpansion
cd %~dp0
set VAL=FALSE
if "%1"=="CGJS" if "%2"=="TEST" set VAL=TRUE
if %VAL%==TRUE (
set STR=RESULT=CGJS;MESSAGE=Login-Success
set STR=!STR!;COMPANY=TEST-LTC;DIVISION=DEVELOP-DIV;DEPARTMENT=Devlop-3
echo !STR!;NAME=TEST-TARO
) else (
echo MESSAGE=Login-Failed
)
exit /b 0
// 認証後の処理(check_login.js)
function check_login() {
// フロントに結果を転送する
sendToFront('RESULT', 1);
sendToFront(COMPANY);
sendToFront('DIVISION', DIVISION);
sendToFront(DEPARTMENT);
sendToFront(NAME);
}