Active Directoryの電話帳

記事を読みたくない人のために、すぐに
githubのリポジトリにアクセスしてください。
そして、猫の下の残りは、node-webkitの助けを借りて、私
がそのような人生をどうやって達成したかについての一貫性のない意味のない話を
待っています、私
は1年待っていたアプリケーションを書きました。
私はシステム管理者としてずっと、MS Active Directoryに感心していました。 そして、そのような機会が現れたらすぐに-私が働いている企業でそれを紹介しました。
そして、私たちは去ります...私はADで到達できるすべてのものを統合し始めました。 認証プロキシ、ACSの従業員のデータベース、アンチウイルスなど。 そして、幸いなことに、ADデータベースのすべてのデータを取得する
電話帳が足りませんでした。 6か月間、私はこのトピックについてGoogleを苦しめてきましたが、結果は心地よくありません。
そのようなディレクトリの基本要件:
- 個別のポータブルアプリケーション。 ウェブベースのディレクトリに出くわすたびに、「このためにサーバーを上げると、すでに本格的な企業ポータルを作成しているので、今は小さなディレクトリが必要です。
- 無料
- 最もシンプルで使いやすい。 常にソートと検索を行うテーブルのように思えました
私が見つけたそのようなソフトウェアの動物園全体から、いくつかのタイプがあります:
phpでサーバーバージョンを見たことがありますが、記事を書いているときにそれを見つけられませんでした。 私にとってのサーバー要件は欠点であるため、3番目のグループに起因する可能性があります。dmsoftからの参照についてこんな感じ

そして、少なくともデフォルトでは電話の列幅を大きくする方法はありません。 また、起動するたびにインターフェイスを設定するのは非常に面倒です。
この問題
を解決する
トラブルを予感させるものは何もありません
でしたが、昨日、
node-webkitについて
知りました !

使い慣れた言語でデスクトップアプリケーションを作成する機能-改善点 私の喜びは際限がありません。
しかし、運が悪い...自宅で、小さな子供が、常に注意を必要とし、仕事で、
突然仕事をします。 明確にコーディングする時間と場所はありません。
しかし、運命は私に有利でした-日曜日の午後、子供
は眠ることに決めました 。 妻は、「赤ちゃんが寝ている間に何をするのか?」という質問に答えて、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ニックネームの蹴り、狂気の運が結果をもたらしました:何らかの理由で、ドメインのスーパー管理者は認証されませんが、ゲストインターネット用に作成された権利を剥奪されたユーザーは
機能しました !
乾杯

法的手続きの時間はありません-さらに進んでいます。
- git init
- 免許
- デバッグのための汚いハック
require('nw.gui').Window.get().showDevTools();
- 古いコードのコピーアンドペースト
出来上がり

あなたは魔法を始めることができます...しかし、ほぼ1時間が経過しました。 赤ちゃんはいつでも目を覚ますことができます。 魔法の時間はありません-すべてを準備します。
クイックグーグルは、
TinyTableテーブルを操作するための優れたスクリプトであることが判明しました。 私は例として自分自身にそれを全体としてコピーしています。
コードのビット var ad = new ActiveDirectory(credentials.dn, credentials.dc, credentials.user, credentials.pass, {attributes: {user: [ 'cn', 'telephonenumber', 'mail' ]}});
あれ

ベビーベッドからうれしそうな叫び声がありました。
エピソード2:Morning Morning
6:50に 、約20分あります...
- アドレスバーを削除して、ウィンドウを呼び出します
package.json "window": { "title": "Telephone Directory", "toolbar": false }
- 検索フィールドでのオートフォーカス
- 部門をテーブルに追加するか、名前だけでなく、名前、電話、メール、部門のみを削除します
非表示のテキスト 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から応答を受信した場合、これは次のように変更されました。
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があるディレクトリにドッキングします。
次のようになります。

すべて-ネットワークドライブにアップロードしたり、好きなように配布したりできます。
PS
コードは急いで書かれたので、美しく輝いていません。 多くのことをさらに開発する必要があります。 しかし、コミュニティの助けがなければ、私はすでにそこにある以上のことをすることはないでしょう。 既に存在するもの-動作し、要件を完全に満たしています-が必要ではありません。
PPS
このアプリケーションは、約100人の従業員
(私が働いている従業員
など)を持つオフィス向けに設計されています。 少ないと、ADはほとんど使用されません。 そして、より大きなものでは、コードのいくらかの最適化が必要になるかもしれませんが、体のポータルまたは類似のものがおそらくすでに使用されています。
PPPS
コードは45行なので、JSを知らないシステム管理者であっても、プロジェクトをニーズに合わせて調整することは難しくありません。