sharepoint onlineアクセスモニター
TRANSCRIPT
Visual Studioで作成するSharePointアドイン開発
SharePointOnlineアクセスモニター
2016年5月
SharePoint Onlineカスタマイズ
今回のお題
SharePoint Onlineのアクセスをリアルタイムにモニターする
利用する仕組み
• プロバイダーホスト型• SignalR(Web Socket)でリアルタイム表示
• UserCustomActions
• すべてのページにJavascriptを埋め込める
• ログ収集用のJavaScriptを埋め込む
埋め込みスクリプト(function () {
this.send = function () {if (!SP.ClientContext) {
setTimeout(this.send, 100);return;
}var ctx = new SP.ClientContext.get_current();var website = ctx.get_web();var currentUser = website.get_currentUser();ctx.load(currentUser);ctx.executeQueryAsync(function () {
var uid = currentUser.get_email();var r = new XMLHttpRequest(); r.open('POST', '" + actionUrl +@"', true);r.setRequestHeader( 'Content-Type', 'application/x-www-form-urlencoded' );r.send('title=' + encodeURIComponent(document.title) + '&url='+ encodeURIComponent( location.pathname +
location.search + location.hash) + '&user=' + uid );},function () {
var r = new XMLHttpRequest(); r.open('POST', '" + actionUrl +@"', true);r.setRequestHeader( 'Content-Type', 'application/x-www-form-urlencoded' );r.send('title=' + encodeURIComponent(document.title) + '&url='+ encodeURIComponent( location.pathname +
location.search + location.hash) + '&user=');});
}setTimeout(this.send, 0);
})();
ログ収集用のWebサービスにタイトルとURLとメールアドレスを送信するJavascript
JavaScriptの埋め込みprivate void SetUserScript(ClientContext ctx, string script){
var userCustomActions = ctx.Site.UserCustomActions;
ctx.Load(userCustomActions);ctx.ExecuteQuery();var action = userCustomActions.Where(x => x.Title == userScriptName).FirstOrDefault();if (action == null){
action = userCustomActions.Add();action.Location = "ScriptLink";action.Title = userScriptName; ;
}action.ScriptBlock = script??"";action.Sequence = 1000;action.Update();ctx.ExecuteQuery();
//空の場合削除するif (string.IsNullOrWhiteSpace(script)){
action.DeleteObject();ctx.Load(action);ctx.ExecuteQuery();return;
}}
ctx.Site.UserCustomActionsに登録
ログ受信処理
public ActionResult Write(string user, string title, string url){
var hubContext = GlobalHost.ConnectionManager.GetHubContext<MonitorHub>();hubContext.Clients.All.update(new{
Timestamp = DateTime.Now,User = user,Title = title,Url = url,
});return new HttpStatusCodeResult(200);
}
今回はファイル等には保存せず、SignalRでブロードキャスト送信
ログ表示処理
$.connection.hub.start().done(function () {$("#connection-satus").text("接続済み");
});var myHub = $.connection.monitorHub;myHub.client.update = function (model) {
$("#messagelist tbody").prepend($('<tr class="msg2"><td colspan="3"><p class="ellipsis">' + model.Url + "</p></td></tr>"));
$("#messagelist tbody").prepend($('<tr class="msg1"><td><p class="ellipsis">‘+ model.Timestamp + '</p></td><td><p class="ellipsis">‘+ model.Title + '</p></td><td><p class="ellipsis">' + model.User + '</p></td></tr>'));
if ($("#messagelist tbody tr").length > 100) {$("#messagelist tbody tr:last-child").remove()$("#messagelist tbody tr:last-child").remove()
}};
SignalRで送信されたデータを画面に表示
できること/できないこと
•できること• 表示のタイミングでログするため、リストアイテム表示などSharePointの監査ログで収集できない項目もカバーできる
•できないこと• ファイルのプレビューはログ可能だが、ダウンロードや直接表示された場合はログはできない
• SharePointのJavaScriptをHackingすることである程度は対応できる
まとめ
• UserCustomActionsを使うとログ収集は簡単にできる
• SignalRなどの技術と組み合わせことでリアルタイムにモニターすることも可能
• SharePointのJavaScriptをHackingするとさらにいろいろでき可能性がある
• サンプルコード• https://github.com/akihiroe/SharePointAccessMonitor
http://www.proaxia-consulting.co.jp
Azure&SharePointアプリケーション開発についてのお問合せ[担当] [email protected]
SharePoint Onlineとファイルサーバーを統合するCloud Storage Lighthttps://www.cloudstoragelight.com
SharePoint 上のファイルをエクスプローラ感覚でサクサク操作するSharePointエクスプローラhttps://www.cloudstoragelight.com/sharepointexplorer/