Active Directoryの電話帳
記事を読みたくない人のために、すぐにgithubのリポジトリにアクセスしてください。
そして、猫の下の残りは、node-webkitの助けを借りて、私
私はシステム管理者としてずっと、MS Active Directoryに感心していました。 そして、そのような機会が現れたらすぐに-私が働いている企業でそれを紹介しました。
そして、私たちは去ります...私はADで到達できるすべてのものを統合し始めました。 認証プロキシ、ACSの従業員のデータベース、アンチウイルスなど。 そして、幸いなことに、ADデータベースのすべてのデータを取得する電話帳が足りませんでした。 6か月間、私はこのトピックについてGoogleを苦しめてきましたが、結果は心地よくありません。
そのようなディレクトリの基本要件:
- 個別のポータブルアプリケーション。 ウェブベースのディレクトリに出くわすたびに、「このためにサーバーを上げると、すでに本格的な企業ポータルを作成しているので、今は小さなディレクトリが必要です。
- 無料
- 最もシンプルで使いやすい。 常にソートと検索を行うテーブルのように思えました
私が見つけたそのようなソフトウェアの動物園全体から、いくつかのタイプがあります:
- かさばる :企業ポータルのjomportal 、 onlyoffice ...
- 有料 :原則として、 ドベストン 、 イチコスから必要なもの...
- 致命的な欠陥 を抱えている : gourami (ダム、開始しなかった、フレミアム)、 dmtsoft (その欠点についてはやや低い)、またはHTMLファイルを生成するあらゆる種類のVBスクリプト。
dmsoftからの参照について
こんな感じ
そして、少なくともデフォルトでは電話の列幅を大きくする方法はありません。 また、起動するたびにインターフェイスを設定するのは非常に面倒です。
そして、少なくともデフォルトでは電話の列幅を大きくする方法はありません。 また、起動するたびにインターフェイスを設定するのは非常に面倒です。
この問題
使い慣れた言語でデスクトップアプリケーションを作成する機能-改善点 私の喜びは際限がありません。
しかし、運が悪い...自宅で、小さな子供が、常に注意を必要とし、仕事で、 突然仕事をします。 明確にコーディングする時間と場所はありません。
しかし、運命は私に有利でした-日曜日の午後、子供は眠ることに決めました 。 妻は、「赤ちゃんが寝ている間に何をするのか?」という質問に答えて、node-webkitがいかにクールであるかについての私の熱狂的な叫びを思い出し、私の秘密の欲望を解き明かしたようです。
「大丈夫...もうプログラムに行く」
エピソード1:プロトタイプ前の3月
など。 新しいテクノロジーを学習するのに1.5〜2時間あり(実際、nodejsも私はしなかったので 2時間) 、何らかの理由でまだオープンソースプログラマーの誰も書いていないソフトウェアを書いています。 。
まず、GoogleはnodejsとActiveDirectoryの接続について質問しました。 彼は、 node-activedirectoryとldapjsの 2つのモジュールを提案しました 。 何時までにそうではなかったことを理解してください。
コード
ちなみに
var ActiveDirectory = require('activedirectory'); var ad = new ActiveDirectory('ldap://example.com', 'dc=example,dc=com', 'superadmin', 'pass'); var groupName = 'Employees'; ad.getUsersForGroup(groupName, function(err, users) { if (err) { console.log('ERROR: ' +JSON.stringify(err)); return; } if (! users) console.log('Group: ' + groupName + ' not found.'); else { console.log(users); } });
ちなみに
var groupName = 'Employees';
従業員-現在のすべての従業員を含むグループ
結果
ERROR: {"dn":"","code":49,"name":"InvalidCredentialsError","message":"80090308: LdapErr: DSID-0C0903A9, comment: AcceptSecurityContext error, data 52e, v1db0\u0000"}
うーん.... 2番目のモジュールを突くと同じ結果になりますが、時間が長くなります。 マナ喫煙、おなじみのnodejsニックネームの蹴り、狂気の運が結果をもたらしました:何らかの理由で、ドメインのスーパー管理者は認証されませんが、ゲストインターネット用に作成された権利を剥奪されたユーザーは機能しました !
乾杯
法的手続きの時間はありません-さらに進んでいます。
出来上がり
あなたは魔法を始めることができます...しかし、ほぼ1時間が経過しました。 赤ちゃんはいつでも目を覚ますことができます。 魔法の時間はありません-すべてを準備します。
クイックグーグルは、 TinyTableテーブルを操作するための優れたスクリプトであることが判明しました。 私は例として自分自身にそれを全体としてコピーしています。
コードのビット
var ad = new ActiveDirectory(credentials.dn, credentials.dc, credentials.user, credentials.pass, {attributes: {user: [ 'cn', 'telephonenumber', 'mail' ]}}); // function users2table (users) { tablehtml = ''; for (i in users) { var user = users[i]; console.log(user); tablehtml+='<tr>'; tablehtml+= '<td>'+user.cn+'</td>' tablehtml+= '<td>'+user.telephoneNumber+'</td>' tablehtml+= '<td>'+user.mail+'</td>' tablehtml+='</tr>' } console.log(tablehtml); $('#table tbody').html(tablehtml); sorter.init(); }
あれベビーベッドからうれしそうな叫び声がありました。
エピソード2:Morning Morning
6:50に 、約20分あります...
- アドレスバーを削除して、ウィンドウを呼び出します package.json
"window": { "title": "Telephone Directory", "toolbar": false }
- 検索フィールドでのオートフォーカス users2table
$('#query').focus();
- 部門をテーブルに追加するか、名前だけでなく、名前、電話、メール、部門のみを削除します 非表示のテキスト
var ad = new ActiveDirectory(credentials.dn, credentials.dc, credentials.user, credentials.pass, {attributes: {user: [ 'cn', 'telephonenumber', 'mail', 'department']}});
tablehtml+= '<td>'+user.department+'</td>'
- そして、ウィンドウを全画面表示にして、サイズが入らないようにします 非表示のテキスト
require('nw.gui').Window.get().maximize();
すでにかなり良いしかし、すでに7:30であり、私は走らなければなりません。
エピソード3:We Drive
昼食時に、私はコードに戻りました。
まず、作業のすべての方法について考えていた機能、つまりキャッシュを追加しました。 空のウィンドウを見るのは、ダウンロードを待つたびに(ほんの数秒ですが)迷惑です。
コード
ldapから応答を受信した場合、これは次のように変更されました。
また、空でない場合は、localstorageで読み込むスクリプトの空のスペースに追加されます。
これに:users2table(users);
var localusers = localStorage.users; var ldapusers = JSON.stringify(users); if (localusers != ldapusers) {localStorage.users = JSON.stringify(users)} else {console.log('users didn\'t changed')}; users2table(JSON.parse(localStorage.users));
また、空でない場合は、localstorageで読み込むスクリプトの空のスペースに追加されます。
if (localStorage.users) users2table(JSON.parse(localStorage.users));
いくつかのバグを修正し、それをとかし 、メールのmailtoリンクを追加しました...基本的にはすべて。
完了!ランチは終了しました。
しかし、この機能はすでに私のすべての計画を完全にカバーしているので、今のところ停止しました。
設置
- node-webkitを置く
- ダウンロードリリース
- private.jsファイルを置きます コンテンツ
module.exports = { dn:"ldap://example.com" ,dc:"dc=example,dc=com" ,user:"user" ,pass:"pass" };
- 打ち上げる
path\to\nodewebkit\nw.exe path\to\telephone-directory
配布
- 電話帳を.zipにパックします
- アーカイブの名前を.nwに変更します
- いくつかの魔法
copy /b path\to\nodewebkit\nw.exe+path\to\telephone-directory telephone-directory.exe
- node-webkitからnw.exe以外のすべてのファイルをtelephone-directory.exeがあるディレクトリにドッキングします。
次のようになります。
すべて-ネットワークドライブにアップロードしたり、好きなように配布したりできます。