<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	xmlns:georss="http://www.georss.org/georss" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:media="http://search.yahoo.com/mrss/"
	>

<channel>
	<title>Trikks</title>
	<atom:link href="http://trikks.wordpress.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://trikks.wordpress.com</link>
	<description>The digital adventures of Eric Herlitz</description>
	<lastBuildDate>Fri, 03 May 2013 10:22:35 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.com/</generator>
<cloud domain='trikks.wordpress.com' port='80' path='/?rsscloud=notify' registerProcedure='' protocol='http-post' />
<image>
		<url>http://s2.wp.com/i/buttonw-com.png</url>
		<title>Trikks</title>
		<link>http://trikks.wordpress.com</link>
	</image>
	<atom:link rel="search" type="application/opensearchdescription+xml" href="http://trikks.wordpress.com/osd.xml" title="Trikks" />
	<atom:link rel='hub' href='http://trikks.wordpress.com/?pushpress=hub'/>
		<item>
		<title>No node exists with id &#8217;0&#8242; when using uSiteBuilder</title>
		<link>http://trikks.wordpress.com/2013/03/30/no-node-exists-with-id-0-when-using-usitebuilder/</link>
		<comments>http://trikks.wordpress.com/2013/03/30/no-node-exists-with-id-0-when-using-usitebuilder/#comments</comments>
		<pubDate>Sat, 30 Mar 2013 12:24:35 +0000</pubDate>
		<dc:creator>trikks</dc:creator>
				<category><![CDATA[uSiteBuilder]]></category>
		<category><![CDATA[umbraco]]></category>

		<guid isPermaLink="false">http://trikks.wordpress.com/?p=517</guid>
		<description><![CDATA[So I&#8217;m experimenting with uSiteBuilder (from Vega IT) to bring some of my sites up to a more enterprise level. I did release the tool &#8220;Umbraco Masterpage CodeFile Fixer&#8221; in early 2012 and updated it with uSiteBuilder support recently. In some of my experiments I got the error &#8220;No node exists with id &#8217;0&#8242;&#8221;. Well [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=trikks.wordpress.com&#038;blog=7671208&#038;post=517&#038;subd=trikks&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
				<content:encoded><![CDATA[<p>So I&#8217;m experimenting with uSiteBuilder (<a href="http://usitebuilder.vegaitsourcing.rs/">from Vega IT</a>) to bring some of my sites up to a more enterprise level. I did release the tool &#8220;<a href="http://umbracocs.codeplex.com/">Umbraco Masterpage CodeFile Fixer</a>&#8221; in early 2012 and updated it with uSiteBuilder support recently.</p>
<p>In some of my experiments I got the error &#8220;No node exists with id &#8217;0&#8242;&#8221;. Well that sucks.</p>
<h2>My resolution</h2>
<p>Quite simple for me since I build and deploy a separate binary with all uSiteBuilder stuff. Remove the binary from the bin folder and run the install process by navigation to <a href="http://yoursite/install/" rel="nofollow">http://yoursite/install/</a>. This will setup or fix the root node. When done, you may try to place the uSiteBuilder binary in place again.</p>
<p>Cheers.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/trikks.wordpress.com/517/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/trikks.wordpress.com/517/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=trikks.wordpress.com&#038;blog=7671208&#038;post=517&#038;subd=trikks&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://trikks.wordpress.com/2013/03/30/no-node-exists-with-id-0-when-using-usitebuilder/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/90294caceec6e1e468a078d4f7f86ea1?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">trikks</media:title>
		</media:content>
	</item>
		<item>
		<title>Fixing the SharePoint 2013 Search Error &#8220;The content processing pipeline failed to process the item.&#8221;</title>
		<link>http://trikks.wordpress.com/2013/03/19/fixing-the-sharepoint-2013-search-error-the-content-processing-pipeline-failed-to-process-the-item/</link>
		<comments>http://trikks.wordpress.com/2013/03/19/fixing-the-sharepoint-2013-search-error-the-content-processing-pipeline-failed-to-process-the-item/#comments</comments>
		<pubDate>Tue, 19 Mar 2013 22:46:27 +0000</pubDate>
		<dc:creator>trikks</dc:creator>
				<category><![CDATA[SharePoint 2013]]></category>

		<guid isPermaLink="false">http://trikks.wordpress.com/?p=509</guid>
		<description><![CDATA[So I was indexing some external sites with my brand new SharePoint. Fun said I, nay said SharePoint and threw the error &#8220;The content processing pipeline failed to process the item.&#8221; like 3548 times or so. The fix Add the account running the Search Service to the local admin group. If you are uncertain it&#8217;s [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=trikks.wordpress.com&#038;blog=7671208&#038;post=509&#038;subd=trikks&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
				<content:encoded><![CDATA[<p>So I was indexing some external sites with my brand new SharePoint. Fun said I, nay said SharePoint and threw the error &#8220;The content processing pipeline failed to process the item.&#8221; like 3548 times or so.</p>
<p><a href="http://trikks.files.wordpress.com/2013/03/screen-shot-2013-03-19-at-23-38-17.png"><img class="alignnone size-full wp-image-510" alt="Error" src="http://trikks.files.wordpress.com/2013/03/screen-shot-2013-03-19-at-23-38-17.png?w=881&#038;h=107" width="881" height="107" /></a></p>
<h2>The fix</h2>
<p><strong>Add the account running the Search Service to the local admin group</strong>. If you are uncertain it&#8217;s the user that runs the noderunner.exe processes. I assume this should be done when registering the service accounts and don&#8217;t consider this as a bug, the search service stores the index on disk when it is being organized and baked before sending it to the database so this step seems natural to me (but I may be wrong on this as well).</p>
<p><a href="http://trikks.files.wordpress.com/2013/03/screen-shot-2013-03-19-at-23-43-37.png"><img class="alignnone size-full wp-image-511" alt="processes" src="http://trikks.files.wordpress.com/2013/03/screen-shot-2013-03-19-at-23-43-37.png?w=663&#038;h=97" width="663" height="97" /></a></p>
<p>Did this work for you as well? Let us know.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/trikks.wordpress.com/509/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/trikks.wordpress.com/509/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=trikks.wordpress.com&#038;blog=7671208&#038;post=509&#038;subd=trikks&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://trikks.wordpress.com/2013/03/19/fixing-the-sharepoint-2013-search-error-the-content-processing-pipeline-failed-to-process-the-item/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/90294caceec6e1e468a078d4f7f86ea1?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">trikks</media:title>
		</media:content>

		<media:content url="http://trikks.files.wordpress.com/2013/03/screen-shot-2013-03-19-at-23-38-17.png" medium="image">
			<media:title type="html">Error</media:title>
		</media:content>

		<media:content url="http://trikks.files.wordpress.com/2013/03/screen-shot-2013-03-19-at-23-43-37.png" medium="image">
			<media:title type="html">processes</media:title>
		</media:content>
	</item>
		<item>
		<title>Where is the SVN binary in Mac OS X Mountain Lion 10.8? Aha! there it is.</title>
		<link>http://trikks.wordpress.com/2013/03/18/where-is-the-svn-binary-in-mac-os-x-mountain-lion-10-8-aha-there-it-is/</link>
		<comments>http://trikks.wordpress.com/2013/03/18/where-is-the-svn-binary-in-mac-os-x-mountain-lion-10-8-aha-there-it-is/#comments</comments>
		<pubDate>Mon, 18 Mar 2013 18:52:44 +0000</pubDate>
		<dc:creator>trikks</dc:creator>
				<category><![CDATA[Mac OS X]]></category>
		<category><![CDATA[svn]]></category>

		<guid isPermaLink="false">http://trikks.wordpress.com/?p=503</guid>
		<description><![CDATA[The 10.8 release of Mac OS was great. So great that Apple even somewhere decided to remove the originally built in svn binaries. Well it figures since 99.9% of all Mac OS users never will know what it is. Instead they moved the binaries into Xcode &#8211; yay! This means that we have to drag down Xcode [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=trikks.wordpress.com&#038;blog=7671208&#038;post=503&#038;subd=trikks&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
				<content:encoded><![CDATA[<p>The 10.8 release of Mac OS was great. So great that Apple even somewhere decided to remove the originally built in svn binaries. Well it figures since 99.9% of all Mac OS users never will know what it is. Instead they moved the binaries into Xcode &#8211; yay! This means that we have to drag down Xcode from the App Store of a whopping 3.8 GB if we want the previous &#8220;built in&#8221; version of SVN. Well that&#8217;s reasonable since the svn-package is like 348 KB on disk. Good thing that I&#8217;m not short on SSD space.</p>
<p>Anyway, if you go the Apple way (I did, but I&#8217;m using Xcode every now and then anyway) download and install Xcode. The svn binary is located in the folder</p>
<pre class="bash" style="font-family:monospace;font-size:11px;padding:1em;border:1px dashed #2f6fab;color:black;background-color:#f9f9f9;line-height:1.1em;word-wrap:break-word;"><span style="color:#000000;font-weight:bold;">/</span>Applications<span style="color:#000000;font-weight:bold;">/</span>Xcode.app<span style="color:#000000;font-weight:bold;">/</span>Contents<span style="color:#000000;font-weight:bold;">/</span>Developer<span style="color:#000000;font-weight:bold;">/</span>usr<span style="color:#000000;font-weight:bold;">/</span>bin<span style="color:#000000;font-weight:bold;">/</span></pre>
<p>The available SVN-binaries are</p>
<pre class="bash" style="font-family:monospace;font-size:11px;padding:1em;border:1px dashed #2f6fab;color:black;background-color:#f9f9f9;line-height:1.1em;word-wrap:break-word;"><span style="color:#000000;font-weight:bold;">/</span>Applications<span style="color:#000000;font-weight:bold;">/</span>Xcode.app<span style="color:#000000;font-weight:bold;">/</span>Contents<span style="color:#000000;font-weight:bold;">/</span>Developer<span style="color:#000000;font-weight:bold;">/</span>usr<span style="color:#000000;font-weight:bold;">/</span>bin<span style="color:#000000;font-weight:bold;">/</span><span style="color:#c20cb9;font-weight:bold;">svn</span>
<span style="color:#000000;font-weight:bold;">/</span>Applications<span style="color:#000000;font-weight:bold;">/</span>Xcode.app<span style="color:#000000;font-weight:bold;">/</span>Contents<span style="color:#000000;font-weight:bold;">/</span>Developer<span style="color:#000000;font-weight:bold;">/</span>usr<span style="color:#000000;font-weight:bold;">/</span>bin<span style="color:#000000;font-weight:bold;">/</span><span style="color:#c20cb9;font-weight:bold;">svnadmin</span>
<span style="color:#000000;font-weight:bold;">/</span>Applications<span style="color:#000000;font-weight:bold;">/</span>Xcode.app<span style="color:#000000;font-weight:bold;">/</span>Contents<span style="color:#000000;font-weight:bold;">/</span>Developer<span style="color:#000000;font-weight:bold;">/</span>usr<span style="color:#000000;font-weight:bold;">/</span>bin<span style="color:#000000;font-weight:bold;">/</span><span style="color:#c20cb9;font-weight:bold;">svndumpfilter</span>
<span style="color:#000000;font-weight:bold;">/</span>Applications<span style="color:#000000;font-weight:bold;">/</span>Xcode.app<span style="color:#000000;font-weight:bold;">/</span>Contents<span style="color:#000000;font-weight:bold;">/</span>Developer<span style="color:#000000;font-weight:bold;">/</span>usr<span style="color:#000000;font-weight:bold;">/</span>bin<span style="color:#000000;font-weight:bold;">/</span><span style="color:#c20cb9;font-weight:bold;">svnlook</span>
<span style="color:#000000;font-weight:bold;">/</span>Applications<span style="color:#000000;font-weight:bold;">/</span>Xcode.app<span style="color:#000000;font-weight:bold;">/</span>Contents<span style="color:#000000;font-weight:bold;">/</span>Developer<span style="color:#000000;font-weight:bold;">/</span>usr<span style="color:#000000;font-weight:bold;">/</span>bin<span style="color:#000000;font-weight:bold;">/</span><span style="color:#c20cb9;font-weight:bold;">svnserve</span>
<span style="color:#000000;font-weight:bold;">/</span>Applications<span style="color:#000000;font-weight:bold;">/</span>Xcode.app<span style="color:#000000;font-weight:bold;">/</span>Contents<span style="color:#000000;font-weight:bold;">/</span>Developer<span style="color:#000000;font-weight:bold;">/</span>usr<span style="color:#000000;font-weight:bold;">/</span>bin<span style="color:#000000;font-weight:bold;">/</span><span style="color:#c20cb9;font-weight:bold;">svnsync</span>
<span style="color:#000000;font-weight:bold;">/</span>Applications<span style="color:#000000;font-weight:bold;">/</span>Xcode.app<span style="color:#000000;font-weight:bold;">/</span>Contents<span style="color:#000000;font-weight:bold;">/</span>Developer<span style="color:#000000;font-weight:bold;">/</span>usr<span style="color:#000000;font-weight:bold;">/</span>bin<span style="color:#000000;font-weight:bold;">/</span><span style="color:#c20cb9;font-weight:bold;">svnversion</span></pre>
<p>To make SVN usable simply do something like this</p>
<pre class="bash" style="font-family:monospace;font-size:11px;padding:1em;border:1px dashed #2f6fab;color:black;background-color:#f9f9f9;line-height:1.1em;word-wrap:break-word;"><span style="color:#c20cb9;font-weight:bold;">sudo</span> <span style="color:#c20cb9;font-weight:bold;">ln</span> <span style="color:#660033;">-s</span> <span style="color:#000000;font-weight:bold;">/</span>Applications<span style="color:#000000;font-weight:bold;">/</span>Xcode.app<span style="color:#000000;font-weight:bold;">/</span>Contents<span style="color:#000000;font-weight:bold;">/</span>Developer<span style="color:#000000;font-weight:bold;">/</span>usr<span style="color:#000000;font-weight:bold;">/</span>bin<span style="color:#000000;font-weight:bold;">/</span><span style="color:#c20cb9;font-weight:bold;">svn</span> <span style="color:#000000;font-weight:bold;">/</span>usr<span style="color:#000000;font-weight:bold;">/</span>local<span style="color:#000000;font-weight:bold;">/</span>bin<span style="color:#000000;font-weight:bold;">/</span><span style="color:#c20cb9;font-weight:bold;">svn</span></pre>
<p>Thats it, have fun</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/trikks.wordpress.com/503/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/trikks.wordpress.com/503/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=trikks.wordpress.com&#038;blog=7671208&#038;post=503&#038;subd=trikks&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://trikks.wordpress.com/2013/03/18/where-is-the-svn-binary-in-mac-os-x-mountain-lion-10-8-aha-there-it-is/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/90294caceec6e1e468a078d4f7f86ea1?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">trikks</media:title>
		</media:content>
	</item>
		<item>
		<title>Installing PHP 5.4 to Mac OS X (and Mountain Lion)</title>
		<link>http://trikks.wordpress.com/2013/02/12/installing-php-5-4-to-mac-os-x-and-mountain-lion/</link>
		<comments>http://trikks.wordpress.com/2013/02/12/installing-php-5-4-to-mac-os-x-and-mountain-lion/#comments</comments>
		<pubDate>Tue, 12 Feb 2013 19:51:49 +0000</pubDate>
		<dc:creator>trikks</dc:creator>
				<category><![CDATA[Mac OS X]]></category>
		<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://trikks.wordpress.com/?p=484</guid>
		<description><![CDATA[Hello there! PHP 5.4 gave as a few new features, I was a bit blah at first until I got news about the built-in webserver &#8211; YES!!! Well that was like a year ago and all .NET and SharePoint development have consumed the most of my life, until now! Installing (or upgrading) your Mac OS [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=trikks.wordpress.com&#038;blog=7671208&#038;post=484&#038;subd=trikks&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
				<content:encoded><![CDATA[<p>Hello there!</p>
<p>PHP 5.4 gave as a few new features, I was a bit blah at first until I got news about the built-in webserver &#8211; YES!!! Well that was like a year ago and all .NET and SharePoint development have consumed the most of my life, until now!</p>
<h2>Installing (or upgrading) your Mac OS X box to use PHP 5.4</h2>
<p>Alright, this is simple and only takes a few minutes. First up install the new version of PHP 5.4, I used the routines from http://php-osx.liip.ch/, really sweet! Just do this</p>
<pre class="bash" style="font-family:monospace;font-size:8pt;border:1px #666 dashed;padding:3px;"><span style="color:#c20cb9;font-weight:bold;">sudo</span> curl <span style="color:#660033;">-s</span> http:<span style="color:#000000;font-weight:bold;">//</span>php-osx.liip.ch<span style="color:#000000;font-weight:bold;">/</span>install.sh <span style="color:#000000;font-weight:bold;">|</span> <span style="color:#c20cb9;font-weight:bold;">bash</span> <span style="color:#660033;">-s</span> <span style="color:#000000;">5.4</span></pre>
<p>This installed PHP 5.4 into this folder, you should probably verify that you got the same path</p>
<pre style="font-family:monospace;font-size:8pt;border:1px #666 dashed;padding:3px;">/usr/local/php5-20130210-223618/</pre>
<h3>Setup the built-in Apache to use PHP 5.4</h3>
<p>Still in the terminal? Good, lets open the config for apache</p>
<pre class="bash" style="font-family:monospace;font-size:8pt;border:1px #666 dashed;padding:3px;"><span style="color:#c20cb9;font-weight:bold;">sudo</span> <span style="color:#c20cb9;font-weight:bold;">nano</span> <span style="color:#000000;font-weight:bold;">/</span>etc<span style="color:#000000;font-weight:bold;">/</span>apache2<span style="color:#000000;font-weight:bold;">/</span>httpd.conf</pre>
<p>Locate the LoadModule for PHP, it&#8217;s usually in the end of the list of LoadModules. Uncomment the old php module by putting a hash sign (#) in front of it and put the new module on a new line, in my case it looks like this</p>
<pre class="bash" style="font-family:monospace;font-size:8pt;border:1px #666 dashed;padding:3px;">LoadModule php5_module <span style="color:#000000;font-weight:bold;">/</span>usr<span style="color:#000000;font-weight:bold;">/</span>local<span style="color:#000000;font-weight:bold;">/</span>php5-<span style="color:#000000;">20130210</span>-<span style="color:#000000;">223618</span><span style="color:#000000;font-weight:bold;">/</span>libphp5.so</pre>
<p>Save and exit (CTRL + o + enter) (CTRL + x), restart apache</p>
<pre class="bash" style="font-family:monospace;font-size:8pt;border:1px #666 dashed;padding:3px;"><span style="color:#c20cb9;font-weight:bold;">sudo</span> apachectl <span style="color:#7a0874;font-weight:bold;">restart</span></pre>
<h3>Set the PHP library path</h3>
<p>We do this so the new PHP binaries will be default on command line execution, it can be done in a numerous of ways. Here is my approach.</p>
<pre class="bash" style="font-family:monospace;font-size:8pt;border:1px #666 dashed;padding:3px;"><span style="color:#c20cb9;font-weight:bold;">sudo</span> <span style="color:#c20cb9;font-weight:bold;">nano</span> <span style="color:#000000;font-weight:bold;">/</span>etc<span style="color:#000000;font-weight:bold;">/</span>paths</pre>
<p>Enter the path to the bin folder of your new PHP library, mine now looks like this.</p>
<pre style="font-family:monospace;font-size:8pt;border:1px #666 dashed;padding:3px;">/usr/local/php5-20130210-223618/bin/
/usr/bin
/bin
/usr/sbin
/sbin
/usr/local/bin</pre>
<p>Save and exit, you should probably restart bash at this point.</p>
<h2>Simple test</h2>
<p>Create and open a file, this is the default location of the webserver in os x</p>
<pre class="bash" style="font-family:monospace;font-size:8pt;border:1px #666 dashed;padding:3px;"><span style="color:#c20cb9;font-weight:bold;">sudo</span> <span style="color:#c20cb9;font-weight:bold;">nano</span> <span style="color:#000000;font-weight:bold;">/</span>Library<span style="color:#000000;font-weight:bold;">/</span>WebServer<span style="color:#000000;font-weight:bold;">/</span>Documents<span style="color:#000000;font-weight:bold;">/</span>php.php</pre>
<p>Enter the following</p>
<pre class="php" style="font-family:monospace;font-size:8pt;border:1px #666 dashed;padding:3px;"><span style="color:#000000;font-weight:bold;">&lt;?php</span>
<a href="http://www.php.net/phpinfo"><span style="color:#990000;">phpinfo</span></a><span style="color:#009900;">(</span><span style="color:#009900;">)</span><span style="color:#339933;">;</span>
<span style="color:#000000;font-weight:bold;">?&gt;</span></pre>
<p>Save and close, go to your file by entering something like <a href="http://localhost/php.php" rel="nofollow">http://localhost/php.php</a></p>
<p><a href="http://trikks.files.wordpress.com/2013/02/screen-shot-2013-02-12-at-20-51-30.png"><img class="alignnone size-full wp-image-494" alt="Screen Shot 2013-02-12 at 20.51.30" src="http://trikks.files.wordpress.com/2013/02/screen-shot-2013-02-12-at-20-51-30.png?w=619&#038;h=377" width="619" height="377" /></a></p>
<p>&nbsp;</p>
<p>And we are done!</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/trikks.wordpress.com/484/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/trikks.wordpress.com/484/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=trikks.wordpress.com&#038;blog=7671208&#038;post=484&#038;subd=trikks&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://trikks.wordpress.com/2013/02/12/installing-php-5-4-to-mac-os-x-and-mountain-lion/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/90294caceec6e1e468a078d4f7f86ea1?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">trikks</media:title>
		</media:content>

		<media:content url="http://trikks.files.wordpress.com/2013/02/screen-shot-2013-02-12-at-20-51-30.png" medium="image">
			<media:title type="html">Screen Shot 2013-02-12 at 20.51.30</media:title>
		</media:content>
	</item>
		<item>
		<title>Enable SharePoint document conversions in PowerShell</title>
		<link>http://trikks.wordpress.com/2013/02/08/enable-sharepoint-document-conversions-in-powershell/</link>
		<comments>http://trikks.wordpress.com/2013/02/08/enable-sharepoint-document-conversions-in-powershell/#comments</comments>
		<pubDate>Fri, 08 Feb 2013 07:50:30 +0000</pubDate>
		<dc:creator>trikks</dc:creator>
				<category><![CDATA[PowerShell]]></category>
		<category><![CDATA[Sharepoint]]></category>
		<category><![CDATA[SharePoint 2013]]></category>
		<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[DocumentConversion]]></category>
		<category><![CDATA[SharePoint]]></category>

		<guid isPermaLink="false">http://trikks.wordpress.com/?p=480</guid>
		<description><![CDATA[Some of the document management features in SharePoint require certain features to be enabled. The most simple way to du such settings is by using PowerShell Here is a snippet how to enable the DocumentConversions functionality $app = Get-SPWebApplication http://enigma $app.DocumentConversionsEnabled = 1 $app.Update() Cheers<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=trikks.wordpress.com&#038;blog=7671208&#038;post=480&#038;subd=trikks&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
				<content:encoded><![CDATA[<p>Some of the document management features in SharePoint require certain features to be enabled. The most simple way to du such settings is by using PowerShell</p>
<p>Here is a snippet how to enable the DocumentConversions functionality</p>
<pre class="powershell" style="font-family:monospace;font-size:10pt;"><span style="color:#800080;">$app</span> <span style="color:pink;">=</span> Get<span style="color:pink;">-</span>SPWebApplication http:<span style="color:pink;">//</span>enigma
<span style="color:#800080;">$app</span>.DocumentConversionsEnabled <span style="color:pink;">=</span> <span style="color:#000000;">1</span>
<span style="color:#800080;">$app</span>.Update<span style="color:#000000;">(</span><span style="color:#000000;">)</span></pre>
<p>Cheers</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/trikks.wordpress.com/480/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/trikks.wordpress.com/480/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=trikks.wordpress.com&#038;blog=7671208&#038;post=480&#038;subd=trikks&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://trikks.wordpress.com/2013/02/08/enable-sharepoint-document-conversions-in-powershell/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/90294caceec6e1e468a078d4f7f86ea1?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">trikks</media:title>
		</media:content>
	</item>
		<item>
		<title>No way to enable the SharePoint 2013 Design Manager in SharePoint Foundation</title>
		<link>http://trikks.wordpress.com/2013/01/12/no-way-to-enable-the-sharepoint-2013-design-manager-in-sharepoint-foundation/</link>
		<comments>http://trikks.wordpress.com/2013/01/12/no-way-to-enable-the-sharepoint-2013-design-manager-in-sharepoint-foundation/#comments</comments>
		<pubDate>Sat, 12 Jan 2013 11:12:22 +0000</pubDate>
		<dc:creator>trikks</dc:creator>
				<category><![CDATA[SharePoint 2013]]></category>
		<category><![CDATA[Design Manager]]></category>

		<guid isPermaLink="false">http://trikks.wordpress.com/?p=478</guid>
		<description><![CDATA[So I was looking for a way to enable the Design Manager in  SharePoint 2013 Foundation. The Design Manager becomes available by enabling the &#8220;SharePoint Server Publishing Infrastructure&#8221; in Site Collection Features, the name here tells us this is a SharePoint Server feature. So sorry, but there will be no way to use this sweet [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=trikks.wordpress.com&#038;blog=7671208&#038;post=478&#038;subd=trikks&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
				<content:encoded><![CDATA[<p>So I was looking for a way to enable the Design Manager in  SharePoint 2013 Foundation. The Design Manager becomes available by enabling the &#8220;SharePoint Server Publishing Infrastructure&#8221; in Site Collection Features, the name here tells us this is a SharePoint Server feature.</p>
<p>So sorry, but there will be no way to use this sweet feature in Foundation setups.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/trikks.wordpress.com/478/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/trikks.wordpress.com/478/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=trikks.wordpress.com&#038;blog=7671208&#038;post=478&#038;subd=trikks&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://trikks.wordpress.com/2013/01/12/no-way-to-enable-the-sharepoint-2013-design-manager-in-sharepoint-foundation/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/90294caceec6e1e468a078d4f7f86ea1?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">trikks</media:title>
		</media:content>
	</item>
		<item>
		<title>Mapping Dictionary to Typed object using c#</title>
		<link>http://trikks.wordpress.com/2012/12/31/mapping-dictionary-to-typed-object-using-c/</link>
		<comments>http://trikks.wordpress.com/2012/12/31/mapping-dictionary-to-typed-object-using-c/#comments</comments>
		<pubDate>Mon, 31 Dec 2012 14:05:25 +0000</pubDate>
		<dc:creator>trikks</dc:creator>
				<category><![CDATA[C#]]></category>

		<guid isPermaLink="false">http://trikks.wordpress.com/?p=470</guid>
		<description><![CDATA[There are some good frameworks that may help you mapping dictionaries and alike to typed objects but in some cases you simply want something simpler or custom for that matter. The most important thing here is to transfer our dictionary to a typed object. Example dictionary Dictionary&#60;string, string&#62; dictionary = new Dictionary&#60;string, string&#62;(); dictionary.Add("Id", "1"); [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=trikks.wordpress.com&#038;blog=7671208&#038;post=470&#038;subd=trikks&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
				<content:encoded><![CDATA[<p>There are some good frameworks that may help you mapping dictionaries and alike to typed objects but in some cases you simply want something simpler or custom for that matter. </p>
<p>The most important thing here is to transfer our dictionary to a typed object.</p>
<h3>Example dictionary</h3>
<pre class="csharp" style="font-family:monospace;font-size:8pt;">Dictionary<span style="color:#008000;">&lt;</span><span style="color:#FF0000;">string</span>, <span style="color:#FF0000;">string</span><span style="color:#008000;">&gt;</span> dictionary <span style="color:#008000;">=</span> <a href="http://www.google.com/search?q=new+msdn.microsoft.com"><span style="color:#008000;">new</span></a> Dictionary<span style="color:#008000;">&lt;</span><span style="color:#FF0000;">string</span>, <span style="color:#FF0000;">string</span><span style="color:#008000;">&gt;</span><span style="color:#000000;">(</span><span style="color:#000000;">)</span><span style="color:#008000;">;</span>
dictionary.<span style="color:#0000FF;">Add</span><span style="color:#000000;">(</span><span style="color:#666666;">"Id"</span>, <span style="color:#666666;">"1"</span><span style="color:#000000;">)</span><span style="color:#008000;">;</span>
dictionary.<span style="color:#0000FF;">Add</span><span style="color:#000000;">(</span><span style="color:#666666;">"Name"</span>, <span style="color:#666666;">"Trikks"</span><span style="color:#000000;">)</span><span style="color:#008000;">;</span>
dictionary.<span style="color:#0000FF;">Add</span><span style="color:#000000;">(</span><span style="color:#666666;">"EMail"</span>, <span style="color:#666666;">"info@example.com"</span><span style="color:#000000;">)</span><span style="color:#008000;">;</span></pre>
<h3>Example class</h3>
<pre class="csharp" style="font-family:monospace;font-size:8pt;"><span style="color:#0600FF;">public</span> <span style="color:#FF0000;">class</span> ExampleClass
<span style="color:#000000;">{</span>
    <span style="color:#0600FF;">public</span> <span style="color:#FF0000;">int</span> Id <span style="color:#000000;">{</span> get<span style="color:#008000;">;</span> set<span style="color:#008000;">;</span> <span style="color:#000000;">}</span>
    <span style="color:#0600FF;">public</span> <span style="color:#FF0000;">string</span> Name <span style="color:#000000;">{</span> get<span style="color:#008000;">;</span> set<span style="color:#008000;">;</span> <span style="color:#000000;">}</span>
    <span style="color:#0600FF;">public</span> <span style="color:#FF0000;">string</span> EMail <span style="color:#000000;">{</span> get<span style="color:#008000;">;</span> set<span style="color:#008000;">;</span> <span style="color:#000000;">}</span>
<span style="color:#000000;">}</span></pre>
<h3>Method</h3>
<pre class="csharp" style="font-family:monospace;font-size:8pt;"><span style="color:#0600FF;">private</span> <span style="color:#0600FF;">static</span> T DictionaryToObject<span style="color:#008000;">&lt;</span>T<span style="color:#008000;">&gt;</span><span style="color:#000000;">(</span>IDictionary<span style="color:#008000;">&lt;</span><span style="color:#FF0000;">string</span>, <span style="color:#FF0000;">string</span><span style="color:#008000;">&gt;</span> dict<span style="color:#000000;">)</span> where T <span style="color:#008000;">:</span> <a href="http://www.google.com/search?q=new+msdn.microsoft.com"><span style="color:#008000;">new</span></a><span style="color:#000000;">(</span><span style="color:#000000;">)</span>
<span style="color:#000000;">{</span>
    var t <span style="color:#008000;">=</span> <a href="http://www.google.com/search?q=new+msdn.microsoft.com"><span style="color:#008000;">new</span></a> T<span style="color:#000000;">(</span><span style="color:#000000;">)</span><span style="color:#008000;">;</span>
    PropertyInfo<span style="color:#000000;">[</span><span style="color:#000000;">]</span> properties <span style="color:#008000;">=</span> t.<span style="color:#0000FF;">GetType</span><span style="color:#000000;">(</span><span style="color:#000000;">)</span>.<span style="color:#0000FF;">GetProperties</span><span style="color:#000000;">(</span><span style="color:#000000;">)</span><span style="color:#008000;">;</span>
&nbsp;
    <span style="color:#0600FF;">foreach</span> <span style="color:#000000;">(</span>PropertyInfo property <span style="color:#0600FF;">in</span> properties<span style="color:#000000;">)</span>
    <span style="color:#000000;">{</span>
        <span style="color:#0600FF;">if</span> <span style="color:#000000;">(</span><span style="color:#008000;">!</span>dict.<span style="color:#0000FF;">Any</span><span style="color:#000000;">(</span>x <span style="color:#008000;">=&gt;</span> x.<span style="color:#0000FF;">Key</span>.<span style="color:#0000FF;">Equals</span><span style="color:#000000;">(</span>property.<span style="color:#0000FF;">Name</span>, StringComparison.<span style="color:#0000FF;">InvariantCultureIgnoreCase</span><span style="color:#000000;">)</span><span style="color:#000000;">)</span><span style="color:#000000;">)</span>
            continue<span style="color:#008000;">;</span>
&nbsp;
        KeyValuePair<span style="color:#008000;">&lt;</span><span style="color:#FF0000;">string</span>, <span style="color:#FF0000;">string</span><span style="color:#008000;">&gt;</span> item <span style="color:#008000;">=</span> dict.<span style="color:#0000FF;">First</span><span style="color:#000000;">(</span>x <span style="color:#008000;">=&gt;</span> x.<span style="color:#0000FF;">Key</span>.<span style="color:#0000FF;">Equals</span><span style="color:#000000;">(</span>property.<span style="color:#0000FF;">Name</span>, StringComparison.<span style="color:#0000FF;">InvariantCultureIgnoreCase</span><span style="color:#000000;">)</span><span style="color:#000000;">)</span><span style="color:#008000;">;</span>
&nbsp;
        <span style="color:#008080;font-style:italic;">// Find which property type (int, string, double? etc) the CURRENT property is...</span>
        Type tPropertyType <span style="color:#008000;">=</span> t.<span style="color:#0000FF;">GetType</span><span style="color:#000000;">(</span><span style="color:#000000;">)</span>.<span style="color:#0000FF;">GetProperty</span><span style="color:#000000;">(</span>property.<span style="color:#0000FF;">Name</span><span style="color:#000000;">)</span>.<span style="color:#0000FF;">PropertyType</span><span style="color:#008000;">;</span>
&nbsp;
        <span style="color:#008080;font-style:italic;">// Fix nullables...</span>
        Type newT <span style="color:#008000;">=</span> Nullable.<span style="color:#0000FF;">GetUnderlyingType</span><span style="color:#000000;">(</span>tPropertyType<span style="color:#000000;">)</span> <span style="color:#008000;">??</span> tPropertyType<span style="color:#008000;">;</span>
&nbsp;
        <span style="color:#008080;font-style:italic;">// ...and change the type</span>
        <span style="color:#FF0000;">object</span> newA <span style="color:#008000;">=</span> Convert.<span style="color:#0000FF;">ChangeType</span><span style="color:#000000;">(</span>item.<span style="color:#0000FF;">Value</span>, newT<span style="color:#000000;">)</span><span style="color:#008000;">;</span>
        t.<span style="color:#0000FF;">GetType</span><span style="color:#000000;">(</span><span style="color:#000000;">)</span>.<span style="color:#0000FF;">GetProperty</span><span style="color:#000000;">(</span>property.<span style="color:#0000FF;">Name</span><span style="color:#000000;">)</span>.<span style="color:#0000FF;">SetValue</span><span style="color:#000000;">(</span>t, newA, <span style="color:#0600FF;">null</span><span style="color:#000000;">)</span><span style="color:#008000;">;</span>
    <span style="color:#000000;">}</span>
    <span style="color:#0600FF;">return</span> t<span style="color:#008000;">;</span>
<span style="color:#000000;">}</span></pre>
<h3>Full example</h3>
<pre class="csharp" style="font-family:monospace;font-size:8pt;"><span style="color:#0600FF;">using</span> <span style="color:#008080;">System</span><span style="color:#008000;">;</span>
<span style="color:#0600FF;">using</span> <span style="color:#008080;">System.Collections.Generic</span><span style="color:#008000;">;</span>
<span style="color:#0600FF;">using</span> <span style="color:#008080;">System.Linq</span><span style="color:#008000;">;</span>
<span style="color:#0600FF;">using</span> <span style="color:#008080;">System.Reflection</span><span style="color:#008000;">;</span>
&nbsp;
<span style="color:#0600FF;">namespace</span> ConsoleApplication
<span style="color:#000000;">{</span>
    <span style="color:#FF0000;">class</span> Program
    <span style="color:#000000;">{</span>
        <span style="color:#0600FF;">static</span> <span style="color:#0600FF;">void</span> Main<span style="color:#000000;">(</span><span style="color:#FF0000;">string</span><span style="color:#000000;">[</span><span style="color:#000000;">]</span> args<span style="color:#000000;">)</span>
        <span style="color:#000000;">{</span>
            Dictionary<span style="color:#008000;">&lt;</span><span style="color:#FF0000;">string</span>, <span style="color:#FF0000;">string</span><span style="color:#008000;">&gt;</span> dictionary <span style="color:#008000;">=</span> <a href="http://www.google.com/search?q=new+msdn.microsoft.com"><span style="color:#008000;">new</span></a> Dictionary<span style="color:#008000;">&lt;</span><span style="color:#FF0000;">string</span>, <span style="color:#FF0000;">string</span><span style="color:#008000;">&gt;</span><span style="color:#000000;">(</span><span style="color:#000000;">)</span><span style="color:#008000;">;</span>
            dictionary.<span style="color:#0000FF;">Add</span><span style="color:#000000;">(</span><span style="color:#666666;">"Id"</span>, <span style="color:#666666;">"1"</span><span style="color:#000000;">)</span><span style="color:#008000;">;</span>
            dictionary.<span style="color:#0000FF;">Add</span><span style="color:#000000;">(</span><span style="color:#666666;">"Name"</span>, <span style="color:#666666;">"Trikks"</span><span style="color:#000000;">)</span><span style="color:#008000;">;</span>
            dictionary.<span style="color:#0000FF;">Add</span><span style="color:#000000;">(</span><span style="color:#666666;">"EMail"</span>, <span style="color:#666666;">"info@example.com"</span><span style="color:#000000;">)</span><span style="color:#008000;">;</span>
&nbsp;
            ExampleClass example <span style="color:#008000;">=</span> DictionaryToObject<span style="color:#008000;">&lt;</span>ExampleClass<span style="color:#008000;">&gt;</span><span style="color:#000000;">(</span>dictionary<span style="color:#000000;">)</span><span style="color:#008000;">;</span>
        <span style="color:#000000;">}</span>
&nbsp;
        <span style="color:#0600FF;">private</span> <span style="color:#0600FF;">static</span> T DictionaryToObject<span style="color:#008000;">&lt;</span>T<span style="color:#008000;">&gt;</span><span style="color:#000000;">(</span>IDictionary<span style="color:#008000;">&lt;</span><span style="color:#FF0000;">string</span>, <span style="color:#FF0000;">string</span><span style="color:#008000;">&gt;</span> dict<span style="color:#000000;">)</span> where T <span style="color:#008000;">:</span> <a href="http://www.google.com/search?q=new+msdn.microsoft.com"><span style="color:#008000;">new</span></a><span style="color:#000000;">(</span><span style="color:#000000;">)</span>
        <span style="color:#000000;">{</span>
            var t <span style="color:#008000;">=</span> <a href="http://www.google.com/search?q=new+msdn.microsoft.com"><span style="color:#008000;">new</span></a> T<span style="color:#000000;">(</span><span style="color:#000000;">)</span><span style="color:#008000;">;</span>
            PropertyInfo<span style="color:#000000;">[</span><span style="color:#000000;">]</span> properties <span style="color:#008000;">=</span> t.<span style="color:#0000FF;">GetType</span><span style="color:#000000;">(</span><span style="color:#000000;">)</span>.<span style="color:#0000FF;">GetProperties</span><span style="color:#000000;">(</span><span style="color:#000000;">)</span><span style="color:#008000;">;</span>
&nbsp;
            <span style="color:#0600FF;">foreach</span> <span style="color:#000000;">(</span>PropertyInfo property <span style="color:#0600FF;">in</span> properties<span style="color:#000000;">)</span>
            <span style="color:#000000;">{</span>
                <span style="color:#0600FF;">if</span> <span style="color:#000000;">(</span><span style="color:#008000;">!</span>dict.<span style="color:#0000FF;">Any</span><span style="color:#000000;">(</span>x <span style="color:#008000;">=&gt;</span> x.<span style="color:#0000FF;">Key</span>.<span style="color:#0000FF;">Equals</span><span style="color:#000000;">(</span>property.<span style="color:#0000FF;">Name</span>, StringComparison.<span style="color:#0000FF;">InvariantCultureIgnoreCase</span><span style="color:#000000;">)</span><span style="color:#000000;">)</span><span style="color:#000000;">)</span>
                    continue<span style="color:#008000;">;</span>
&nbsp;
                KeyValuePair<span style="color:#008000;">&lt;</span><span style="color:#FF0000;">string</span>, <span style="color:#FF0000;">string</span><span style="color:#008000;">&gt;</span> item <span style="color:#008000;">=</span> dict.<span style="color:#0000FF;">First</span><span style="color:#000000;">(</span>x <span style="color:#008000;">=&gt;</span> x.<span style="color:#0000FF;">Key</span>.<span style="color:#0000FF;">Equals</span><span style="color:#000000;">(</span>property.<span style="color:#0000FF;">Name</span>, StringComparison.<span style="color:#0000FF;">InvariantCultureIgnoreCase</span><span style="color:#000000;">)</span><span style="color:#000000;">)</span><span style="color:#008000;">;</span>
&nbsp;
                <span style="color:#008080;font-style:italic;">// Find which property type (int, string, double? etc) the CURRENT property is...</span>
                Type tPropertyType <span style="color:#008000;">=</span> t.<span style="color:#0000FF;">GetType</span><span style="color:#000000;">(</span><span style="color:#000000;">)</span>.<span style="color:#0000FF;">GetProperty</span><span style="color:#000000;">(</span>property.<span style="color:#0000FF;">Name</span><span style="color:#000000;">)</span>.<span style="color:#0000FF;">PropertyType</span><span style="color:#008000;">;</span>
&nbsp;
                <span style="color:#008080;font-style:italic;">// Fix nullables...</span>
                Type newT <span style="color:#008000;">=</span> Nullable.<span style="color:#0000FF;">GetUnderlyingType</span><span style="color:#000000;">(</span>tPropertyType<span style="color:#000000;">)</span> <span style="color:#008000;">??</span> tPropertyType<span style="color:#008000;">;</span>
&nbsp;
                <span style="color:#008080;font-style:italic;">// ...and change the type</span>
                <span style="color:#FF0000;">object</span> newA <span style="color:#008000;">=</span> Convert.<span style="color:#0000FF;">ChangeType</span><span style="color:#000000;">(</span>item.<span style="color:#0000FF;">Value</span>, newT<span style="color:#000000;">)</span><span style="color:#008000;">;</span>
                t.<span style="color:#0000FF;">GetType</span><span style="color:#000000;">(</span><span style="color:#000000;">)</span>.<span style="color:#0000FF;">GetProperty</span><span style="color:#000000;">(</span>property.<span style="color:#0000FF;">Name</span><span style="color:#000000;">)</span>.<span style="color:#0000FF;">SetValue</span><span style="color:#000000;">(</span>t, newA, <span style="color:#0600FF;">null</span><span style="color:#000000;">)</span><span style="color:#008000;">;</span>
            <span style="color:#000000;">}</span>
            <span style="color:#0600FF;">return</span> t<span style="color:#008000;">;</span>
        <span style="color:#000000;">}</span>
    <span style="color:#000000;">}</span>
&nbsp;
    <span style="color:#0600FF;">public</span> <span style="color:#FF0000;">class</span> ExampleClass
    <span style="color:#000000;">{</span>
        <span style="color:#0600FF;">public</span> <span style="color:#FF0000;">int</span> Id <span style="color:#000000;">{</span> get<span style="color:#008000;">;</span> set<span style="color:#008000;">;</span> <span style="color:#000000;">}</span>
        <span style="color:#0600FF;">public</span> <span style="color:#FF0000;">string</span> Name <span style="color:#000000;">{</span> get<span style="color:#008000;">;</span> set<span style="color:#008000;">;</span> <span style="color:#000000;">}</span>
        <span style="color:#0600FF;">public</span> <span style="color:#FF0000;">string</span> EMail <span style="color:#000000;">{</span> get<span style="color:#008000;">;</span> set<span style="color:#008000;">;</span> <span style="color:#000000;">}</span>
    <span style="color:#000000;">}</span>
<span style="color:#000000;">}</span></pre>
<p>Thats it, happy coding!</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/trikks.wordpress.com/470/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/trikks.wordpress.com/470/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=trikks.wordpress.com&#038;blog=7671208&#038;post=470&#038;subd=trikks&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://trikks.wordpress.com/2012/12/31/mapping-dictionary-to-typed-object-using-c/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/90294caceec6e1e468a078d4f7f86ea1?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">trikks</media:title>
		</media:content>
	</item>
		<item>
		<title>SharePoint 2013 TokenHelper.cs source code</title>
		<link>http://trikks.wordpress.com/2012/12/30/sharepoint-2013-tokenhelper-cs-source-code/</link>
		<comments>http://trikks.wordpress.com/2012/12/30/sharepoint-2013-tokenhelper-cs-source-code/#comments</comments>
		<pubDate>Sun, 30 Dec 2012 17:07:41 +0000</pubDate>
		<dc:creator>trikks</dc:creator>
				<category><![CDATA[Sharepoint]]></category>
		<category><![CDATA[SharePoint 2013]]></category>

		<guid isPermaLink="false">http://trikks.wordpress.com/?p=464</guid>
		<description><![CDATA[This file is commonly referenced in the SharePoint 2013 documentation but the file it self is undocumented and the only way to have a look at it is by creating an &#8220;App for SharePoint 2013&#8243; in Visual Studio. Here is the code using Microsoft.IdentityModel.S2S.Protocols.OAuth2; using Microsoft.IdentityModel.S2S.Tokens; using Microsoft.SharePoint.Client; using System; using System.Collections.Generic; using System.Collections.ObjectModel; using [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=trikks.wordpress.com&#038;blog=7671208&#038;post=464&#038;subd=trikks&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
				<content:encoded><![CDATA[<p>This file is commonly referenced in the SharePoint 2013 documentation but the file it self is undocumented and the only way to have a look at it is by creating an &#8220;App for SharePoint 2013&#8243; in Visual Studio.</p>
<p>Here is the code</p>
<pre class="csharp" style="font-family:monospace;font-size:9pt;"><span style="color:#0600FF;">using</span> <span style="color:#008080;">Microsoft.IdentityModel.S2S.Protocols.OAuth2</span><span style="color:#008000;">;</span>
<span style="color:#0600FF;">using</span> <span style="color:#008080;">Microsoft.IdentityModel.S2S.Tokens</span><span style="color:#008000;">;</span>
<span style="color:#0600FF;">using</span> <span style="color:#008080;">Microsoft.SharePoint.Client</span><span style="color:#008000;">;</span>
<span style="color:#0600FF;">using</span> <span style="color:#008080;">System</span><span style="color:#008000;">;</span>
<span style="color:#0600FF;">using</span> <span style="color:#008080;">System.Collections.Generic</span><span style="color:#008000;">;</span>
<span style="color:#0600FF;">using</span> <span style="color:#008080;">System.Collections.ObjectModel</span><span style="color:#008000;">;</span>
<span style="color:#0600FF;">using</span> <span style="color:#008080;">System.Globalization</span><span style="color:#008000;">;</span>
<span style="color:#0600FF;">using</span> <span style="color:#008080;">System.IdentityModel.Selectors</span><span style="color:#008000;">;</span>
<span style="color:#0600FF;">using</span> <span style="color:#008080;">System.IdentityModel.Tokens</span><span style="color:#008000;">;</span>
<span style="color:#0600FF;">using</span> <span style="color:#008080;">System.IO</span><span style="color:#008000;">;</span>
<span style="color:#0600FF;">using</span> <span style="color:#008080;">System.Linq</span><span style="color:#008000;">;</span>
<span style="color:#0600FF;">using</span> <span style="color:#008080;">System.Net</span><span style="color:#008000;">;</span>
<span style="color:#0600FF;">using</span> <span style="color:#008080;">System.Security.Cryptography.X509Certificates</span><span style="color:#008000;">;</span>
<span style="color:#0600FF;">using</span> <span style="color:#008080;">System.Security.Principal</span><span style="color:#008000;">;</span>
<span style="color:#0600FF;">using</span> <span style="color:#008080;">System.Text</span><span style="color:#008000;">;</span>
<span style="color:#0600FF;">using</span> <span style="color:#008080;">System.Web</span><span style="color:#008000;">;</span>
<span style="color:#0600FF;">using</span> <span style="color:#008080;">System.Web.Configuration</span><span style="color:#008000;">;</span>
<span style="color:#0600FF;">using</span> <span style="color:#008080;">System.Web.Script.Serialization</span><span style="color:#008000;">;</span>
&nbsp;
<span style="color:#0600FF;">namespace</span> SharePointApp1Web
<span style="color:#000000;">{</span>
&nbsp;
    <span style="color:#0600FF;">public</span> <span style="color:#FF0000;">class</span> TokenHelper
    <span style="color:#000000;">{</span>
&nbsp;
        <span style="color:#008080;">#region public methods</span>
&nbsp;
        <span style="color:#008080;font-style:italic;">/// &lt;summary&gt;</span>
        <span style="color:#008080;font-style:italic;">/// Configures .Net to trust all certificates when making network calls.  This is used so that calls </span>
        <span style="color:#008080;font-style:italic;">/// to an https SharePoint server without a valid certificate are not rejected.  This should only be used during </span>
        <span style="color:#008080;font-style:italic;">/// testing, and should never be used in a production app.</span>
        <span style="color:#008080;font-style:italic;">/// &lt;/summary&gt;</span>
        <span style="color:#0600FF;">public</span> <span style="color:#0600FF;">static</span> <span style="color:#0600FF;">void</span> TrustAllCertificates<span style="color:#000000;">(</span><span style="color:#000000;">)</span>
        <span style="color:#000000;">{</span>
            <span style="color:#008080;font-style:italic;">//Trust all certificates</span>
            <span style="color:#000000;">System.<span style="color:#0000FF;">Net</span></span>.<span style="color:#0000FF;">ServicePointManager</span>.<span style="color:#0000FF;">ServerCertificateValidationCallback</span> <span style="color:#008000;">=</span>
                <span style="color:#000000;">(</span><span style="color:#000000;">(</span>sender, certificate, chain, sslPolicyErrors<span style="color:#000000;">)</span> <span style="color:#008000;">=&gt;</span> <span style="color:#0600FF;">true</span><span style="color:#000000;">)</span><span style="color:#008000;">;</span>
        <span style="color:#000000;">}</span>
&nbsp;
        <span style="color:#008080;font-style:italic;">/// &lt;summary&gt;</span>
        <span style="color:#008080;font-style:italic;">/// Retrieves the context token string from the specified request by looking for well-known parameter names in the </span>
        <span style="color:#008080;font-style:italic;">/// POSTed form parameters and the querystring. Returns null if no context token is found.</span>
        <span style="color:#008080;font-style:italic;">/// &lt;/summary&gt;</span>
        <span style="color:#008080;font-style:italic;">/// &lt;param name="request"&gt;HttpRequest in which to look for a context token&lt;/param&gt;</span>
        <span style="color:#008080;font-style:italic;">/// &lt;returns&gt;The context token string&lt;/returns&gt;</span>
        <span style="color:#0600FF;">public</span> <span style="color:#0600FF;">static</span> <span style="color:#FF0000;">string</span> GetContextTokenFromRequest<span style="color:#000000;">(</span>HttpRequest request<span style="color:#000000;">)</span>
        <span style="color:#000000;">{</span>
            <span style="color:#FF0000;">string</span><span style="color:#000000;">[</span><span style="color:#000000;">]</span> paramNames <span style="color:#008000;">=</span> <span style="color:#000000;">{</span> <span style="color:#666666;">"AppContext"</span>, <span style="color:#666666;">"AppContextToken"</span>, <span style="color:#666666;">"AccessToken"</span>, <span style="color:#666666;">"SPAppToken"</span> <span style="color:#000000;">}</span><span style="color:#008000;">;</span>
            <span style="color:#0600FF;">foreach</span> <span style="color:#000000;">(</span><span style="color:#FF0000;">string</span> paramName <span style="color:#0600FF;">in</span> paramNames<span style="color:#000000;">)</span>
            <span style="color:#000000;">{</span>
                <span style="color:#0600FF;">if</span> <span style="color:#000000;">(</span><span style="color:#008000;">!</span><span style="color:#FF0000;">string</span>.<span style="color:#0000FF;">IsNullOrEmpty</span><span style="color:#000000;">(</span>request.<span style="color:#0000FF;">Form</span><span style="color:#000000;">[</span>paramName<span style="color:#000000;">]</span><span style="color:#000000;">)</span><span style="color:#000000;">)</span> <span style="color:#0600FF;">return</span> request.<span style="color:#0000FF;">Form</span><span style="color:#000000;">[</span>paramName<span style="color:#000000;">]</span><span style="color:#008000;">;</span>
                <span style="color:#0600FF;">if</span> <span style="color:#000000;">(</span><span style="color:#008000;">!</span><span style="color:#FF0000;">string</span>.<span style="color:#0000FF;">IsNullOrEmpty</span><span style="color:#000000;">(</span>request.<span style="color:#0000FF;">QueryString</span><span style="color:#000000;">[</span>paramName<span style="color:#000000;">]</span><span style="color:#000000;">)</span><span style="color:#000000;">)</span> <span style="color:#0600FF;">return</span> request.<span style="color:#0000FF;">QueryString</span><span style="color:#000000;">[</span>paramName<span style="color:#000000;">]</span><span style="color:#008000;">;</span>
            <span style="color:#000000;">}</span>
            <span style="color:#0600FF;">return</span> null<span style="color:#008000;">;</span>
        <span style="color:#000000;">}</span>
&nbsp;
        <span style="color:#008080;font-style:italic;">/// &lt;summary&gt;</span>
        <span style="color:#008080;font-style:italic;">/// Validate that a specified context token string is intended for this application based on the parameters </span>
        <span style="color:#008080;font-style:italic;">/// specified in web.config. Parameters used from web.config used for validation include ClientId, </span>
        <span style="color:#008080;font-style:italic;">/// HostedAppHostName, ClientSecret, and Realm (if it is specified). If the &lt;paramref name="appHostName"/&gt; is not </span>
        <span style="color:#008080;font-style:italic;">/// null, it is used for validation instead of the web.config's HostedAppHostName. If the token is invalid, an </span>
        <span style="color:#008080;font-style:italic;">/// exception is thrown. If the token is valid, TokenHelper's static STS metadata url is updated based on the token contents</span>
        <span style="color:#008080;font-style:italic;">/// and a JsonWebSecurityToken based on the context token is returned.</span>
        <span style="color:#008080;font-style:italic;">/// &lt;/summary&gt;</span>
        <span style="color:#008080;font-style:italic;">/// &lt;param name="contextTokenString"&gt;The context token to validate&lt;/param&gt;</span>
        <span style="color:#008080;font-style:italic;">/// &lt;param name="appHostName"&gt;The URL authority, consisting of  Domain Name System (DNS) host name or IP address and the port number, to use for token audience validation.</span>
        <span style="color:#008080;font-style:italic;">/// If null, HostedAppHostName web.config setting is used instead.&lt;/param&gt;</span>
        <span style="color:#008080;font-style:italic;">/// &lt;returns&gt;A JsonWebSecurityToken based on the context token.&lt;/returns&gt;</span>
        <span style="color:#0600FF;">public</span> <span style="color:#0600FF;">static</span> SharePointContextToken ReadAndValidateContextToken<span style="color:#000000;">(</span><span style="color:#FF0000;">string</span> contextTokenString, <span style="color:#FF0000;">string</span> appHostName <span style="color:#008000;">=</span> <span style="color:#0600FF;">null</span><span style="color:#000000;">)</span>
        <span style="color:#000000;">{</span>
            JsonWebSecurityTokenHandler tokenHandler <span style="color:#008000;">=</span> CreateJsonWebSecurityTokenHandler<span style="color:#000000;">(</span><span style="color:#000000;">)</span><span style="color:#008000;">;</span>
            SecurityToken securityToken <span style="color:#008000;">=</span> tokenHandler.<span style="color:#0000FF;">ReadToken</span><span style="color:#000000;">(</span>contextTokenString<span style="color:#000000;">)</span><span style="color:#008000;">;</span>
            JsonWebSecurityToken jsonToken <span style="color:#008000;">=</span> securityToken <span style="color:#0600FF;">as</span> JsonWebSecurityToken<span style="color:#008000;">;</span>
            SharePointContextToken token <span style="color:#008000;">=</span> SharePointContextToken.<span style="color:#0000FF;">Create</span><span style="color:#000000;">(</span>jsonToken<span style="color:#000000;">)</span><span style="color:#008000;">;</span>
&nbsp;
            <span style="color:#FF0000;">string</span> stsAuthority <span style="color:#008000;">=</span> <span style="color:#000000;">(</span><a href="http://www.google.com/search?q=new+msdn.microsoft.com"><span style="color:#008000;">new</span></a> Uri<span style="color:#000000;">(</span>token.<span style="color:#0000FF;">SecurityTokenServiceUri</span><span style="color:#000000;">)</span><span style="color:#000000;">)</span>.<span style="color:#0000FF;">Authority</span><span style="color:#008000;">;</span>
            <span style="color:#FF0000;">int</span> firstDot <span style="color:#008000;">=</span> stsAuthority.<span style="color:#0000FF;">IndexOf</span><span style="color:#000000;">(</span><span style="color:#666666;">'.'</span><span style="color:#000000;">)</span><span style="color:#008000;">;</span>
&nbsp;
            GlobalEndPointPrefix <span style="color:#008000;">=</span> stsAuthority.<span style="color:#0000FF;">Substring</span><span style="color:#000000;">(</span><span style="color:#FF0000;">0</span>, firstDot<span style="color:#000000;">)</span><span style="color:#008000;">;</span>
            AcsHostUrl <span style="color:#008000;">=</span> stsAuthority.<span style="color:#0000FF;">Substring</span><span style="color:#000000;">(</span>firstDot <span style="color:#008000;">+</span> <span style="color:#FF0000;">1</span><span style="color:#000000;">)</span><span style="color:#008000;">;</span>
&nbsp;
            tokenHandler.<span style="color:#0000FF;">ValidateToken</span><span style="color:#000000;">(</span>jsonToken<span style="color:#000000;">)</span><span style="color:#008000;">;</span>
&nbsp;
            <span style="color:#0600FF;">if</span> <span style="color:#000000;">(</span>appHostName <span style="color:#008000;">==</span> <span style="color:#0600FF;">null</span><span style="color:#000000;">)</span>
            <span style="color:#000000;">{</span>
                appHostName <span style="color:#008000;">=</span> HostedAppHostName<span style="color:#008000;">;</span>
            <span style="color:#000000;">}</span>
&nbsp;
            <span style="color:#FF0000;">string</span> realm <span style="color:#008000;">=</span> Realm <span style="color:#008000;">??</span> token.<span style="color:#0000FF;">Realm</span><span style="color:#008000;">;</span>
            <span style="color:#FF0000;">string</span> principal <span style="color:#008000;">=</span> GetFormattedPrincipal<span style="color:#000000;">(</span>ClientId, appHostName, realm<span style="color:#000000;">)</span><span style="color:#008000;">;</span>
            <span style="color:#0600FF;">if</span> <span style="color:#000000;">(</span><span style="color:#008000;">!</span>StringComparer.<span style="color:#0000FF;">OrdinalIgnoreCase</span>.<span style="color:#0000FF;">Equals</span><span style="color:#000000;">(</span>token.<span style="color:#0000FF;">Audience</span>, principal<span style="color:#000000;">)</span><span style="color:#000000;">)</span>
            <span style="color:#000000;">{</span>
                <span style="color:#0600FF;">throw</span> <a href="http://www.google.com/search?q=new+msdn.microsoft.com"><span style="color:#008000;">new</span></a> Microsoft.<span style="color:#0000FF;">IdentityModel</span>.<span style="color:#0000FF;">Tokens</span>.<span style="color:#0000FF;">AudienceUriValidationFailedException</span><span style="color:#000000;">(</span>
                    <span style="color:#FF0000;">String</span>.<span style="color:#0000FF;">Format</span><span style="color:#000000;">(</span>CultureInfo.<span style="color:#0000FF;">CurrentCulture</span>,
                    <span style="color:#666666;">"<span style="color:#008080;font-weight:bold;">\"</span>{0}<span style="color:#008080;font-weight:bold;">\"</span> is not the intended audience <span style="color:#008080;font-weight:bold;">\"</span>{1}<span style="color:#008080;font-weight:bold;">\"</span>"</span>, principal, token.<span style="color:#0000FF;">Audience</span><span style="color:#000000;">)</span><span style="color:#000000;">)</span><span style="color:#008000;">;</span>
            <span style="color:#000000;">}</span>
&nbsp;
            <span style="color:#0600FF;">return</span> token<span style="color:#008000;">;</span>
        <span style="color:#000000;">}</span>
&nbsp;
        <span style="color:#008080;font-style:italic;">/// &lt;summary&gt;</span>
        <span style="color:#008080;font-style:italic;">/// Retrieves an access token from ACS to call the source of the specified context token at the specified </span>
        <span style="color:#008080;font-style:italic;">/// targetHost. The targetHost must be registered for principal the that sent the context token.</span>
        <span style="color:#008080;font-style:italic;">/// &lt;/summary&gt;</span>
        <span style="color:#008080;font-style:italic;">/// &lt;param name="contextToken"&gt;Context token issued by the intended access token audience&lt;/param&gt;</span>
        <span style="color:#008080;font-style:italic;">/// &lt;param name="targetHost"&gt;Url authority of the target principal&lt;/param&gt;</span>
        <span style="color:#008080;font-style:italic;">/// &lt;returns&gt;An access token with an audience matching the context token's source&lt;/returns&gt;</span>
        <span style="color:#0600FF;">public</span> <span style="color:#0600FF;">static</span> OAuth2AccessTokenResponse GetAccessToken<span style="color:#000000;">(</span>SharePointContextToken contextToken, <span style="color:#FF0000;">string</span> targetHost<span style="color:#000000;">)</span>
        <span style="color:#000000;">{</span>
&nbsp;
            <span style="color:#FF0000;">string</span> targetPrincipalName <span style="color:#008000;">=</span> contextToken.<span style="color:#0000FF;">TargetPrincipalName</span><span style="color:#008000;">;</span>
&nbsp;
            <span style="color:#008080;font-style:italic;">// Extract the refreshToken from the context token</span>
            <span style="color:#FF0000;">string</span> refreshToken <span style="color:#008000;">=</span> contextToken.<span style="color:#0000FF;">RefreshToken</span><span style="color:#008000;">;</span>
&nbsp;
            <span style="color:#0600FF;">if</span> <span style="color:#000000;">(</span><span style="color:#FF0000;">String</span>.<span style="color:#0000FF;">IsNullOrEmpty</span><span style="color:#000000;">(</span>refreshToken<span style="color:#000000;">)</span><span style="color:#000000;">)</span>
            <span style="color:#000000;">{</span>
                <span style="color:#0600FF;">return</span> null<span style="color:#008000;">;</span>
            <span style="color:#000000;">}</span>
&nbsp;
            <span style="color:#FF0000;">string</span> realm <span style="color:#008000;">=</span> Realm <span style="color:#008000;">??</span> contextToken.<span style="color:#0000FF;">Realm</span><span style="color:#008000;">;</span>
&nbsp;
            <span style="color:#FF0000;">string</span> resource <span style="color:#008000;">=</span> GetFormattedPrincipal<span style="color:#000000;">(</span>targetPrincipalName, targetHost, realm<span style="color:#000000;">)</span><span style="color:#008000;">;</span>
            <span style="color:#FF0000;">string</span> clientId <span style="color:#008000;">=</span> GetFormattedPrincipal<span style="color:#000000;">(</span>ClientId, <span style="color:#0600FF;">null</span>, realm<span style="color:#000000;">)</span><span style="color:#008000;">;</span>
&nbsp;
            OAuth2AccessTokenRequest oauth2Request <span style="color:#008000;">=</span>
                OAuth2MessageFactory.<span style="color:#0000FF;">CreateAccessTokenRequestWithRefreshToken</span><span style="color:#000000;">(</span>
                    clientId,
                    ClientSecret,
                    refreshToken,
                    resource<span style="color:#000000;">)</span><span style="color:#008000;">;</span>
&nbsp;
            <span style="color:#008080;font-style:italic;">// Get token</span>
            OAuth2S2SClient client <span style="color:#008000;">=</span> <a href="http://www.google.com/search?q=new+msdn.microsoft.com"><span style="color:#008000;">new</span></a> OAuth2S2SClient<span style="color:#000000;">(</span><span style="color:#000000;">)</span><span style="color:#008000;">;</span>
            OAuth2AccessTokenResponse oauth2Response<span style="color:#008000;">;</span>
            <span style="color:#0600FF;">try</span>
            <span style="color:#000000;">{</span>
                oauth2Response <span style="color:#008000;">=</span>
                    client.<span style="color:#0000FF;">Issue</span><span style="color:#000000;">(</span>AcsMetadataParser.<span style="color:#0000FF;">GetStsUrl</span><span style="color:#000000;">(</span>realm<span style="color:#000000;">)</span>, oauth2Request<span style="color:#000000;">)</span> <span style="color:#0600FF;">as</span> OAuth2AccessTokenResponse<span style="color:#008000;">;</span>
            <span style="color:#000000;">}</span>
            <span style="color:#0600FF;">catch</span> <span style="color:#000000;">(</span>WebException wex<span style="color:#000000;">)</span>
            <span style="color:#000000;">{</span>
                <span style="color:#0600FF;">using</span> <span style="color:#000000;">(</span>StreamReader sr <span style="color:#008000;">=</span> <a href="http://www.google.com/search?q=new+msdn.microsoft.com"><span style="color:#008000;">new</span></a> StreamReader<span style="color:#000000;">(</span>wex.<span style="color:#0000FF;">Response</span>.<span style="color:#0000FF;">GetResponseStream</span><span style="color:#000000;">(</span><span style="color:#000000;">)</span><span style="color:#000000;">)</span><span style="color:#000000;">)</span>
                <span style="color:#000000;">{</span>
                    <span style="color:#FF0000;">string</span> responseText <span style="color:#008000;">=</span> sr.<span style="color:#0000FF;">ReadToEnd</span><span style="color:#000000;">(</span><span style="color:#000000;">)</span><span style="color:#008000;">;</span>
                    <span style="color:#0600FF;">throw</span> <a href="http://www.google.com/search?q=new+msdn.microsoft.com"><span style="color:#008000;">new</span></a> WebException<span style="color:#000000;">(</span>wex.<span style="color:#0000FF;">Message</span> <span style="color:#008000;">+</span> <span style="color:#666666;">" - "</span> <span style="color:#008000;">+</span> responseText, wex<span style="color:#000000;">)</span><span style="color:#008000;">;</span>
                <span style="color:#000000;">}</span>
            <span style="color:#000000;">}</span>
&nbsp;
            <span style="color:#0600FF;">return</span> oauth2Response<span style="color:#008000;">;</span>
        <span style="color:#000000;">}</span>
&nbsp;
        <span style="color:#008080;font-style:italic;">/// &lt;summary&gt;</span>
        <span style="color:#008080;font-style:italic;">/// Uses the specified authorization code to retrieve an access token from ACS to call the specified principal </span>
        <span style="color:#008080;font-style:italic;">/// at the specified targetHost. The targetHost must be registered for target principal.  If specified realm is </span>
        <span style="color:#008080;font-style:italic;">/// null, the "Realm" setting in web.config will be used instead.</span>
        <span style="color:#008080;font-style:italic;">/// &lt;/summary&gt;</span>
        <span style="color:#008080;font-style:italic;">/// &lt;param name="authorizationCode"&gt;Authorization code to exchange for access token&lt;/param&gt;</span>
        <span style="color:#008080;font-style:italic;">/// &lt;param name="targetPrincipalName"&gt;Name of the target principal to retrieve an access token for&lt;/param&gt;</span>
        <span style="color:#008080;font-style:italic;">/// &lt;param name="targetHost"&gt;Url authority of the target principal&lt;/param&gt;</span>
        <span style="color:#008080;font-style:italic;">/// &lt;param name="targetRealm"&gt;Realm to use for the access token's nameid and audience&lt;/param&gt;</span>
        <span style="color:#008080;font-style:italic;">/// &lt;returns&gt;An access token with an audience of the target principal&lt;/returns&gt;</span>
        <span style="color:#0600FF;">public</span> <span style="color:#0600FF;">static</span> OAuth2AccessTokenResponse GetAccessToken<span style="color:#000000;">(</span>
            <span style="color:#FF0000;">string</span> authorizationCode,
            <span style="color:#FF0000;">string</span> targetPrincipalName,
            <span style="color:#FF0000;">string</span> targetHost,
            <span style="color:#FF0000;">string</span> targetRealm,
            Uri redirectUri<span style="color:#000000;">)</span>
        <span style="color:#000000;">{</span>
&nbsp;
            <span style="color:#0600FF;">if</span> <span style="color:#000000;">(</span>targetRealm <span style="color:#008000;">==</span> <span style="color:#0600FF;">null</span><span style="color:#000000;">)</span>
            <span style="color:#000000;">{</span>
                targetRealm <span style="color:#008000;">=</span> Realm<span style="color:#008000;">;</span>
            <span style="color:#000000;">}</span>
&nbsp;
            <span style="color:#FF0000;">string</span> resource <span style="color:#008000;">=</span> GetFormattedPrincipal<span style="color:#000000;">(</span>targetPrincipalName, targetHost, targetRealm<span style="color:#000000;">)</span><span style="color:#008000;">;</span>
            <span style="color:#FF0000;">string</span> clientId <span style="color:#008000;">=</span> GetFormattedPrincipal<span style="color:#000000;">(</span>ClientId, <span style="color:#0600FF;">null</span>, targetRealm<span style="color:#000000;">)</span><span style="color:#008000;">;</span>
&nbsp;
            <span style="color:#008080;font-style:italic;">// Create request for token. The RedirectUri is null here.  This will fail if redirect uri is registered</span>
            OAuth2AccessTokenRequest oauth2Request <span style="color:#008000;">=</span>
                OAuth2MessageFactory.<span style="color:#0000FF;">CreateAccessTokenRequestWithAuthorizationCode</span><span style="color:#000000;">(</span>
                    clientId,
                    ClientSecret,
                    authorizationCode,
                    redirectUri,
                    resource<span style="color:#000000;">)</span><span style="color:#008000;">;</span>
&nbsp;
            <span style="color:#008080;font-style:italic;">// Get token</span>
            OAuth2S2SClient client <span style="color:#008000;">=</span> <a href="http://www.google.com/search?q=new+msdn.microsoft.com"><span style="color:#008000;">new</span></a> OAuth2S2SClient<span style="color:#000000;">(</span><span style="color:#000000;">)</span><span style="color:#008000;">;</span>
            OAuth2AccessTokenResponse oauth2Response<span style="color:#008000;">;</span>
            <span style="color:#0600FF;">try</span>
            <span style="color:#000000;">{</span>
                oauth2Response <span style="color:#008000;">=</span>
                    client.<span style="color:#0000FF;">Issue</span><span style="color:#000000;">(</span>AcsMetadataParser.<span style="color:#0000FF;">GetStsUrl</span><span style="color:#000000;">(</span>targetRealm<span style="color:#000000;">)</span>, oauth2Request<span style="color:#000000;">)</span> <span style="color:#0600FF;">as</span> OAuth2AccessTokenResponse<span style="color:#008000;">;</span>
            <span style="color:#000000;">}</span>
            <span style="color:#0600FF;">catch</span> <span style="color:#000000;">(</span>WebException wex<span style="color:#000000;">)</span>
            <span style="color:#000000;">{</span>
                <span style="color:#0600FF;">using</span> <span style="color:#000000;">(</span>StreamReader sr <span style="color:#008000;">=</span> <a href="http://www.google.com/search?q=new+msdn.microsoft.com"><span style="color:#008000;">new</span></a> StreamReader<span style="color:#000000;">(</span>wex.<span style="color:#0000FF;">Response</span>.<span style="color:#0000FF;">GetResponseStream</span><span style="color:#000000;">(</span><span style="color:#000000;">)</span><span style="color:#000000;">)</span><span style="color:#000000;">)</span>
                <span style="color:#000000;">{</span>
                    <span style="color:#FF0000;">string</span> responseText <span style="color:#008000;">=</span> sr.<span style="color:#0000FF;">ReadToEnd</span><span style="color:#000000;">(</span><span style="color:#000000;">)</span><span style="color:#008000;">;</span>
                    <span style="color:#0600FF;">throw</span> <a href="http://www.google.com/search?q=new+msdn.microsoft.com"><span style="color:#008000;">new</span></a> WebException<span style="color:#000000;">(</span>wex.<span style="color:#0000FF;">Message</span> <span style="color:#008000;">+</span> <span style="color:#666666;">" - "</span> <span style="color:#008000;">+</span> responseText, wex<span style="color:#000000;">)</span><span style="color:#008000;">;</span>
                <span style="color:#000000;">}</span>
            <span style="color:#000000;">}</span>
&nbsp;
            <span style="color:#0600FF;">return</span> oauth2Response<span style="color:#008000;">;</span>
        <span style="color:#000000;">}</span>
&nbsp;
        <span style="color:#008080;font-style:italic;">/// &lt;summary&gt;</span>
        <span style="color:#008080;font-style:italic;">/// Uses the specified refresh token to retrieve an access token from ACS to call the specified principal </span>
        <span style="color:#008080;font-style:italic;">/// at the specified targetHost. The targetHost must be registered for target principal.  If specified realm is </span>
        <span style="color:#008080;font-style:italic;">/// null, the "Realm" setting in web.config will be used instead.</span>
        <span style="color:#008080;font-style:italic;">/// &lt;/summary&gt;</span>
        <span style="color:#008080;font-style:italic;">/// &lt;param name="refreshToken"&gt;Refresh token to exchange for access token&lt;/param&gt;</span>
        <span style="color:#008080;font-style:italic;">/// &lt;param name="targetPrincipalName"&gt;Name of the target principal to retrieve an access token for&lt;/param&gt;</span>
        <span style="color:#008080;font-style:italic;">/// &lt;param name="targetHost"&gt;Url authority of the target principal&lt;/param&gt;</span>
        <span style="color:#008080;font-style:italic;">/// &lt;param name="targetRealm"&gt;Realm to use for the access token's nameid and audience&lt;/param&gt;</span>
        <span style="color:#008080;font-style:italic;">/// &lt;returns&gt;An access token with an audience of the target principal&lt;/returns&gt;</span>
        <span style="color:#0600FF;">public</span> OAuth2AccessTokenResponse GetAccessToken<span style="color:#000000;">(</span>
            <span style="color:#FF0000;">string</span> refreshToken,
            <span style="color:#FF0000;">string</span> targetPrincipalName,
            <span style="color:#FF0000;">string</span> targetHost,
            <span style="color:#FF0000;">string</span> targetRealm<span style="color:#000000;">)</span>
        <span style="color:#000000;">{</span>
&nbsp;
            <span style="color:#0600FF;">if</span> <span style="color:#000000;">(</span>targetRealm <span style="color:#008000;">==</span> <span style="color:#0600FF;">null</span><span style="color:#000000;">)</span>
            <span style="color:#000000;">{</span>
                targetRealm <span style="color:#008000;">=</span> Realm<span style="color:#008000;">;</span>
            <span style="color:#000000;">}</span>
&nbsp;
            <span style="color:#FF0000;">string</span> resource <span style="color:#008000;">=</span> GetFormattedPrincipal<span style="color:#000000;">(</span>targetPrincipalName, targetHost, targetRealm<span style="color:#000000;">)</span><span style="color:#008000;">;</span>
            <span style="color:#FF0000;">string</span> clientId <span style="color:#008000;">=</span> GetFormattedPrincipal<span style="color:#000000;">(</span>ClientId, <span style="color:#0600FF;">null</span>, targetRealm<span style="color:#000000;">)</span><span style="color:#008000;">;</span>
&nbsp;
            OAuth2AccessTokenRequest oauth2Request <span style="color:#008000;">=</span> OAuth2MessageFactory.<span style="color:#0000FF;">CreateAccessTokenRequestWithRefreshToken</span><span style="color:#000000;">(</span>clientId, ClientSecret, refreshToken, resource<span style="color:#000000;">)</span><span style="color:#008000;">;</span>
&nbsp;
            <span style="color:#008080;font-style:italic;">// Get token</span>
            OAuth2S2SClient client <span style="color:#008000;">=</span> <a href="http://www.google.com/search?q=new+msdn.microsoft.com"><span style="color:#008000;">new</span></a> OAuth2S2SClient<span style="color:#000000;">(</span><span style="color:#000000;">)</span><span style="color:#008000;">;</span>
            OAuth2AccessTokenResponse oauth2Response<span style="color:#008000;">;</span>
            <span style="color:#0600FF;">try</span>
            <span style="color:#000000;">{</span>
                oauth2Response <span style="color:#008000;">=</span>
                    client.<span style="color:#0000FF;">Issue</span><span style="color:#000000;">(</span>AcsMetadataParser.<span style="color:#0000FF;">GetStsUrl</span><span style="color:#000000;">(</span>targetRealm<span style="color:#000000;">)</span>, oauth2Request<span style="color:#000000;">)</span> <span style="color:#0600FF;">as</span> OAuth2AccessTokenResponse<span style="color:#008000;">;</span>
            <span style="color:#000000;">}</span>
            <span style="color:#0600FF;">catch</span> <span style="color:#000000;">(</span>WebException wex<span style="color:#000000;">)</span>
            <span style="color:#000000;">{</span>
                <span style="color:#0600FF;">using</span> <span style="color:#000000;">(</span>StreamReader sr <span style="color:#008000;">=</span> <a href="http://www.google.com/search?q=new+msdn.microsoft.com"><span style="color:#008000;">new</span></a> StreamReader<span style="color:#000000;">(</span>wex.<span style="color:#0000FF;">Response</span>.<span style="color:#0000FF;">GetResponseStream</span><span style="color:#000000;">(</span><span style="color:#000000;">)</span><span style="color:#000000;">)</span><span style="color:#000000;">)</span>
                <span style="color:#000000;">{</span>
                    <span style="color:#FF0000;">string</span> responseText <span style="color:#008000;">=</span> sr.<span style="color:#0000FF;">ReadToEnd</span><span style="color:#000000;">(</span><span style="color:#000000;">)</span><span style="color:#008000;">;</span>
                    <span style="color:#0600FF;">throw</span> <a href="http://www.google.com/search?q=new+msdn.microsoft.com"><span style="color:#008000;">new</span></a> WebException<span style="color:#000000;">(</span>wex.<span style="color:#0000FF;">Message</span> <span style="color:#008000;">+</span> <span style="color:#666666;">" - "</span> <span style="color:#008000;">+</span> responseText, wex<span style="color:#000000;">)</span><span style="color:#008000;">;</span>
                <span style="color:#000000;">}</span>
            <span style="color:#000000;">}</span>
&nbsp;
            <span style="color:#0600FF;">return</span> oauth2Response<span style="color:#008000;">;</span>
        <span style="color:#000000;">}</span>
&nbsp;
        <span style="color:#008080;font-style:italic;">/// &lt;summary&gt;</span>
        <span style="color:#008080;font-style:italic;">/// Retrieves an app-only access token from ACS to call the specified principal </span>
        <span style="color:#008080;font-style:italic;">/// at the specified targetHost. The targetHost must be registered for target principal.  If specified realm is </span>
        <span style="color:#008080;font-style:italic;">/// null, the "Realm" setting in web.config will be used instead.</span>
        <span style="color:#008080;font-style:italic;">/// &lt;/summary&gt;</span>
        <span style="color:#008080;font-style:italic;">/// &lt;param name="targetPrincipalName"&gt;Name of the target principal to retrieve an access token for&lt;/param&gt;</span>
        <span style="color:#008080;font-style:italic;">/// &lt;param name="targetHost"&gt;Url authority of the target principal&lt;/param&gt;</span>
        <span style="color:#008080;font-style:italic;">/// &lt;param name="targetRealm"&gt;Realm to use for the access token's nameid and audience&lt;/param&gt;</span>
        <span style="color:#008080;font-style:italic;">/// &lt;returns&gt;An access token with an audience of the target principal&lt;/returns&gt;</span>
        <span style="color:#0600FF;">public</span> <span style="color:#0600FF;">static</span> OAuth2AccessTokenResponse GetAppOnlyAccessToken<span style="color:#000000;">(</span>
            <span style="color:#FF0000;">string</span> targetPrincipalName,
            <span style="color:#FF0000;">string</span> targetHost,
            <span style="color:#FF0000;">string</span> targetRealm<span style="color:#000000;">)</span>
        <span style="color:#000000;">{</span>
&nbsp;
            <span style="color:#0600FF;">if</span> <span style="color:#000000;">(</span>targetRealm <span style="color:#008000;">==</span> <span style="color:#0600FF;">null</span><span style="color:#000000;">)</span>
            <span style="color:#000000;">{</span>
                targetRealm <span style="color:#008000;">=</span> Realm<span style="color:#008000;">;</span>
            <span style="color:#000000;">}</span>
&nbsp;
            <span style="color:#FF0000;">string</span> resource <span style="color:#008000;">=</span> GetFormattedPrincipal<span style="color:#000000;">(</span>targetPrincipalName, targetHost, targetRealm<span style="color:#000000;">)</span><span style="color:#008000;">;</span>
            <span style="color:#FF0000;">string</span> clientId <span style="color:#008000;">=</span> GetFormattedPrincipal<span style="color:#000000;">(</span>ClientId, HostedAppHostName, targetRealm<span style="color:#000000;">)</span><span style="color:#008000;">;</span>
&nbsp;
            OAuth2AccessTokenRequest oauth2Request <span style="color:#008000;">=</span> OAuth2MessageFactory.<span style="color:#0000FF;">CreateAccessTokenRequestWithClientCredentials</span><span style="color:#000000;">(</span>clientId, ClientSecret, resource<span style="color:#000000;">)</span><span style="color:#008000;">;</span>
            oauth2Request.<span style="color:#0000FF;">Resource</span> <span style="color:#008000;">=</span> resource<span style="color:#008000;">;</span>
&nbsp;
            <span style="color:#008080;font-style:italic;">// Get token</span>
            OAuth2S2SClient client <span style="color:#008000;">=</span> <a href="http://www.google.com/search?q=new+msdn.microsoft.com"><span style="color:#008000;">new</span></a> OAuth2S2SClient<span style="color:#000000;">(</span><span style="color:#000000;">)</span><span style="color:#008000;">;</span>
&nbsp;
            OAuth2AccessTokenResponse oauth2Response<span style="color:#008000;">;</span>
            <span style="color:#0600FF;">try</span>
            <span style="color:#000000;">{</span>
                oauth2Response <span style="color:#008000;">=</span>
                    client.<span style="color:#0000FF;">Issue</span><span style="color:#000000;">(</span>AcsMetadataParser.<span style="color:#0000FF;">GetStsUrl</span><span style="color:#000000;">(</span>targetRealm<span style="color:#000000;">)</span>, oauth2Request<span style="color:#000000;">)</span> <span style="color:#0600FF;">as</span> OAuth2AccessTokenResponse<span style="color:#008000;">;</span>
            <span style="color:#000000;">}</span>
            <span style="color:#0600FF;">catch</span> <span style="color:#000000;">(</span>WebException wex<span style="color:#000000;">)</span>
            <span style="color:#000000;">{</span>
                <span style="color:#0600FF;">using</span> <span style="color:#000000;">(</span>StreamReader sr <span style="color:#008000;">=</span> <a href="http://www.google.com/search?q=new+msdn.microsoft.com"><span style="color:#008000;">new</span></a> StreamReader<span style="color:#000000;">(</span>wex.<span style="color:#0000FF;">Response</span>.<span style="color:#0000FF;">GetResponseStream</span><span style="color:#000000;">(</span><span style="color:#000000;">)</span><span style="color:#000000;">)</span><span style="color:#000000;">)</span>
                <span style="color:#000000;">{</span>
                    <span style="color:#FF0000;">string</span> responseText <span style="color:#008000;">=</span> sr.<span style="color:#0000FF;">ReadToEnd</span><span style="color:#000000;">(</span><span style="color:#000000;">)</span><span style="color:#008000;">;</span>
                    <span style="color:#0600FF;">throw</span> <a href="http://www.google.com/search?q=new+msdn.microsoft.com"><span style="color:#008000;">new</span></a> WebException<span style="color:#000000;">(</span>wex.<span style="color:#0000FF;">Message</span> <span style="color:#008000;">+</span> <span style="color:#666666;">" - "</span> <span style="color:#008000;">+</span> responseText, wex<span style="color:#000000;">)</span><span style="color:#008000;">;</span>
                <span style="color:#000000;">}</span>
            <span style="color:#000000;">}</span>
&nbsp;
            <span style="color:#0600FF;">return</span> oauth2Response<span style="color:#008000;">;</span>
        <span style="color:#000000;">}</span>
&nbsp;
        <span style="color:#008080;font-style:italic;">/// &lt;summary&gt;</span>
        <span style="color:#008080;font-style:italic;">/// Retrieves an access token from ACS using the specified authorization code, and uses that access token to </span>
        <span style="color:#008080;font-style:italic;">/// create a client context</span>
        <span style="color:#008080;font-style:italic;">/// &lt;/summary&gt;</span>
        <span style="color:#008080;font-style:italic;">/// &lt;param name="targetUrl"&gt;Url of the target SharePoint site&lt;/param&gt;</span>
        <span style="color:#008080;font-style:italic;">/// &lt;param name="targetPrincipalName"&gt;Name of the target SharePoint principal&lt;/param&gt;</span>
        <span style="color:#008080;font-style:italic;">/// &lt;param name="authorizationCode"&gt;Authorization code to use when retrieving the access token from ACS&lt;/param&gt;</span>
        <span style="color:#008080;font-style:italic;">/// &lt;param name="targetRealm"&gt;Realm to use for the access token's nameid and audience&lt;/param&gt;</span>
        <span style="color:#008080;font-style:italic;">/// &lt;returns&gt;A ClientContext ready to call targetUrl with a valid access token&lt;/returns&gt;</span>
        <span style="color:#0600FF;">public</span> <span style="color:#0600FF;">static</span> ClientContext GetClientContextWithAuthorizationCode<span style="color:#000000;">(</span>
            <span style="color:#FF0000;">string</span> targetUrl,
            <span style="color:#FF0000;">string</span> targetPrincipalName,
            <span style="color:#FF0000;">string</span> authorizationCode,
            <span style="color:#FF0000;">string</span> targetRealm,
            Uri redirectUri<span style="color:#000000;">)</span>
        <span style="color:#000000;">{</span>
            Uri targetUri <span style="color:#008000;">=</span> <a href="http://www.google.com/search?q=new+msdn.microsoft.com"><span style="color:#008000;">new</span></a> Uri<span style="color:#000000;">(</span>targetUrl<span style="color:#000000;">)</span><span style="color:#008000;">;</span>
&nbsp;
            <span style="color:#FF0000;">string</span> accessToken <span style="color:#008000;">=</span>
                GetAccessToken<span style="color:#000000;">(</span>authorizationCode, targetPrincipalName, targetUri.<span style="color:#0000FF;">Authority</span>, targetRealm, redirectUri<span style="color:#000000;">)</span>.<span style="color:#0000FF;">AccessToken</span><span style="color:#008000;">;</span>
&nbsp;
            <span style="color:#0600FF;">return</span> GetClientContextWithAccessToken<span style="color:#000000;">(</span>targetUrl, accessToken<span style="color:#000000;">)</span><span style="color:#008000;">;</span>
        <span style="color:#000000;">}</span>
&nbsp;
        <span style="color:#008080;font-style:italic;">/// &lt;summary&gt;</span>
        <span style="color:#008080;font-style:italic;">/// Uses the specified access token to create a client context</span>
        <span style="color:#008080;font-style:italic;">/// &lt;/summary&gt;</span>
        <span style="color:#008080;font-style:italic;">/// &lt;param name="targetUrl"&gt;Url of the target SharePoint site&lt;/param&gt;</span>
        <span style="color:#008080;font-style:italic;">/// &lt;param name="accessToken"&gt;Access token to be used when calling the specified targetUrl&lt;/param&gt;</span>
        <span style="color:#008080;font-style:italic;">/// &lt;returns&gt;A ClientContext ready to call targetUrl with the specified access token&lt;/returns&gt;</span>
        <span style="color:#0600FF;">public</span> <span style="color:#0600FF;">static</span> ClientContext GetClientContextWithAccessToken<span style="color:#000000;">(</span><span style="color:#FF0000;">string</span> targetUrl, <span style="color:#FF0000;">string</span> accessToken<span style="color:#000000;">)</span>
        <span style="color:#000000;">{</span>
            Uri targetUri <span style="color:#008000;">=</span> <a href="http://www.google.com/search?q=new+msdn.microsoft.com"><span style="color:#008000;">new</span></a> Uri<span style="color:#000000;">(</span>targetUrl<span style="color:#000000;">)</span><span style="color:#008000;">;</span>
&nbsp;
            ClientContext clientContext <span style="color:#008000;">=</span> <a href="http://www.google.com/search?q=new+msdn.microsoft.com"><span style="color:#008000;">new</span></a> ClientContext<span style="color:#000000;">(</span>targetUrl<span style="color:#000000;">)</span><span style="color:#008000;">;</span>
&nbsp;
            clientContext.<span style="color:#0000FF;">AuthenticationMode</span> <span style="color:#008000;">=</span> ClientAuthenticationMode.<span style="color:#0000FF;">Anonymous</span><span style="color:#008000;">;</span>
            clientContext.<span style="color:#0000FF;">FormDigestHandlingEnabled</span> <span style="color:#008000;">=</span> false<span style="color:#008000;">;</span>
            clientContext.<span style="color:#0000FF;">ExecutingWebRequest</span> <span style="color:#008000;">+=</span>
                <span style="color:#FF0000;">delegate</span><span style="color:#000000;">(</span><span style="color:#FF0000;">object</span> oSender, WebRequestEventArgs webRequestEventArgs<span style="color:#000000;">)</span>
                <span style="color:#000000;">{</span>
                    webRequestEventArgs.<span style="color:#0000FF;">WebRequestExecutor</span>.<span style="color:#0000FF;">RequestHeaders</span><span style="color:#000000;">[</span><span style="color:#666666;">"Authorization"</span><span style="color:#000000;">]</span> <span style="color:#008000;">=</span>
                        <span style="color:#666666;">"Bearer "</span> <span style="color:#008000;">+</span> accessToken<span style="color:#008000;">;</span>
                <span style="color:#000000;">}</span><span style="color:#008000;">;</span>
&nbsp;
            <span style="color:#0600FF;">return</span> clientContext<span style="color:#008000;">;</span>
        <span style="color:#000000;">}</span>
&nbsp;
        <span style="color:#008080;font-style:italic;">/// &lt;summary&gt;</span>
        <span style="color:#008080;font-style:italic;">/// Retrieves an access token from ACS using the specified context token, and uses that access token to create</span>
        <span style="color:#008080;font-style:italic;">/// a client context</span>
        <span style="color:#008080;font-style:italic;">/// &lt;/summary&gt;</span>
        <span style="color:#008080;font-style:italic;">/// &lt;param name="targetUrl"&gt;Url of the target SharePoint site&lt;/param&gt;</span>
        <span style="color:#008080;font-style:italic;">/// &lt;param name="contextTokenString"&gt;Context token received from the target SharePoint site&lt;/param&gt;</span>
        <span style="color:#008080;font-style:italic;">/// &lt;param name="appHostUrl"&gt;Url authority of the hosted app.  If this is null, the value in the HostedAppHostName</span>
        <span style="color:#008080;font-style:italic;">/// of web.config will be used instead&lt;/param&gt;</span>
        <span style="color:#008080;font-style:italic;">/// &lt;returns&gt;A ClientContext ready to call targetUrl with a valid access token&lt;/returns&gt;</span>
        <span style="color:#0600FF;">public</span> <span style="color:#0600FF;">static</span> ClientContext GetClientContextWithContextToken<span style="color:#000000;">(</span>
            <span style="color:#FF0000;">string</span> targetUrl,
            <span style="color:#FF0000;">string</span> contextTokenString,
            <span style="color:#FF0000;">string</span> appHostUrl<span style="color:#000000;">)</span>
        <span style="color:#000000;">{</span>
            SharePointContextToken contextToken <span style="color:#008000;">=</span> ReadAndValidateContextToken<span style="color:#000000;">(</span>contextTokenString, appHostUrl<span style="color:#000000;">)</span><span style="color:#008000;">;</span>
&nbsp;
            Uri targetUri <span style="color:#008000;">=</span> <a href="http://www.google.com/search?q=new+msdn.microsoft.com"><span style="color:#008000;">new</span></a> Uri<span style="color:#000000;">(</span>targetUrl<span style="color:#000000;">)</span><span style="color:#008000;">;</span>
&nbsp;
            <span style="color:#FF0000;">string</span> accessToken <span style="color:#008000;">=</span> GetAccessToken<span style="color:#000000;">(</span>contextToken, targetUri.<span style="color:#0000FF;">Authority</span><span style="color:#000000;">)</span>.<span style="color:#0000FF;">AccessToken</span><span style="color:#008000;">;</span>
&nbsp;
            <span style="color:#0600FF;">return</span> GetClientContextWithAccessToken<span style="color:#000000;">(</span>targetUrl, accessToken<span style="color:#000000;">)</span><span style="color:#008000;">;</span>
        <span style="color:#000000;">}</span>
&nbsp;
        <span style="color:#008080;font-style:italic;">/// &lt;summary&gt;</span>
        <span style="color:#008080;font-style:italic;">/// Returns the SharePoint url to which the app should redirect the browser to request consent and get back</span>
        <span style="color:#008080;font-style:italic;">/// an authorization code.</span>
        <span style="color:#008080;font-style:italic;">/// &lt;/summary&gt;</span>
        <span style="color:#008080;font-style:italic;">/// &lt;param name="contextUrl"&gt;Absolute Url of the SharePoint site&lt;/param&gt;</span>
        <span style="color:#008080;font-style:italic;">/// &lt;param name="scope"&gt;Space-delimited permissions to request from the SharePoint site in "shorthand" format </span>
        <span style="color:#008080;font-style:italic;">/// (e.g. "Web.Read Site.Write")&lt;/param&gt;</span>
        <span style="color:#008080;font-style:italic;">/// &lt;returns&gt;Url of the SharePoint site's OAuth authorization page&lt;/returns&gt;</span>
        <span style="color:#0600FF;">public</span> <span style="color:#0600FF;">static</span> <span style="color:#FF0000;">string</span> GetAuthorizationUrl<span style="color:#000000;">(</span><span style="color:#FF0000;">string</span> contextUrl, <span style="color:#FF0000;">string</span> scope<span style="color:#000000;">)</span>
        <span style="color:#000000;">{</span>
            <span style="color:#0600FF;">return</span> <span style="color:#FF0000;">string</span>.<span style="color:#0000FF;">Format</span><span style="color:#000000;">(</span>
                <span style="color:#666666;">"{0}{1}?IsDlg=1&amp;client_id={2}&amp;scope={3}&amp;response_type=code"</span>,
                EnsureTrailingSlash<span style="color:#000000;">(</span>contextUrl<span style="color:#000000;">)</span>,
                AuthorizationPage,
                ClientId,
                scope<span style="color:#000000;">)</span><span style="color:#008000;">;</span>
        <span style="color:#000000;">}</span>
&nbsp;
        <span style="color:#008080;font-style:italic;">/// &lt;summary&gt;</span>
        <span style="color:#008080;font-style:italic;">/// Returns the SharePoint url to which the app should redirect the browser to request consent and get back</span>
        <span style="color:#008080;font-style:italic;">/// an authorization code.</span>
        <span style="color:#008080;font-style:italic;">/// &lt;/summary&gt;</span>
        <span style="color:#008080;font-style:italic;">/// &lt;param name="contextUrl"&gt;Absolute Url of the SharePoint site&lt;/param&gt;</span>
        <span style="color:#008080;font-style:italic;">/// &lt;param name="scope"&gt;Space-delimited permissions to request from the SharePoint site in "shorthand" format</span>
        <span style="color:#008080;font-style:italic;">/// (e.g. "Web.Read Site.Write")&lt;/param&gt;</span>
        <span style="color:#008080;font-style:italic;">/// &lt;param name="redirectUri"&gt;Uri to which SharePoint should redirect the browser to after consent is </span>
        <span style="color:#008080;font-style:italic;">/// granted&lt;/param&gt;</span>
        <span style="color:#008080;font-style:italic;">/// &lt;returns&gt;Url of the SharePoint site's OAuth authorization page&lt;/returns&gt;</span>
        <span style="color:#0600FF;">public</span> <span style="color:#0600FF;">static</span> <span style="color:#FF0000;">string</span> GetAuthorizationUrl<span style="color:#000000;">(</span><span style="color:#FF0000;">string</span> contextUrl, <span style="color:#FF0000;">string</span> scope, <span style="color:#FF0000;">string</span> redirectUri<span style="color:#000000;">)</span>
        <span style="color:#000000;">{</span>
            <span style="color:#0600FF;">return</span> <span style="color:#FF0000;">string</span>.<span style="color:#0000FF;">Format</span><span style="color:#000000;">(</span>
                <span style="color:#666666;">"{0}{1}?IsDlg=1&amp;client_id={2}&amp;scope={3}&amp;response_type=code&amp;redirect_uri={4}"</span>,
                EnsureTrailingSlash<span style="color:#000000;">(</span>contextUrl<span style="color:#000000;">)</span>,
                AuthorizationPage,
                ClientId,
                scope,
                redirectUri<span style="color:#000000;">)</span><span style="color:#008000;">;</span>
        <span style="color:#000000;">}</span>
&nbsp;
        <span style="color:#008080;font-style:italic;">/// &lt;summary&gt;</span>
        <span style="color:#008080;font-style:italic;">/// Returns the SharePoint url to which the app should redirect the browser to request a new context token.</span>
        <span style="color:#008080;font-style:italic;">/// &lt;/summary&gt;</span>
        <span style="color:#008080;font-style:italic;">/// &lt;param name="contextUrl"&gt;Absolute Url of the SharePoint site&lt;/param&gt;</span>
        <span style="color:#008080;font-style:italic;">/// &lt;param name="redirectUri"&gt;Uri to which SharePoint should redirect the browser to with a context token&lt;/param&gt;</span>
        <span style="color:#008080;font-style:italic;">/// &lt;returns&gt;Url of the SharePoint site's context token redirect page&lt;/returns&gt;</span>
        <span style="color:#0600FF;">public</span> <span style="color:#0600FF;">static</span> <span style="color:#FF0000;">string</span> GetAppContextTokenRequestUrl<span style="color:#000000;">(</span><span style="color:#FF0000;">string</span> contextUrl, <span style="color:#FF0000;">string</span> redirectUri<span style="color:#000000;">)</span>
        <span style="color:#000000;">{</span>
            <span style="color:#0600FF;">return</span> <span style="color:#FF0000;">string</span>.<span style="color:#0000FF;">Format</span><span style="color:#000000;">(</span>
                <span style="color:#666666;">"{0}{1}?client_id={2}&amp;redirect_uri={3}"</span>,
                EnsureTrailingSlash<span style="color:#000000;">(</span>contextUrl<span style="color:#000000;">)</span>,
                RedirectPage,
                ClientId,
                redirectUri<span style="color:#000000;">)</span><span style="color:#008000;">;</span>
        <span style="color:#000000;">}</span>
&nbsp;
        <span style="color:#008080;font-style:italic;">/// &lt;summary&gt;</span>
        <span style="color:#008080;font-style:italic;">/// Retrieves an S2S access token signed by the application's private certificate on behalf of the specified </span>
        <span style="color:#008080;font-style:italic;">/// WindowsIdentity and intended for the SharePoint at the targetApplicationUri. If no Realm is specified in </span>
        <span style="color:#008080;font-style:italic;">/// web.config, an auth challenge will be issued to the targetApplicationUri to discover it.</span>
        <span style="color:#008080;font-style:italic;">/// &lt;/summary&gt;</span>
        <span style="color:#008080;font-style:italic;">/// &lt;param name="targetApplicationUri"&gt;Url of the target SharePoint site&lt;/param&gt;</span>
        <span style="color:#008080;font-style:italic;">/// &lt;param name="identity"&gt;Windows identity of the user on whose behalf to create the access token&lt;/param&gt;</span>
        <span style="color:#008080;font-style:italic;">/// &lt;returns&gt;An access token with an audience of the target principal&lt;/returns&gt;</span>
        <span style="color:#0600FF;">public</span> <span style="color:#0600FF;">static</span> <span style="color:#FF0000;">string</span> GetS2SAccessTokenWithWindowsIdentity<span style="color:#000000;">(</span>
            Uri targetApplicationUri,
            WindowsIdentity identity<span style="color:#000000;">)</span>
        <span style="color:#000000;">{</span>
            <span style="color:#FF0000;">string</span> realm <span style="color:#008000;">=</span> <span style="color:#FF0000;">string</span>.<span style="color:#0000FF;">IsNullOrEmpty</span><span style="color:#000000;">(</span>Realm<span style="color:#000000;">)</span> <span style="color:#008000;">?</span> GetRealmFromTargetUrl<span style="color:#000000;">(</span>targetApplicationUri<span style="color:#000000;">)</span> <span style="color:#008000;">:</span> Realm<span style="color:#008000;">;</span>
&nbsp;
            JsonWebTokenClaim<span style="color:#000000;">[</span><span style="color:#000000;">]</span> claims <span style="color:#008000;">=</span> GetClaimsWithWindowsIdentity<span style="color:#000000;">(</span>identity<span style="color:#000000;">)</span><span style="color:#008000;">;</span>
&nbsp;
            <span style="color:#0600FF;">return</span> GetS2SAccessTokenWithClaims<span style="color:#000000;">(</span>targetApplicationUri.<span style="color:#0000FF;">Authority</span>, realm, claims<span style="color:#000000;">)</span><span style="color:#008000;">;</span>
        <span style="color:#000000;">}</span>
&nbsp;
        <span style="color:#008080;font-style:italic;">/// &lt;summary&gt;</span>
        <span style="color:#008080;font-style:italic;">/// Retrieves an S2S client context with an access token signed by the application's private certificate on </span>
        <span style="color:#008080;font-style:italic;">/// behalf of the specified WindowsIdentity and intended for application at the targetApplicationUri using the </span>
        <span style="color:#008080;font-style:italic;">/// targetRealm. If no Realm is specified in web.config, an auth challenge will be issued to the </span>
        <span style="color:#008080;font-style:italic;">/// targetApplicationUri to discover it.</span>
        <span style="color:#008080;font-style:italic;">/// &lt;/summary&gt;</span>
        <span style="color:#008080;font-style:italic;">/// &lt;param name="targetApplicationUri"&gt;Url of the target SharePoint site&lt;/param&gt;</span>
        <span style="color:#008080;font-style:italic;">/// &lt;param name="identity"&gt;Windows identity of the user on whose behalf to create the access token&lt;/param&gt;</span>
        <span style="color:#008080;font-style:italic;">/// &lt;returns&gt;A ClientContext using an access token with an audience of the target application&lt;/returns&gt;</span>
        <span style="color:#0600FF;">public</span> <span style="color:#0600FF;">static</span> ClientContext GetS2SClientContextWithWindowsIdentity<span style="color:#000000;">(</span>
            Uri targetApplicationUri,
            WindowsIdentity identity<span style="color:#000000;">)</span>
        <span style="color:#000000;">{</span>
            <span style="color:#FF0000;">string</span> realm <span style="color:#008000;">=</span> <span style="color:#FF0000;">string</span>.<span style="color:#0000FF;">IsNullOrEmpty</span><span style="color:#000000;">(</span>Realm<span style="color:#000000;">)</span> <span style="color:#008000;">?</span> GetRealmFromTargetUrl<span style="color:#000000;">(</span>targetApplicationUri<span style="color:#000000;">)</span> <span style="color:#008000;">:</span> Realm<span style="color:#008000;">;</span>
&nbsp;
            JsonWebTokenClaim<span style="color:#000000;">[</span><span style="color:#000000;">]</span> claims <span style="color:#008000;">=</span> GetClaimsWithWindowsIdentity<span style="color:#000000;">(</span>identity<span style="color:#000000;">)</span><span style="color:#008000;">;</span>
&nbsp;
            <span style="color:#FF0000;">string</span> accessToken <span style="color:#008000;">=</span> GetS2SAccessTokenWithClaims<span style="color:#000000;">(</span>targetApplicationUri.<span style="color:#0000FF;">Authority</span>, realm, claims<span style="color:#000000;">)</span><span style="color:#008000;">;</span>
&nbsp;
            <span style="color:#0600FF;">return</span> GetClientContextWithAccessToken<span style="color:#000000;">(</span>targetApplicationUri.<span style="color:#0000FF;">ToString</span><span style="color:#000000;">(</span><span style="color:#000000;">)</span>, accessToken<span style="color:#000000;">)</span><span style="color:#008000;">;</span>
        <span style="color:#000000;">}</span>
&nbsp;
        <span style="color:#008080;">#endregion</span>
&nbsp;
        <span style="color:#008080;">#region private fields</span>
&nbsp;
        <span style="color:#008080;font-style:italic;">//</span>
        <span style="color:#008080;font-style:italic;">// Configuration Constants</span>
        <span style="color:#008080;font-style:italic;">//</span>
&nbsp;
        <span style="color:#0600FF;">private</span> <span style="color:#0600FF;">const</span> <span style="color:#FF0000;">string</span> SHAREPOINT_PID <span style="color:#008000;">=</span> <span style="color:#666666;">"00000003-0000-0ff1-ce00-000000000000"</span><span style="color:#008000;">;</span>
&nbsp;
        <span style="color:#0600FF;">private</span> <span style="color:#0600FF;">const</span> <span style="color:#FF0000;">string</span> AccessTokenParameterName <span style="color:#008000;">=</span> <span style="color:#666666;">"AccessToken"</span><span style="color:#008000;">;</span>
        <span style="color:#0600FF;">private</span> <span style="color:#0600FF;">const</span> <span style="color:#FF0000;">string</span> AuthorizationPage <span style="color:#008000;">=</span> <span style="color:#666666;">"_layouts/15/OAuthAuthorize.aspx"</span><span style="color:#008000;">;</span>
        <span style="color:#0600FF;">private</span> <span style="color:#0600FF;">const</span> <span style="color:#FF0000;">string</span> RedirectPage <span style="color:#008000;">=</span> <span style="color:#666666;">"_layouts/15/AppRedirect.aspx"</span><span style="color:#008000;">;</span>
        <span style="color:#0600FF;">private</span> <span style="color:#0600FF;">const</span> <span style="color:#FF0000;">string</span> AcsPrincipalName <span style="color:#008000;">=</span> <span style="color:#666666;">"00000001-0000-0000-c000-000000000000"</span><span style="color:#008000;">;</span>
        <span style="color:#0600FF;">private</span> <span style="color:#0600FF;">const</span> <span style="color:#FF0000;">string</span> AcsMetadataEndPointRelativeUrl <span style="color:#008000;">=</span> <span style="color:#666666;">"metadata/json/1"</span><span style="color:#008000;">;</span>
        <span style="color:#0600FF;">private</span> <span style="color:#0600FF;">const</span> <span style="color:#FF0000;">string</span> DelegationService <span style="color:#008000;">=</span> <span style="color:#666666;">"DelegationService1.0"</span><span style="color:#008000;">;</span>
        <span style="color:#0600FF;">private</span> <span style="color:#0600FF;">const</span> <span style="color:#FF0000;">string</span> AcsManagementServiceRelativeUrl <span style="color:#008000;">=</span> <span style="color:#666666;">"r4/mgmt/service/"</span><span style="color:#008000;">;</span>
        <span style="color:#0600FF;">private</span> <span style="color:#0600FF;">const</span> <span style="color:#FF0000;">string</span> AcsManagementServiceAppliesTo <span style="color:#008000;">=</span> <span style="color:#666666;">"v2/mgmt/service/"</span><span style="color:#008000;">;</span>
        <span style="color:#0600FF;">private</span> <span style="color:#0600FF;">const</span> <span style="color:#FF0000;">string</span> AcsOAuthRelativeUrl <span style="color:#008000;">=</span> <span style="color:#666666;">"v2/OAuth2-13"</span><span style="color:#008000;">;</span>
        <span style="color:#0600FF;">private</span> <span style="color:#0600FF;">const</span> <span style="color:#FF0000;">string</span> S2SProtocol <span style="color:#008000;">=</span> <span style="color:#666666;">"OAuth2"</span><span style="color:#008000;">;</span>
        <span style="color:#0600FF;">private</span> <span style="color:#0600FF;">const</span> <span style="color:#FF0000;">string</span> DelegationIssuance <span style="color:#008000;">=</span> <span style="color:#666666;">"DelegationIssuance1.0"</span><span style="color:#008000;">;</span>
        <span style="color:#0600FF;">private</span> <span style="color:#0600FF;">const</span> <span style="color:#FF0000;">string</span> DelegationIssuanceRequestTokenUrlSuffix <span style="color:#008000;">=</span> <span style="color:#666666;">"RequestAccessToken"</span><span style="color:#008000;">;</span>
        <span style="color:#0600FF;">private</span> <span style="color:#0600FF;">const</span> <span style="color:#FF0000;">string</span> NameIdentifierClaimType <span style="color:#008000;">=</span> JsonWebTokenConstants.<span style="color:#0000FF;">ReservedClaims</span>.<span style="color:#0000FF;">NameIdentifier</span><span style="color:#008000;">;</span>
        <span style="color:#0600FF;">private</span> <span style="color:#0600FF;">const</span> <span style="color:#FF0000;">string</span> IdentityProviderClaimType <span style="color:#008000;">=</span> JsonWebTokenConstants.<span style="color:#0000FF;">ReservedClaims</span>.<span style="color:#0000FF;">IdentityProvider</span><span style="color:#008000;">;</span>
        <span style="color:#0600FF;">private</span> <span style="color:#0600FF;">const</span> <span style="color:#FF0000;">string</span> TrustedForImpersonationClaimType <span style="color:#008000;">=</span> <span style="color:#666666;">"trustedfordelegation"</span><span style="color:#008000;">;</span>
        <span style="color:#0600FF;">private</span> <span style="color:#0600FF;">const</span> <span style="color:#FF0000;">string</span> ApplicationContextClaimType <span style="color:#008000;">=</span> JsonWebTokenConstants.<span style="color:#0000FF;">ReservedClaims</span>.<span style="color:#0000FF;">AppContext</span><span style="color:#008000;">;</span>
        <span style="color:#0600FF;">private</span> <span style="color:#0600FF;">const</span> <span style="color:#FF0000;">string</span> ActorTokenClaimType <span style="color:#008000;">=</span> JsonWebTokenConstants.<span style="color:#0000FF;">ReservedClaims</span>.<span style="color:#0000FF;">ActorToken</span><span style="color:#008000;">;</span>
        <span style="color:#0600FF;">private</span> <span style="color:#0600FF;">const</span> <span style="color:#FF0000;">string</span> SmtpClaimType <span style="color:#008000;">=</span> <span style="color:#666666;">"smtp"</span><span style="color:#008000;">;</span>
        <span style="color:#0600FF;">private</span> <span style="color:#0600FF;">const</span> <span style="color:#FF0000;">string</span> SipClaimType <span style="color:#008000;">=</span> <span style="color:#666666;">"sip"</span><span style="color:#008000;">;</span>
        <span style="color:#0600FF;">private</span> <span style="color:#0600FF;">const</span> <span style="color:#FF0000;">int</span> TokenLifetimeMinutes <span style="color:#008000;">=</span> <span style="color:#FF0000;">1000000</span><span style="color:#008000;">;</span>
&nbsp;
        <span style="color:#008080;font-style:italic;">//</span>
        <span style="color:#008080;font-style:italic;">// Environment Constants</span>
        <span style="color:#008080;font-style:italic;">//</span>
&nbsp;
        <span style="color:#0600FF;">private</span> <span style="color:#0600FF;">static</span> <span style="color:#FF0000;">string</span> GlobalEndPointPrefix <span style="color:#008000;">=</span> <span style="color:#666666;">"accounts"</span><span style="color:#008000;">;</span>
        <span style="color:#0600FF;">private</span> <span style="color:#0600FF;">static</span> <span style="color:#FF0000;">string</span> AcsHostUrl <span style="color:#008000;">=</span> <span style="color:#666666;">"accesscontrol.windows.net"</span><span style="color:#008000;">;</span>
&nbsp;
        <span style="color:#008080;font-style:italic;">//</span>
        <span style="color:#008080;font-style:italic;">// Hosted app configuration</span>
        <span style="color:#008080;font-style:italic;">//</span>
        <span style="color:#0600FF;">private</span> <span style="color:#0600FF;">static</span> <span style="color:#0600FF;">readonly</span> <span style="color:#FF0000;">string</span> ClientId <span style="color:#008000;">=</span> <span style="color:#FF0000;">string</span>.<span style="color:#0000FF;">IsNullOrEmpty</span><span style="color:#000000;">(</span>WebConfigurationManager.<span style="color:#0000FF;">AppSettings</span>.<span style="color:#0000FF;">Get</span><span style="color:#000000;">(</span><span style="color:#666666;">"ClientId"</span><span style="color:#000000;">)</span><span style="color:#000000;">)</span> <span style="color:#008000;">?</span> WebConfigurationManager.<span style="color:#0000FF;">AppSettings</span>.<span style="color:#0000FF;">Get</span><span style="color:#000000;">(</span><span style="color:#666666;">"HostedAppName"</span><span style="color:#000000;">)</span> <span style="color:#008000;">:</span> WebConfigurationManager.<span style="color:#0000FF;">AppSettings</span>.<span style="color:#0000FF;">Get</span><span style="color:#000000;">(</span><span style="color:#666666;">"ClientId"</span><span style="color:#000000;">)</span><span style="color:#008000;">;</span>
        <span style="color:#0600FF;">private</span> <span style="color:#0600FF;">static</span> <span style="color:#0600FF;">readonly</span> <span style="color:#FF0000;">string</span> HostedAppHostName <span style="color:#008000;">=</span> WebConfigurationManager.<span style="color:#0000FF;">AppSettings</span>.<span style="color:#0000FF;">Get</span><span style="color:#000000;">(</span><span style="color:#666666;">"HostedAppHostName"</span><span style="color:#000000;">)</span><span style="color:#008000;">;</span>
        <span style="color:#0600FF;">private</span> <span style="color:#0600FF;">static</span> <span style="color:#0600FF;">readonly</span> <span style="color:#FF0000;">string</span> ClientSecret <span style="color:#008000;">=</span> <span style="color:#FF0000;">string</span>.<span style="color:#0000FF;">IsNullOrEmpty</span><span style="color:#000000;">(</span>WebConfigurationManager.<span style="color:#0000FF;">AppSettings</span>.<span style="color:#0000FF;">Get</span><span style="color:#000000;">(</span><span style="color:#666666;">"ClientSecret"</span><span style="color:#000000;">)</span><span style="color:#000000;">)</span> <span style="color:#008000;">?</span> WebConfigurationManager.<span style="color:#0000FF;">AppSettings</span>.<span style="color:#0000FF;">Get</span><span style="color:#000000;">(</span><span style="color:#666666;">"HostedAppSigningKey"</span><span style="color:#000000;">)</span> <span style="color:#008000;">:</span> WebConfigurationManager.<span style="color:#0000FF;">AppSettings</span>.<span style="color:#0000FF;">Get</span><span style="color:#000000;">(</span><span style="color:#666666;">"ClientSecret"</span><span style="color:#000000;">)</span><span style="color:#008000;">;</span>
        <span style="color:#0600FF;">private</span> <span style="color:#0600FF;">static</span> <span style="color:#0600FF;">readonly</span> <span style="color:#FF0000;">string</span> Realm <span style="color:#008000;">=</span> WebConfigurationManager.<span style="color:#0000FF;">AppSettings</span>.<span style="color:#0000FF;">Get</span><span style="color:#000000;">(</span><span style="color:#666666;">"Realm"</span><span style="color:#000000;">)</span><span style="color:#008000;">;</span>
        <span style="color:#0600FF;">private</span> <span style="color:#0600FF;">static</span> <span style="color:#0600FF;">readonly</span> <span style="color:#FF0000;">string</span> ServiceNamespace <span style="color:#008000;">=</span> WebConfigurationManager.<span style="color:#0000FF;">AppSettings</span>.<span style="color:#0000FF;">Get</span><span style="color:#000000;">(</span><span style="color:#666666;">"Realm"</span><span style="color:#000000;">)</span><span style="color:#008000;">;</span>
&nbsp;
        <span style="color:#0600FF;">private</span> <span style="color:#0600FF;">static</span> <span style="color:#0600FF;">readonly</span> <span style="color:#FF0000;">string</span> ClientSigningCertificatePath <span style="color:#008000;">=</span> WebConfigurationManager.<span style="color:#0000FF;">AppSettings</span>.<span style="color:#0000FF;">Get</span><span style="color:#000000;">(</span><span style="color:#666666;">"ClientSigningCertificatePath"</span><span style="color:#000000;">)</span><span style="color:#008000;">;</span>
        <span style="color:#0600FF;">private</span> <span style="color:#0600FF;">static</span> <span style="color:#0600FF;">readonly</span> <span style="color:#FF0000;">string</span> ClientSigningCertificatePassword <span style="color:#008000;">=</span> WebConfigurationManager.<span style="color:#0000FF;">AppSettings</span>.<span style="color:#0000FF;">Get</span><span style="color:#000000;">(</span><span style="color:#666666;">"ClientSigningCertificatePassword"</span><span style="color:#000000;">)</span><span style="color:#008000;">;</span>
        <span style="color:#0600FF;">private</span> <span style="color:#0600FF;">static</span> X509Certificate2 ClientCertificate <span style="color:#008000;">=</span> <span style="color:#000000;">(</span><span style="color:#FF0000;">string</span>.<span style="color:#0000FF;">IsNullOrEmpty</span><span style="color:#000000;">(</span>ClientSigningCertificatePath<span style="color:#000000;">)</span> <span style="color:#008000;">||</span> <span style="color:#FF0000;">string</span>.<span style="color:#0000FF;">IsNullOrEmpty</span><span style="color:#000000;">(</span>ClientSigningCertificatePassword<span style="color:#000000;">)</span><span style="color:#000000;">)</span> <span style="color:#008000;">?</span> <span style="color:#0600FF;">null</span> <span style="color:#008000;">:</span> <a href="http://www.google.com/search?q=new+msdn.microsoft.com"><span style="color:#008000;">new</span></a> X509Certificate2<span style="color:#000000;">(</span>ClientSigningCertificatePath, ClientSigningCertificatePassword<span style="color:#000000;">)</span><span style="color:#008000;">;</span>
        <span style="color:#0600FF;">private</span> <span style="color:#0600FF;">static</span> Microsoft.<span style="color:#0000FF;">IdentityModel</span>.<span style="color:#0000FF;">SecurityTokenService</span>.<span style="color:#0000FF;">X509SigningCredentials</span> SigningCredentials <span style="color:#008000;">=</span> <span style="color:#000000;">(</span>ClientCertificate <span style="color:#008000;">==</span> <span style="color:#0600FF;">null</span><span style="color:#000000;">)</span> <span style="color:#008000;">?</span> <span style="color:#0600FF;">null</span> <span style="color:#008000;">:</span> <a href="http://www.google.com/search?q=new+msdn.microsoft.com"><span style="color:#008000;">new</span></a> Microsoft.<span style="color:#0000FF;">IdentityModel</span>.<span style="color:#0000FF;">SecurityTokenService</span>.<span style="color:#0000FF;">X509SigningCredentials</span><span style="color:#000000;">(</span>ClientCertificate, SecurityAlgorithms.<span style="color:#0000FF;">RsaSha256Signature</span>, SecurityAlgorithms.<span style="color:#0000FF;">Sha256Digest</span><span style="color:#000000;">)</span><span style="color:#008000;">;</span>
&nbsp;
        <span style="color:#008080;">#endregion</span>
&nbsp;
        <span style="color:#008080;">#region private methods</span>
&nbsp;
        <span style="color:#0600FF;">private</span> <span style="color:#0600FF;">static</span> <span style="color:#FF0000;">string</span> GetAcsMetadataEndpointUrl<span style="color:#000000;">(</span><span style="color:#000000;">)</span>
        <span style="color:#000000;">{</span>
            <span style="color:#0600FF;">return</span> Path.<span style="color:#0000FF;">Combine</span><span style="color:#000000;">(</span>GetAcsGlobalEndpointUrl<span style="color:#000000;">(</span><span style="color:#000000;">)</span>, AcsMetadataEndPointRelativeUrl<span style="color:#000000;">)</span><span style="color:#008000;">;</span>
        <span style="color:#000000;">}</span>
&nbsp;
        <span style="color:#0600FF;">private</span> <span style="color:#0600FF;">static</span> <span style="color:#FF0000;">string</span> GetFormattedPrincipal<span style="color:#000000;">(</span><span style="color:#FF0000;">string</span> principalName, <span style="color:#FF0000;">string</span> hostName, <span style="color:#FF0000;">string</span> realm<span style="color:#000000;">)</span>
        <span style="color:#000000;">{</span>
            <span style="color:#0600FF;">if</span> <span style="color:#000000;">(</span><span style="color:#008000;">!</span><span style="color:#FF0000;">String</span>.<span style="color:#0000FF;">IsNullOrEmpty</span><span style="color:#000000;">(</span>hostName<span style="color:#000000;">)</span><span style="color:#000000;">)</span>
            <span style="color:#000000;">{</span>
                <span style="color:#0600FF;">return</span> <span style="color:#FF0000;">String</span>.<span style="color:#0000FF;">Format</span><span style="color:#000000;">(</span>CultureInfo.<span style="color:#0000FF;">InvariantCulture</span>, <span style="color:#666666;">"{0}/{1}@{2}"</span>, principalName, hostName, realm<span style="color:#000000;">)</span><span style="color:#008000;">;</span>
            <span style="color:#000000;">}</span>
            <span style="color:#0600FF;">else</span>
            <span style="color:#000000;">{</span>
                <span style="color:#0600FF;">return</span> <span style="color:#FF0000;">String</span>.<span style="color:#0000FF;">Format</span><span style="color:#000000;">(</span>CultureInfo.<span style="color:#0000FF;">InvariantCulture</span>, <span style="color:#666666;">"{0}@{1}"</span>, principalName, realm<span style="color:#000000;">)</span><span style="color:#008000;">;</span>
            <span style="color:#000000;">}</span>
        <span style="color:#000000;">}</span>
&nbsp;
        <span style="color:#0600FF;">private</span> <span style="color:#0600FF;">static</span> <span style="color:#FF0000;">string</span> GetAcsPrincipalName<span style="color:#000000;">(</span><span style="color:#FF0000;">string</span> realm<span style="color:#000000;">)</span>
        <span style="color:#000000;">{</span>
            <span style="color:#0600FF;">return</span> GetFormattedPrincipal<span style="color:#000000;">(</span>AcsPrincipalName, <a href="http://www.google.com/search?q=new+msdn.microsoft.com"><span style="color:#008000;">new</span></a> Uri<span style="color:#000000;">(</span>GetAcsGlobalEndpointUrl<span style="color:#000000;">(</span><span style="color:#000000;">)</span><span style="color:#000000;">)</span>.<span style="color:#0000FF;">Host</span>, realm<span style="color:#000000;">)</span><span style="color:#008000;">;</span>
        <span style="color:#000000;">}</span>
&nbsp;
        <span style="color:#0600FF;">private</span> <span style="color:#0600FF;">static</span> <span style="color:#FF0000;">string</span> GetAcsGlobalEndpointUrl<span style="color:#000000;">(</span><span style="color:#000000;">)</span>
        <span style="color:#000000;">{</span>
            <span style="color:#0600FF;">return</span> <span style="color:#FF0000;">String</span>.<span style="color:#0000FF;">Format</span><span style="color:#000000;">(</span>CultureInfo.<span style="color:#0000FF;">InvariantCulture</span>, <span style="color:#666666;">"https://{0}.{1}/"</span>, GlobalEndPointPrefix, AcsHostUrl<span style="color:#000000;">)</span><span style="color:#008000;">;</span>
        <span style="color:#000000;">}</span>
&nbsp;
        <span style="color:#0600FF;">private</span> <span style="color:#0600FF;">static</span> JsonWebSecurityTokenHandler CreateJsonWebSecurityTokenHandler<span style="color:#000000;">(</span><span style="color:#000000;">)</span>
        <span style="color:#000000;">{</span>
            JsonWebSecurityTokenHandler handler <span style="color:#008000;">=</span> <a href="http://www.google.com/search?q=new+msdn.microsoft.com"><span style="color:#008000;">new</span></a> JsonWebSecurityTokenHandler<span style="color:#000000;">(</span><span style="color:#000000;">)</span><span style="color:#008000;">;</span>
            handler.<span style="color:#0000FF;">Configuration</span> <span style="color:#008000;">=</span> <a href="http://www.google.com/search?q=new+msdn.microsoft.com"><span style="color:#008000;">new</span></a> Microsoft.<span style="color:#0000FF;">IdentityModel</span>.<span style="color:#0000FF;">Tokens</span>.<span style="color:#0000FF;">SecurityTokenHandlerConfiguration</span><span style="color:#000000;">(</span><span style="color:#000000;">)</span><span style="color:#008000;">;</span>
            handler.<span style="color:#0000FF;">Configuration</span>.<span style="color:#0000FF;">AudienceRestriction</span> <span style="color:#008000;">=</span> <a href="http://www.google.com/search?q=new+msdn.microsoft.com"><span style="color:#008000;">new</span></a> Microsoft.<span style="color:#0000FF;">IdentityModel</span>.<span style="color:#0000FF;">Tokens</span>.<span style="color:#0000FF;">AudienceRestriction</span><span style="color:#000000;">(</span>AudienceUriMode.<span style="color:#0000FF;">Never</span><span style="color:#000000;">)</span><span style="color:#008000;">;</span>
            handler.<span style="color:#0000FF;">Configuration</span>.<span style="color:#0000FF;">CertificateValidator</span> <span style="color:#008000;">=</span> X509CertificateValidator.<span style="color:#0000FF;">None</span><span style="color:#008000;">;</span>
&nbsp;
            <span style="color:#FF0000;">byte</span><span style="color:#000000;">[</span><span style="color:#000000;">]</span> key <span style="color:#008000;">=</span> Convert.<span style="color:#0000FF;">FromBase64String</span><span style="color:#000000;">(</span>ClientSecret<span style="color:#000000;">)</span><span style="color:#008000;">;</span>
            handler.<span style="color:#0000FF;">Configuration</span>.<span style="color:#0000FF;">IssuerTokenResolver</span> <span style="color:#008000;">=</span>
                SecurityTokenResolver.<span style="color:#0000FF;">CreateDefaultSecurityTokenResolver</span><span style="color:#000000;">(</span>
                <a href="http://www.google.com/search?q=new+msdn.microsoft.com"><span style="color:#008000;">new</span></a> ReadOnlyCollection<span style="color:#008000;">&lt;</span>SecurityToken<span style="color:#008000;">&gt;</span><span style="color:#000000;">(</span><a href="http://www.google.com/search?q=new+msdn.microsoft.com"><span style="color:#008000;">new</span></a> List<span style="color:#008000;">&lt;</span>SecurityToken<span style="color:#008000;">&gt;</span><span style="color:#000000;">(</span>
                    <a href="http://www.google.com/search?q=new+msdn.microsoft.com"><span style="color:#008000;">new</span></a> SecurityToken<span style="color:#000000;">[</span><span style="color:#000000;">]</span>
                            <span style="color:#000000;">{</span>
                                <a href="http://www.google.com/search?q=new+msdn.microsoft.com"><span style="color:#008000;">new</span></a> SimpleSymmetricKeySecurityToken<span style="color:#000000;">(</span> key <span style="color:#000000;">)</span>
                            <span style="color:#000000;">}</span><span style="color:#000000;">)</span><span style="color:#000000;">)</span>,
                <span style="color:#0600FF;">false</span><span style="color:#000000;">)</span><span style="color:#008000;">;</span>
            SymmetricKeyIssuerNameRegistry issuerNameRegistry <span style="color:#008000;">=</span> <a href="http://www.google.com/search?q=new+msdn.microsoft.com"><span style="color:#008000;">new</span></a> SymmetricKeyIssuerNameRegistry<span style="color:#000000;">(</span><span style="color:#000000;">)</span><span style="color:#008000;">;</span>
            issuerNameRegistry.<span style="color:#0000FF;">AddTrustedIssuer</span><span style="color:#000000;">(</span>key, GetAcsPrincipalName<span style="color:#000000;">(</span>ServiceNamespace<span style="color:#000000;">)</span><span style="color:#000000;">)</span><span style="color:#008000;">;</span>
            handler.<span style="color:#0000FF;">Configuration</span>.<span style="color:#0000FF;">IssuerNameRegistry</span> <span style="color:#008000;">=</span> issuerNameRegistry<span style="color:#008000;">;</span>
            <span style="color:#0600FF;">return</span> handler<span style="color:#008000;">;</span>
        <span style="color:#000000;">}</span>
&nbsp;
        <span style="color:#0600FF;">private</span> <span style="color:#0600FF;">static</span> <span style="color:#FF0000;">string</span> GetRealmFromTargetUrl<span style="color:#000000;">(</span>Uri targetApplicationUri<span style="color:#000000;">)</span>
        <span style="color:#000000;">{</span>
            WebRequest request <span style="color:#008000;">=</span> HttpWebRequest.<span style="color:#0000FF;">Create</span><span style="color:#000000;">(</span>targetApplicationUri.<span style="color:#0000FF;">ToString</span><span style="color:#000000;">(</span><span style="color:#000000;">)</span> <span style="color:#008000;">+</span> <span style="color:#666666;">"/_vti_bin/client.svc"</span><span style="color:#000000;">)</span><span style="color:#008000;">;</span>
            request.<span style="color:#0000FF;">Headers</span>.<span style="color:#0000FF;">Add</span><span style="color:#000000;">(</span><span style="color:#666666;">"Authorization: Bearer "</span><span style="color:#000000;">)</span><span style="color:#008000;">;</span>
&nbsp;
            <span style="color:#0600FF;">try</span>
            <span style="color:#000000;">{</span>
                <span style="color:#0600FF;">using</span> <span style="color:#000000;">(</span>WebResponse response <span style="color:#008000;">=</span> request.<span style="color:#0000FF;">GetResponse</span><span style="color:#000000;">(</span><span style="color:#000000;">)</span><span style="color:#000000;">)</span>
                <span style="color:#000000;">{</span>
                <span style="color:#000000;">}</span>
            <span style="color:#000000;">}</span>
            <span style="color:#0600FF;">catch</span> <span style="color:#000000;">(</span>WebException e<span style="color:#000000;">)</span>
            <span style="color:#000000;">{</span>
                <span style="color:#FF0000;">string</span> bearerResponseHeader <span style="color:#008000;">=</span> e.<span style="color:#0000FF;">Response</span>.<span style="color:#0000FF;">Headers</span><span style="color:#000000;">[</span><span style="color:#666666;">"WWW-Authenticate"</span><span style="color:#000000;">]</span><span style="color:#008000;">;</span>
                <span style="color:#FF0000;">string</span> realm <span style="color:#008000;">=</span> bearerResponseHeader.<span style="color:#0000FF;">Substring</span><span style="color:#000000;">(</span>bearerResponseHeader.<span style="color:#0000FF;">IndexOf</span><span style="color:#000000;">(</span><span style="color:#666666;">"Bearer realm=<span style="color:#008080;font-weight:bold;">\"</span>"</span><span style="color:#000000;">)</span> <span style="color:#008000;">+</span> <span style="color:#FF0000;">14</span>, <span style="color:#FF0000;">36</span><span style="color:#000000;">)</span><span style="color:#008000;">;</span>
&nbsp;
                Guid realmGuid<span style="color:#008000;">;</span>
&nbsp;
                <span style="color:#0600FF;">if</span> <span style="color:#000000;">(</span>Guid.<span style="color:#0000FF;">TryParse</span><span style="color:#000000;">(</span>realm, <span style="color:#0600FF;">out</span> realmGuid<span style="color:#000000;">)</span><span style="color:#000000;">)</span>
                <span style="color:#000000;">{</span>
                    <span style="color:#0600FF;">return</span> realm<span style="color:#008000;">;</span>
                <span style="color:#000000;">}</span>
&nbsp;
            <span style="color:#000000;">}</span>
            <span style="color:#0600FF;">return</span> null<span style="color:#008000;">;</span>
        <span style="color:#000000;">}</span>
&nbsp;
        <span style="color:#0600FF;">private</span> <span style="color:#0600FF;">static</span> <span style="color:#FF0000;">string</span> GetS2SAccessTokenWithClaims<span style="color:#000000;">(</span>
            <span style="color:#FF0000;">string</span> targetApplicationHostName,
            <span style="color:#FF0000;">string</span> targetRealm,
            IEnumerable<span style="color:#008000;">&lt;</span>JsonWebTokenClaim<span style="color:#008000;">&gt;</span> claims<span style="color:#000000;">)</span>
        <span style="color:#000000;">{</span>
            <span style="color:#0600FF;">return</span> IssueToken<span style="color:#000000;">(</span>
                ClientId,
                targetRealm,
                SHAREPOINT_PID,
                targetRealm,
                targetApplicationHostName,
                <span style="color:#0600FF;">true</span>,
                claims,
                <span style="color:#0600FF;">false</span><span style="color:#000000;">)</span><span style="color:#008000;">;</span>
        <span style="color:#000000;">}</span>
&nbsp;
        <span style="color:#0600FF;">private</span> <span style="color:#0600FF;">static</span> JsonWebTokenClaim<span style="color:#000000;">[</span><span style="color:#000000;">]</span> GetClaimsWithWindowsIdentity<span style="color:#000000;">(</span>WindowsIdentity identity<span style="color:#000000;">)</span>
        <span style="color:#000000;">{</span>
            JsonWebTokenClaim<span style="color:#000000;">[</span><span style="color:#000000;">]</span> claims <span style="color:#008000;">=</span> <a href="http://www.google.com/search?q=new+msdn.microsoft.com"><span style="color:#008000;">new</span></a> JsonWebTokenClaim<span style="color:#000000;">[</span><span style="color:#000000;">]</span>
            <span style="color:#000000;">{</span>
                <a href="http://www.google.com/search?q=new+msdn.microsoft.com"><span style="color:#008000;">new</span></a> JsonWebTokenClaim<span style="color:#000000;">(</span>TokenHelper.<span style="color:#0000FF;">NameIdentifierClaimType</span>, identity.<span style="color:#0000FF;">User</span>.<span style="color:#0000FF;">Value</span>.<span style="color:#0000FF;">ToLower</span><span style="color:#000000;">(</span><span style="color:#000000;">)</span><span style="color:#000000;">)</span>,
                <a href="http://www.google.com/search?q=new+msdn.microsoft.com"><span style="color:#008000;">new</span></a> JsonWebTokenClaim<span style="color:#000000;">(</span><span style="color:#666666;">"nii"</span>, <span style="color:#666666;">"urn:office:idp:activedirectory"</span><span style="color:#000000;">)</span>
            <span style="color:#000000;">}</span><span style="color:#008000;">;</span>
            <span style="color:#0600FF;">return</span> claims<span style="color:#008000;">;</span>
        <span style="color:#000000;">}</span>
&nbsp;
        <span style="color:#0600FF;">private</span> <span style="color:#0600FF;">static</span> <span style="color:#FF0000;">string</span> IssueToken<span style="color:#000000;">(</span>
            <span style="color:#FF0000;">string</span> sourceApplication,
            <span style="color:#FF0000;">string</span> sourceRealm,
            <span style="color:#FF0000;">string</span> targetApplication,
            <span style="color:#FF0000;">string</span> targetRealm,
            <span style="color:#FF0000;">string</span> targetApplicationHostName,
            <span style="color:#FF0000;">bool</span> trustedForDelegation,
            IEnumerable<span style="color:#008000;">&lt;</span>JsonWebTokenClaim<span style="color:#008000;">&gt;</span> claims,
            <span style="color:#FF0000;">bool</span> appOnly <span style="color:#008000;">=</span> <span style="color:#0600FF;">false</span><span style="color:#000000;">)</span>
        <span style="color:#000000;">{</span>
            <span style="color:#0600FF;">if</span> <span style="color:#000000;">(</span><span style="color:#0600FF;">null</span> <span style="color:#008000;">==</span> SigningCredentials<span style="color:#000000;">)</span>
            <span style="color:#000000;">{</span>
                <span style="color:#0600FF;">throw</span> <a href="http://www.google.com/search?q=new+msdn.microsoft.com"><span style="color:#008000;">new</span></a> InvalidOperationException<span style="color:#000000;">(</span><span style="color:#666666;">"SigningCredentials was not initialized"</span><span style="color:#000000;">)</span><span style="color:#008000;">;</span>
            <span style="color:#000000;">}</span>
&nbsp;
            <span style="color:#008080;">#region Actor token</span>
&nbsp;
            <span style="color:#FF0000;">string</span> sourceIdentifier <span style="color:#008000;">=</span> <span style="color:#FF0000;">string</span>.<span style="color:#0000FF;">IsNullOrEmpty</span><span style="color:#000000;">(</span>sourceRealm<span style="color:#000000;">)</span> <span style="color:#008000;">?</span> sourceApplication <span style="color:#008000;">:</span> <span style="color:#FF0000;">string</span>.<span style="color:#0000FF;">Format</span><span style="color:#000000;">(</span><span style="color:#666666;">"{0}@{1}"</span>, sourceApplication, sourceRealm<span style="color:#000000;">)</span><span style="color:#008000;">;</span>
&nbsp;
            <span style="color:#FF0000;">string</span> issuer <span style="color:#008000;">=</span> sourceIdentifier<span style="color:#008000;">;</span>
            <span style="color:#FF0000;">string</span> nameid <span style="color:#008000;">=</span> sourceIdentifier<span style="color:#008000;">;</span>
            <span style="color:#FF0000;">string</span> audience <span style="color:#008000;">=</span> <span style="color:#FF0000;">string</span>.<span style="color:#0000FF;">Format</span><span style="color:#000000;">(</span><span style="color:#666666;">"{0}/{1}@{2}"</span>, targetApplication, targetApplicationHostName, targetRealm<span style="color:#000000;">)</span><span style="color:#008000;">;</span>
&nbsp;
            List<span style="color:#008000;">&lt;</span>JsonWebTokenClaim<span style="color:#008000;">&gt;</span> actorClaims <span style="color:#008000;">=</span> <a href="http://www.google.com/search?q=new+msdn.microsoft.com"><span style="color:#008000;">new</span></a> List<span style="color:#008000;">&lt;</span>JsonWebTokenClaim<span style="color:#008000;">&gt;</span><span style="color:#000000;">(</span><span style="color:#000000;">)</span><span style="color:#008000;">;</span>
            actorClaims.<span style="color:#0000FF;">Add</span><span style="color:#000000;">(</span><a href="http://www.google.com/search?q=new+msdn.microsoft.com"><span style="color:#008000;">new</span></a> JsonWebTokenClaim<span style="color:#000000;">(</span>JsonWebTokenConstants.<span style="color:#0000FF;">ReservedClaims</span>.<span style="color:#0000FF;">NameIdentifier</span>, issuer<span style="color:#000000;">)</span><span style="color:#000000;">)</span><span style="color:#008000;">;</span>
            <span style="color:#0600FF;">if</span> <span style="color:#000000;">(</span>trustedForDelegation <span style="color:#008000;">&amp;&amp;</span> <span style="color:#008000;">!</span>appOnly<span style="color:#000000;">)</span>
            <span style="color:#000000;">{</span>
                actorClaims.<span style="color:#0000FF;">Add</span><span style="color:#000000;">(</span><a href="http://www.google.com/search?q=new+msdn.microsoft.com"><span style="color:#008000;">new</span></a> JsonWebTokenClaim<span style="color:#000000;">(</span>TokenHelper.<span style="color:#0000FF;">TrustedForImpersonationClaimType</span>, <span style="color:#666666;">"true"</span><span style="color:#000000;">)</span><span style="color:#000000;">)</span><span style="color:#008000;">;</span>
            <span style="color:#000000;">}</span>
&nbsp;
            <span style="color:#008080;font-style:italic;">// Create token</span>
            JsonWebSecurityToken actorToken <span style="color:#008000;">=</span> <a href="http://www.google.com/search?q=new+msdn.microsoft.com"><span style="color:#008000;">new</span></a> JsonWebSecurityToken<span style="color:#000000;">(</span>
                issuer<span style="color:#008000;">:</span> issuer,
                audience<span style="color:#008000;">:</span> audience,
                validFrom<span style="color:#008000;">:</span> DateTime.<span style="color:#0000FF;">UtcNow</span>,
                validTo<span style="color:#008000;">:</span> DateTime.<span style="color:#0000FF;">UtcNow</span>.<span style="color:#0000FF;">AddMinutes</span><span style="color:#000000;">(</span>TokenLifetimeMinutes<span style="color:#000000;">)</span>,
                signingCredentials<span style="color:#008000;">:</span> SigningCredentials,
                claims<span style="color:#008000;">:</span> actorClaims<span style="color:#000000;">)</span><span style="color:#008000;">;</span>
&nbsp;
            <span style="color:#FF0000;">string</span> actorTokenString <span style="color:#008000;">=</span> <a href="http://www.google.com/search?q=new+msdn.microsoft.com"><span style="color:#008000;">new</span></a> JsonWebSecurityTokenHandler<span style="color:#000000;">(</span><span style="color:#000000;">)</span>.<span style="color:#0000FF;">WriteTokenAsString</span><span style="color:#000000;">(</span>actorToken<span style="color:#000000;">)</span><span style="color:#008000;">;</span>
&nbsp;
            <span style="color:#0600FF;">if</span> <span style="color:#000000;">(</span>appOnly<span style="color:#000000;">)</span>
            <span style="color:#000000;">{</span>
                <span style="color:#008080;font-style:italic;">// App-only token is the same as actor token for delegated case</span>
                <span style="color:#0600FF;">return</span> actorTokenString<span style="color:#008000;">;</span>
            <span style="color:#000000;">}</span>
&nbsp;
            <span style="color:#008080;">#endregion Actor token</span>
&nbsp;
            <span style="color:#008080;">#region Outer token</span>
&nbsp;
            List<span style="color:#008000;">&lt;</span>JsonWebTokenClaim<span style="color:#008000;">&gt;</span> outerClaims <span style="color:#008000;">=</span> <span style="color:#0600FF;">null</span> <span style="color:#008000;">==</span> claims <span style="color:#008000;">?</span> <a href="http://www.google.com/search?q=new+msdn.microsoft.com"><span style="color:#008000;">new</span></a> List<span style="color:#008000;">&lt;</span>JsonWebTokenClaim<span style="color:#008000;">&gt;</span><span style="color:#000000;">(</span><span style="color:#000000;">)</span> <span style="color:#008000;">:</span> <a href="http://www.google.com/search?q=new+msdn.microsoft.com"><span style="color:#008000;">new</span></a> List<span style="color:#008000;">&lt;</span>JsonWebTokenClaim<span style="color:#008000;">&gt;</span><span style="color:#000000;">(</span>claims<span style="color:#000000;">)</span><span style="color:#008000;">;</span>
            outerClaims.<span style="color:#0000FF;">Add</span><span style="color:#000000;">(</span><a href="http://www.google.com/search?q=new+msdn.microsoft.com"><span style="color:#008000;">new</span></a> JsonWebTokenClaim<span style="color:#000000;">(</span>ActorTokenClaimType, actorTokenString<span style="color:#000000;">)</span><span style="color:#000000;">)</span><span style="color:#008000;">;</span>
&nbsp;
            JsonWebSecurityToken jsonToken <span style="color:#008000;">=</span> <a href="http://www.google.com/search?q=new+msdn.microsoft.com"><span style="color:#008000;">new</span></a> JsonWebSecurityToken<span style="color:#000000;">(</span>
                issuer,
                audience,
                DateTime.<span style="color:#0000FF;">UtcNow</span>,
                DateTime.<span style="color:#0000FF;">UtcNow</span>.<span style="color:#0000FF;">AddMinutes</span><span style="color:#000000;">(</span><span style="color:#FF0000;">10</span><span style="color:#000000;">)</span>,
                outerClaims<span style="color:#000000;">)</span><span style="color:#008000;">;</span>
&nbsp;
            <span style="color:#FF0000;">string</span> accessToken <span style="color:#008000;">=</span> <a href="http://www.google.com/search?q=new+msdn.microsoft.com"><span style="color:#008000;">new</span></a> JsonWebSecurityTokenHandler<span style="color:#000000;">(</span><span style="color:#000000;">)</span>.<span style="color:#0000FF;">WriteTokenAsString</span><span style="color:#000000;">(</span>jsonToken<span style="color:#000000;">)</span><span style="color:#008000;">;</span>
&nbsp;
            <span style="color:#008080;">#endregion Outer token</span>
&nbsp;
            <span style="color:#0600FF;">return</span> accessToken<span style="color:#008000;">;</span>
        <span style="color:#000000;">}</span>
&nbsp;
        <span style="color:#0600FF;">private</span> <span style="color:#0600FF;">static</span> <span style="color:#FF0000;">string</span> EnsureTrailingSlash<span style="color:#000000;">(</span><span style="color:#FF0000;">string</span> url<span style="color:#000000;">)</span>
        <span style="color:#000000;">{</span>
            <span style="color:#0600FF;">if</span> <span style="color:#000000;">(</span><span style="color:#008000;">!</span><span style="color:#FF0000;">String</span>.<span style="color:#0000FF;">IsNullOrEmpty</span><span style="color:#000000;">(</span>url<span style="color:#000000;">)</span> <span style="color:#008000;">&amp;&amp;</span> url<span style="color:#000000;">[</span>url.<span style="color:#0000FF;">Length</span> <span style="color:#008000;">-</span> <span style="color:#FF0000;">1</span><span style="color:#000000;">]</span> <span style="color:#008000;">!=</span> <span style="color:#666666;">'/'</span><span style="color:#000000;">)</span>
            <span style="color:#000000;">{</span>
                <span style="color:#0600FF;">return</span> url <span style="color:#008000;">+</span> <span style="color:#666666;">"/"</span><span style="color:#008000;">;</span>
            <span style="color:#000000;">}</span>
            <span style="color:#0600FF;">else</span>
            <span style="color:#000000;">{</span>
                <span style="color:#0600FF;">return</span> url<span style="color:#008000;">;</span>
            <span style="color:#000000;">}</span>
        <span style="color:#000000;">}</span>
&nbsp;
        <span style="color:#008080;">#endregion</span>
&nbsp;
        <span style="color:#008080;">#region AcsMetadataParser</span>
&nbsp;
        <span style="color:#008080;font-style:italic;">// This class is used to get MetaData document from the global STS endpoint. It contains</span>
        <span style="color:#008080;font-style:italic;">// methods to parse the MetaData document and get endpoints and STS certificate.</span>
        <span style="color:#0600FF;">public</span> <span style="color:#0600FF;">static</span> <span style="color:#FF0000;">class</span> AcsMetadataParser
        <span style="color:#000000;">{</span>
            <span style="color:#0600FF;">public</span> <span style="color:#0600FF;">static</span> X509Certificate2 GetAcsSigningCert<span style="color:#000000;">(</span><span style="color:#FF0000;">string</span> realm<span style="color:#000000;">)</span>
            <span style="color:#000000;">{</span>
                JsonMetadataDocument document <span style="color:#008000;">=</span> GetMetadataDocument<span style="color:#000000;">(</span>realm<span style="color:#000000;">)</span><span style="color:#008000;">;</span>
&nbsp;
                <span style="color:#0600FF;">if</span> <span style="color:#000000;">(</span><span style="color:#0600FF;">null</span> <span style="color:#008000;">!=</span> document.<span style="color:#0000FF;">keys</span> <span style="color:#008000;">&amp;&amp;</span> document.<span style="color:#0000FF;">keys</span>.<span style="color:#0000FF;">Count</span> <span style="color:#008000;">&gt;</span> <span style="color:#FF0000;">0</span><span style="color:#000000;">)</span>
                <span style="color:#000000;">{</span>
                    JsonKey signingKey <span style="color:#008000;">=</span> document.<span style="color:#0000FF;">keys</span><span style="color:#000000;">[</span><span style="color:#FF0000;">0</span><span style="color:#000000;">]</span><span style="color:#008000;">;</span>
&nbsp;
                    <span style="color:#0600FF;">if</span> <span style="color:#000000;">(</span><span style="color:#0600FF;">null</span> <span style="color:#008000;">!=</span> signingKey <span style="color:#008000;">&amp;&amp;</span> <span style="color:#0600FF;">null</span> <span style="color:#008000;">!=</span> signingKey.<span style="color:#0000FF;">keyValue</span><span style="color:#000000;">)</span>
                    <span style="color:#000000;">{</span>
                        <span style="color:#0600FF;">return</span> <a href="http://www.google.com/search?q=new+msdn.microsoft.com"><span style="color:#008000;">new</span></a> X509Certificate2<span style="color:#000000;">(</span>Encoding.<span style="color:#0000FF;">UTF8</span>.<span style="color:#0000FF;">GetBytes</span><span style="color:#000000;">(</span>signingKey.<span style="color:#0000FF;">keyValue</span>.<span style="color:#0000FF;">value</span><span style="color:#000000;">)</span><span style="color:#000000;">)</span><span style="color:#008000;">;</span>
                    <span style="color:#000000;">}</span>
                <span style="color:#000000;">}</span>
&nbsp;
                <span style="color:#0600FF;">throw</span> <a href="http://www.google.com/search?q=new+msdn.microsoft.com"><span style="color:#008000;">new</span></a> Exception<span style="color:#000000;">(</span><span style="color:#666666;">"Metadata document does not contain ACS signing certificate."</span><span style="color:#000000;">)</span><span style="color:#008000;">;</span>
            <span style="color:#000000;">}</span>
&nbsp;
            <span style="color:#0600FF;">public</span> <span style="color:#0600FF;">static</span> <span style="color:#FF0000;">string</span> GetDelegationServiceUrl<span style="color:#000000;">(</span><span style="color:#FF0000;">string</span> realm<span style="color:#000000;">)</span>
            <span style="color:#000000;">{</span>
                JsonMetadataDocument document <span style="color:#008000;">=</span> GetMetadataDocument<span style="color:#000000;">(</span>realm<span style="color:#000000;">)</span><span style="color:#008000;">;</span>
&nbsp;
                JsonEndpoint delegationEndpoint <span style="color:#008000;">=</span> document.<span style="color:#0000FF;">endpoints</span>.<span style="color:#0000FF;">SingleOrDefault</span><span style="color:#000000;">(</span>e <span style="color:#008000;">=&gt;</span> e.<span style="color:#0000FF;">protocol</span> <span style="color:#008000;">==</span> DelegationIssuance<span style="color:#000000;">)</span><span style="color:#008000;">;</span>
&nbsp;
                <span style="color:#0600FF;">if</span> <span style="color:#000000;">(</span><span style="color:#0600FF;">null</span> <span style="color:#008000;">!=</span> delegationEndpoint<span style="color:#000000;">)</span>
                <span style="color:#000000;">{</span>
                    <span style="color:#0600FF;">return</span> delegationEndpoint.<span style="color:#0000FF;">location</span><span style="color:#008000;">;</span>
                <span style="color:#000000;">}</span>
                <span style="color:#0600FF;">else</span>
                <span style="color:#000000;">{</span>
                    <span style="color:#0600FF;">throw</span> <a href="http://www.google.com/search?q=new+msdn.microsoft.com"><span style="color:#008000;">new</span></a> Exception<span style="color:#000000;">(</span><span style="color:#666666;">"Metadata document does not contain Delegation Service endpoint Url"</span><span style="color:#000000;">)</span><span style="color:#008000;">;</span>
                <span style="color:#000000;">}</span>
            <span style="color:#000000;">}</span>
&nbsp;
            <span style="color:#0600FF;">private</span> <span style="color:#0600FF;">static</span> JsonMetadataDocument GetMetadataDocument<span style="color:#000000;">(</span><span style="color:#FF0000;">string</span> realm<span style="color:#000000;">)</span>
            <span style="color:#000000;">{</span>
                <span style="color:#FF0000;">string</span> acsMetadataEndpointUrlWithRealm <span style="color:#008000;">=</span> <span style="color:#FF0000;">String</span>.<span style="color:#0000FF;">Format</span><span style="color:#000000;">(</span>CultureInfo.<span style="color:#0000FF;">InvariantCulture</span>, <span style="color:#666666;">"{0}?realm={1}"</span>,
                                                                        GetAcsMetadataEndpointUrl<span style="color:#000000;">(</span><span style="color:#000000;">)</span>,
                                                                        realm<span style="color:#000000;">)</span><span style="color:#008000;">;</span>
                <span style="color:#FF0000;">byte</span><span style="color:#000000;">[</span><span style="color:#000000;">]</span> acsMetadata<span style="color:#008000;">;</span>
                <span style="color:#0600FF;">using</span> <span style="color:#000000;">(</span>WebClient webClient <span style="color:#008000;">=</span> <a href="http://www.google.com/search?q=new+msdn.microsoft.com"><span style="color:#008000;">new</span></a> WebClient<span style="color:#000000;">(</span><span style="color:#000000;">)</span><span style="color:#000000;">)</span>
                <span style="color:#000000;">{</span>
&nbsp;
                    acsMetadata <span style="color:#008000;">=</span> webClient.<span style="color:#0000FF;">DownloadData</span><span style="color:#000000;">(</span>acsMetadataEndpointUrlWithRealm<span style="color:#000000;">)</span><span style="color:#008000;">;</span>
                <span style="color:#000000;">}</span>
                <span style="color:#FF0000;">string</span> jsonResponseString <span style="color:#008000;">=</span> Encoding.<span style="color:#0000FF;">UTF8</span>.<span style="color:#0000FF;">GetString</span><span style="color:#000000;">(</span>acsMetadata<span style="color:#000000;">)</span><span style="color:#008000;">;</span>
&nbsp;
                JavaScriptSerializer serializer <span style="color:#008000;">=</span> <a href="http://www.google.com/search?q=new+msdn.microsoft.com"><span style="color:#008000;">new</span></a> JavaScriptSerializer<span style="color:#000000;">(</span><span style="color:#000000;">)</span><span style="color:#008000;">;</span>
                JsonMetadataDocument document <span style="color:#008000;">=</span> serializer.<span style="color:#0000FF;">Deserialize</span><span style="color:#008000;">&lt;</span>JsonMetadataDocument<span style="color:#008000;">&gt;</span><span style="color:#000000;">(</span>jsonResponseString<span style="color:#000000;">)</span><span style="color:#008000;">;</span>
&nbsp;
                <span style="color:#0600FF;">if</span> <span style="color:#000000;">(</span><span style="color:#0600FF;">null</span> <span style="color:#008000;">==</span> document<span style="color:#000000;">)</span>
                <span style="color:#000000;">{</span>
                    <span style="color:#0600FF;">throw</span> <a href="http://www.google.com/search?q=new+msdn.microsoft.com"><span style="color:#008000;">new</span></a> Exception<span style="color:#000000;">(</span><span style="color:#666666;">"No metadata document found at the global endpoint "</span> <span style="color:#008000;">+</span> acsMetadataEndpointUrlWithRealm<span style="color:#000000;">)</span><span style="color:#008000;">;</span>
                <span style="color:#000000;">}</span>
&nbsp;
                <span style="color:#0600FF;">return</span> document<span style="color:#008000;">;</span>
            <span style="color:#000000;">}</span>
&nbsp;
            <span style="color:#0600FF;">public</span> <span style="color:#0600FF;">static</span> <span style="color:#FF0000;">string</span> GetStsUrl<span style="color:#000000;">(</span><span style="color:#FF0000;">string</span> realm<span style="color:#000000;">)</span>
            <span style="color:#000000;">{</span>
                JsonMetadataDocument document <span style="color:#008000;">=</span> GetMetadataDocument<span style="color:#000000;">(</span>realm<span style="color:#000000;">)</span><span style="color:#008000;">;</span>
&nbsp;
                JsonEndpoint s2sEndpoint <span style="color:#008000;">=</span> document.<span style="color:#0000FF;">endpoints</span>.<span style="color:#0000FF;">SingleOrDefault</span><span style="color:#000000;">(</span>e <span style="color:#008000;">=&gt;</span> e.<span style="color:#0000FF;">protocol</span> <span style="color:#008000;">==</span> S2SProtocol<span style="color:#000000;">)</span><span style="color:#008000;">;</span>
&nbsp;
                <span style="color:#0600FF;">if</span> <span style="color:#000000;">(</span><span style="color:#0600FF;">null</span> <span style="color:#008000;">!=</span> s2sEndpoint<span style="color:#000000;">)</span>
                <span style="color:#000000;">{</span>
                    <span style="color:#0600FF;">return</span> s2sEndpoint.<span style="color:#0000FF;">location</span><span style="color:#008000;">;</span>
                <span style="color:#000000;">}</span>
                <span style="color:#0600FF;">else</span>
                <span style="color:#000000;">{</span>
                    <span style="color:#0600FF;">throw</span> <a href="http://www.google.com/search?q=new+msdn.microsoft.com"><span style="color:#008000;">new</span></a> Exception<span style="color:#000000;">(</span><span style="color:#666666;">"Metadata document does not contain STS endpoint url"</span><span style="color:#000000;">)</span><span style="color:#008000;">;</span>
                <span style="color:#000000;">}</span>
            <span style="color:#000000;">}</span>
&nbsp;
            <span style="color:#0600FF;">private</span> <span style="color:#FF0000;">class</span> JsonMetadataDocument
            <span style="color:#000000;">{</span>
                <span style="color:#0600FF;">public</span> <span style="color:#FF0000;">string</span> serviceName <span style="color:#000000;">{</span> get<span style="color:#008000;">;</span> set<span style="color:#008000;">;</span> <span style="color:#000000;">}</span>
                <span style="color:#0600FF;">public</span> List<span style="color:#008000;">&lt;</span>JsonEndpoint<span style="color:#008000;">&gt;</span> endpoints <span style="color:#000000;">{</span> get<span style="color:#008000;">;</span> set<span style="color:#008000;">;</span> <span style="color:#000000;">}</span>
                <span style="color:#0600FF;">public</span> List<span style="color:#008000;">&lt;</span>JsonKey<span style="color:#008000;">&gt;</span> keys <span style="color:#000000;">{</span> get<span style="color:#008000;">;</span> set<span style="color:#008000;">;</span> <span style="color:#000000;">}</span>
            <span style="color:#000000;">}</span>
&nbsp;
            <span style="color:#0600FF;">private</span> <span style="color:#FF0000;">class</span> JsonEndpoint
            <span style="color:#000000;">{</span>
                <span style="color:#0600FF;">public</span> <span style="color:#FF0000;">string</span> location <span style="color:#000000;">{</span> get<span style="color:#008000;">;</span> set<span style="color:#008000;">;</span> <span style="color:#000000;">}</span>
                <span style="color:#0600FF;">public</span> <span style="color:#FF0000;">string</span> protocol <span style="color:#000000;">{</span> get<span style="color:#008000;">;</span> set<span style="color:#008000;">;</span> <span style="color:#000000;">}</span>
                <span style="color:#0600FF;">public</span> <span style="color:#FF0000;">string</span> usage <span style="color:#000000;">{</span> get<span style="color:#008000;">;</span> set<span style="color:#008000;">;</span> <span style="color:#000000;">}</span>
            <span style="color:#000000;">}</span>
&nbsp;
            <span style="color:#0600FF;">private</span> <span style="color:#FF0000;">class</span> JsonKeyValue
            <span style="color:#000000;">{</span>
                <span style="color:#0600FF;">public</span> <span style="color:#FF0000;">string</span> type <span style="color:#000000;">{</span> get<span style="color:#008000;">;</span> set<span style="color:#008000;">;</span> <span style="color:#000000;">}</span>
                <span style="color:#0600FF;">public</span> <span style="color:#FF0000;">string</span> value <span style="color:#000000;">{</span> get<span style="color:#008000;">;</span> set<span style="color:#008000;">;</span> <span style="color:#000000;">}</span>
            <span style="color:#000000;">}</span>
&nbsp;
            <span style="color:#0600FF;">private</span> <span style="color:#FF0000;">class</span> JsonKey
            <span style="color:#000000;">{</span>
                <span style="color:#0600FF;">public</span> <span style="color:#FF0000;">string</span> usage <span style="color:#000000;">{</span> get<span style="color:#008000;">;</span> set<span style="color:#008000;">;</span> <span style="color:#000000;">}</span>
                <span style="color:#0600FF;">public</span> JsonKeyValue keyValue <span style="color:#000000;">{</span> get<span style="color:#008000;">;</span> set<span style="color:#008000;">;</span> <span style="color:#000000;">}</span>
            <span style="color:#000000;">}</span>
        <span style="color:#000000;">}</span>
&nbsp;
        <span style="color:#008080;">#endregion</span>
    <span style="color:#000000;">}</span>
&nbsp;
    <span style="color:#008080;font-style:italic;">/// &lt;summary&gt;</span>
    <span style="color:#008080;font-style:italic;">/// A JsonWebSecurityToken generated by SharePoint to authenticate to a 3rd party application and allow callbacks using a refresh token</span>
    <span style="color:#008080;font-style:italic;">/// &lt;/summary&gt;</span>
    <span style="color:#0600FF;">public</span> <span style="color:#FF0000;">class</span> SharePointContextToken <span style="color:#008000;">:</span> JsonWebSecurityToken
    <span style="color:#000000;">{</span>
        <span style="color:#0600FF;">public</span> <span style="color:#0600FF;">static</span> SharePointContextToken Create<span style="color:#000000;">(</span>JsonWebSecurityToken contextToken<span style="color:#000000;">)</span>
        <span style="color:#000000;">{</span>
            <span style="color:#0600FF;">return</span> <a href="http://www.google.com/search?q=new+msdn.microsoft.com"><span style="color:#008000;">new</span></a> SharePointContextToken<span style="color:#000000;">(</span>contextToken.<span style="color:#0000FF;">Issuer</span>, contextToken.<span style="color:#0000FF;">Audience</span>, contextToken.<span style="color:#0000FF;">ValidFrom</span>, contextToken.<span style="color:#0000FF;">ValidTo</span>, contextToken.<span style="color:#0000FF;">Claims</span><span style="color:#000000;">)</span><span style="color:#008000;">;</span>
        <span style="color:#000000;">}</span>
&nbsp;
        <span style="color:#0600FF;">public</span> SharePointContextToken<span style="color:#000000;">(</span><span style="color:#FF0000;">string</span> issuer, <span style="color:#FF0000;">string</span> audience, DateTime validFrom, DateTime validTo, IEnumerable<span style="color:#008000;">&lt;</span>JsonWebTokenClaim<span style="color:#008000;">&gt;</span> claims<span style="color:#000000;">)</span>
            <span style="color:#008000;">:</span> <span style="color:#0600FF;">base</span><span style="color:#000000;">(</span>issuer, audience, validFrom, validTo, claims<span style="color:#000000;">)</span>
        <span style="color:#000000;">{</span>
        <span style="color:#000000;">}</span>
&nbsp;
        <span style="color:#0600FF;">public</span> SharePointContextToken<span style="color:#000000;">(</span><span style="color:#FF0000;">string</span> issuer, <span style="color:#FF0000;">string</span> audience, DateTime validFrom, DateTime validTo, IEnumerable<span style="color:#008000;">&lt;</span>JsonWebTokenClaim<span style="color:#008000;">&gt;</span> claims, SecurityToken issuerToken, JsonWebSecurityToken actorToken<span style="color:#000000;">)</span>
            <span style="color:#008000;">:</span> <span style="color:#0600FF;">base</span><span style="color:#000000;">(</span>issuer, audience, validFrom, validTo, claims, issuerToken, actorToken<span style="color:#000000;">)</span>
        <span style="color:#000000;">{</span>
        <span style="color:#000000;">}</span>
&nbsp;
        <span style="color:#0600FF;">public</span> SharePointContextToken<span style="color:#000000;">(</span><span style="color:#FF0000;">string</span> issuer, <span style="color:#FF0000;">string</span> audience, DateTime validFrom, DateTime validTo, IEnumerable<span style="color:#008000;">&lt;</span>JsonWebTokenClaim<span style="color:#008000;">&gt;</span> claims, SigningCredentials signingCredentials<span style="color:#000000;">)</span>
            <span style="color:#008000;">:</span> <span style="color:#0600FF;">base</span><span style="color:#000000;">(</span>issuer, audience, validFrom, validTo, claims, signingCredentials<span style="color:#000000;">)</span>
        <span style="color:#000000;">{</span>
        <span style="color:#000000;">}</span>
&nbsp;
        <span style="color:#0600FF;">public</span> <span style="color:#FF0000;">string</span> NameId
        <span style="color:#000000;">{</span>
            get
            <span style="color:#000000;">{</span>
                <span style="color:#0600FF;">return</span> GetClaimValue<span style="color:#000000;">(</span><span style="color:#0600FF;">this</span>, <span style="color:#666666;">"nameid"</span><span style="color:#000000;">)</span><span style="color:#008000;">;</span>
            <span style="color:#000000;">}</span>
        <span style="color:#000000;">}</span>
&nbsp;
        <span style="color:#008080;font-style:italic;">/// &lt;summary&gt;</span>
        <span style="color:#008080;font-style:italic;">/// The principal name portion of the context token's "appctxsender" claim</span>
        <span style="color:#008080;font-style:italic;">/// &lt;/summary&gt;</span>
        <span style="color:#0600FF;">public</span> <span style="color:#FF0000;">string</span> TargetPrincipalName
        <span style="color:#000000;">{</span>
            get
            <span style="color:#000000;">{</span>
                <span style="color:#FF0000;">string</span> appctxsender <span style="color:#008000;">=</span> GetClaimValue<span style="color:#000000;">(</span><span style="color:#0600FF;">this</span>, <span style="color:#666666;">"appctxsender"</span><span style="color:#000000;">)</span><span style="color:#008000;">;</span>
&nbsp;
                <span style="color:#0600FF;">if</span> <span style="color:#000000;">(</span>appctxsender <span style="color:#008000;">==</span> <span style="color:#0600FF;">null</span><span style="color:#000000;">)</span>
                <span style="color:#000000;">{</span>
                    <span style="color:#0600FF;">return</span> null<span style="color:#008000;">;</span>
                <span style="color:#000000;">}</span>
&nbsp;
                <span style="color:#0600FF;">return</span> appctxsender.<span style="color:#0000FF;">Split</span><span style="color:#000000;">(</span><span style="color:#666666;">'@'</span><span style="color:#000000;">)</span><span style="color:#000000;">[</span><span style="color:#FF0000;">0</span><span style="color:#000000;">]</span><span style="color:#008000;">;</span>
            <span style="color:#000000;">}</span>
        <span style="color:#000000;">}</span>
&nbsp;
        <span style="color:#008080;font-style:italic;">/// &lt;summary&gt;</span>
        <span style="color:#008080;font-style:italic;">/// The context token's "refreshtoken" claim</span>
        <span style="color:#008080;font-style:italic;">/// &lt;/summary&gt;</span>
        <span style="color:#0600FF;">public</span> <span style="color:#FF0000;">string</span> RefreshToken
        <span style="color:#000000;">{</span>
            get
            <span style="color:#000000;">{</span>
                <span style="color:#0600FF;">return</span> GetClaimValue<span style="color:#000000;">(</span><span style="color:#0600FF;">this</span>, <span style="color:#666666;">"refreshtoken"</span><span style="color:#000000;">)</span><span style="color:#008000;">;</span>
            <span style="color:#000000;">}</span>
        <span style="color:#000000;">}</span>
&nbsp;
        <span style="color:#008080;font-style:italic;">/// &lt;summary&gt;</span>
        <span style="color:#008080;font-style:italic;">/// The context token's "CacheKey" claim</span>
        <span style="color:#008080;font-style:italic;">/// &lt;/summary&gt;</span>
        <span style="color:#0600FF;">public</span> <span style="color:#FF0000;">string</span> CacheKey
        <span style="color:#000000;">{</span>
            get
            <span style="color:#000000;">{</span>
                <span style="color:#FF0000;">string</span> appctx <span style="color:#008000;">=</span> GetClaimValue<span style="color:#000000;">(</span><span style="color:#0600FF;">this</span>, <span style="color:#666666;">"appctx"</span><span style="color:#000000;">)</span><span style="color:#008000;">;</span>
                <span style="color:#0600FF;">if</span> <span style="color:#000000;">(</span>appctx <span style="color:#008000;">==</span> <span style="color:#0600FF;">null</span><span style="color:#000000;">)</span>
                <span style="color:#000000;">{</span>
                    <span style="color:#0600FF;">return</span> null<span style="color:#008000;">;</span>
                <span style="color:#000000;">}</span>
&nbsp;
                ClientContext ctx <span style="color:#008000;">=</span> <a href="http://www.google.com/search?q=new+msdn.microsoft.com"><span style="color:#008000;">new</span></a> ClientContext<span style="color:#000000;">(</span><span style="color:#666666;">"http://tempuri.org"</span><span style="color:#000000;">)</span><span style="color:#008000;">;</span>
                Dictionary<span style="color:#008000;">&lt;</span><span style="color:#FF0000;">string</span>, <span style="color:#FF0000;">object</span><span style="color:#008000;">&gt;</span> dict <span style="color:#008000;">=</span> <span style="color:#000000;">(</span>Dictionary<span style="color:#008000;">&lt;</span><span style="color:#FF0000;">string</span>, <span style="color:#FF0000;">object</span><span style="color:#008000;">&gt;</span><span style="color:#000000;">)</span>ctx.<span style="color:#0000FF;">ParseObjectFromJsonString</span><span style="color:#000000;">(</span>appctx<span style="color:#000000;">)</span><span style="color:#008000;">;</span>
                <span style="color:#FF0000;">string</span> cacheKey <span style="color:#008000;">=</span> <span style="color:#000000;">(</span><span style="color:#FF0000;">string</span><span style="color:#000000;">)</span>dict<span style="color:#000000;">[</span><span style="color:#666666;">"CacheKey"</span><span style="color:#000000;">]</span><span style="color:#008000;">;</span>
&nbsp;
                <span style="color:#0600FF;">return</span> cacheKey<span style="color:#008000;">;</span>
            <span style="color:#000000;">}</span>
        <span style="color:#000000;">}</span>
&nbsp;
        <span style="color:#008080;font-style:italic;">/// &lt;summary&gt;</span>
        <span style="color:#008080;font-style:italic;">/// The context token's "SecurityTokenServiceUri" claim</span>
        <span style="color:#008080;font-style:italic;">/// &lt;/summary&gt;</span>
        <span style="color:#0600FF;">public</span> <span style="color:#FF0000;">string</span> SecurityTokenServiceUri
        <span style="color:#000000;">{</span>
            get
            <span style="color:#000000;">{</span>
                <span style="color:#FF0000;">string</span> appctx <span style="color:#008000;">=</span> GetClaimValue<span style="color:#000000;">(</span><span style="color:#0600FF;">this</span>, <span style="color:#666666;">"appctx"</span><span style="color:#000000;">)</span><span style="color:#008000;">;</span>
                <span style="color:#0600FF;">if</span> <span style="color:#000000;">(</span>appctx <span style="color:#008000;">==</span> <span style="color:#0600FF;">null</span><span style="color:#000000;">)</span>
                <span style="color:#000000;">{</span>
                    <span style="color:#0600FF;">return</span> null<span style="color:#008000;">;</span>
                <span style="color:#000000;">}</span>
&nbsp;
                ClientContext ctx <span style="color:#008000;">=</span> <a href="http://www.google.com/search?q=new+msdn.microsoft.com"><span style="color:#008000;">new</span></a> ClientContext<span style="color:#000000;">(</span><span style="color:#666666;">"http://tempuri.org"</span><span style="color:#000000;">)</span><span style="color:#008000;">;</span>
                Dictionary<span style="color:#008000;">&lt;</span><span style="color:#FF0000;">string</span>, <span style="color:#FF0000;">object</span><span style="color:#008000;">&gt;</span> dict <span style="color:#008000;">=</span> <span style="color:#000000;">(</span>Dictionary<span style="color:#008000;">&lt;</span><span style="color:#FF0000;">string</span>, <span style="color:#FF0000;">object</span><span style="color:#008000;">&gt;</span><span style="color:#000000;">)</span>ctx.<span style="color:#0000FF;">ParseObjectFromJsonString</span><span style="color:#000000;">(</span>appctx<span style="color:#000000;">)</span><span style="color:#008000;">;</span>
                <span style="color:#FF0000;">string</span> cacheKey <span style="color:#008000;">=</span> <span style="color:#000000;">(</span><span style="color:#FF0000;">string</span><span style="color:#000000;">)</span>dict<span style="color:#000000;">[</span><span style="color:#666666;">"SecurityTokenServiceUri"</span><span style="color:#000000;">]</span><span style="color:#008000;">;</span>
&nbsp;
                <span style="color:#0600FF;">return</span> cacheKey<span style="color:#008000;">;</span>
            <span style="color:#000000;">}</span>
        <span style="color:#000000;">}</span>
&nbsp;
        <span style="color:#008080;font-style:italic;">/// &lt;summary&gt;</span>
        <span style="color:#008080;font-style:italic;">/// The realm portion of the context token's "audience" claim</span>
        <span style="color:#008080;font-style:italic;">/// &lt;/summary&gt;</span>
        <span style="color:#0600FF;">public</span> <span style="color:#FF0000;">string</span> Realm
        <span style="color:#000000;">{</span>
            get
            <span style="color:#000000;">{</span>
                <span style="color:#FF0000;">string</span> aud <span style="color:#008000;">=</span> <span style="color:#0600FF;">this</span>.<span style="color:#0000FF;">Audience</span><span style="color:#008000;">;</span>
                <span style="color:#0600FF;">if</span> <span style="color:#000000;">(</span>aud <span style="color:#008000;">==</span> <span style="color:#0600FF;">null</span><span style="color:#000000;">)</span>
                <span style="color:#000000;">{</span>
                    <span style="color:#0600FF;">return</span> null<span style="color:#008000;">;</span>
                <span style="color:#000000;">}</span>
&nbsp;
                <span style="color:#FF0000;">string</span> tokenRealm <span style="color:#008000;">=</span> aud.<span style="color:#0000FF;">Substring</span><span style="color:#000000;">(</span>aud.<span style="color:#0000FF;">IndexOf</span><span style="color:#000000;">(</span><span style="color:#666666;">'@'</span><span style="color:#000000;">)</span> <span style="color:#008000;">+</span> <span style="color:#FF0000;">1</span><span style="color:#000000;">)</span><span style="color:#008000;">;</span>
&nbsp;
                <span style="color:#0600FF;">return</span> tokenRealm<span style="color:#008000;">;</span>
            <span style="color:#000000;">}</span>
        <span style="color:#000000;">}</span>
&nbsp;
        <span style="color:#0600FF;">private</span> <span style="color:#0600FF;">static</span> <span style="color:#FF0000;">string</span> GetClaimValue<span style="color:#000000;">(</span>JsonWebSecurityToken token, <span style="color:#FF0000;">string</span> claimType<span style="color:#000000;">)</span>
        <span style="color:#000000;">{</span>
            <span style="color:#0600FF;">if</span> <span style="color:#000000;">(</span>token <span style="color:#008000;">==</span> <span style="color:#0600FF;">null</span><span style="color:#000000;">)</span>
            <span style="color:#000000;">{</span>
                <span style="color:#0600FF;">throw</span> <a href="http://www.google.com/search?q=new+msdn.microsoft.com"><span style="color:#008000;">new</span></a> ArgumentNullException<span style="color:#000000;">(</span><span style="color:#666666;">"token"</span><span style="color:#000000;">)</span><span style="color:#008000;">;</span>
            <span style="color:#000000;">}</span>
&nbsp;
            <span style="color:#0600FF;">foreach</span> <span style="color:#000000;">(</span>JsonWebTokenClaim claim <span style="color:#0600FF;">in</span> token.<span style="color:#0000FF;">Claims</span><span style="color:#000000;">)</span>
            <span style="color:#000000;">{</span>
                <span style="color:#0600FF;">if</span> <span style="color:#000000;">(</span>StringComparer.<span style="color:#0000FF;">Ordinal</span>.<span style="color:#0000FF;">Equals</span><span style="color:#000000;">(</span>claim.<span style="color:#0000FF;">ClaimType</span>, claimType<span style="color:#000000;">)</span><span style="color:#000000;">)</span>
                <span style="color:#000000;">{</span>
                    <span style="color:#0600FF;">return</span> claim.<span style="color:#0000FF;">Value</span><span style="color:#008000;">;</span>
                <span style="color:#000000;">}</span>
            <span style="color:#000000;">}</span>
&nbsp;
            <span style="color:#0600FF;">return</span> null<span style="color:#008000;">;</span>
        <span style="color:#000000;">}</span>
&nbsp;
    <span style="color:#000000;">}</span>
&nbsp;
    <span style="color:#0600FF;">public</span> <span style="color:#FF0000;">class</span> OAuthTokenPair
    <span style="color:#000000;">{</span>
        <span style="color:#0600FF;">public</span> <span style="color:#FF0000;">string</span> AccessToken<span style="color:#008000;">;</span>
        <span style="color:#0600FF;">public</span> <span style="color:#FF0000;">string</span> RefreshToken<span style="color:#008000;">;</span>
    <span style="color:#000000;">}</span>
<span style="color:#000000;">}</span></pre>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/trikks.wordpress.com/464/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/trikks.wordpress.com/464/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=trikks.wordpress.com&#038;blog=7671208&#038;post=464&#038;subd=trikks&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://trikks.wordpress.com/2012/12/30/sharepoint-2013-tokenhelper-cs-source-code/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/90294caceec6e1e468a078d4f7f86ea1?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">trikks</media:title>
		</media:content>
	</item>
		<item>
		<title>Error &#8220;Multiple management objects were found for identity&#8221; when enabling users in Lync</title>
		<link>http://trikks.wordpress.com/2012/12/17/error-multiple-management-objects-were-found-for-identity-when-enabling-users-in-lync/</link>
		<comments>http://trikks.wordpress.com/2012/12/17/error-multiple-management-objects-were-found-for-identity-when-enabling-users-in-lync/#comments</comments>
		<pubDate>Sun, 16 Dec 2012 23:20:52 +0000</pubDate>
		<dc:creator>trikks</dc:creator>
				<category><![CDATA[Lync]]></category>
		<category><![CDATA[PowerShell]]></category>
		<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[Enable-CsUser]]></category>
		<category><![CDATA[Get-ADUser]]></category>

		<guid isPermaLink="false">http://trikks.wordpress.com/?p=449</guid>
		<description><![CDATA[Having an error similar to this Enable-CsUser : Multiple management objects were found for identity &#8220;Håkan Karlsson&#8221;.? In my case this occurred when having multiple AD&#8217;s that didn&#8217;t sync as they should and when moving a user around in my OU&#8217;s it got copied at one point instead of moved. In an AD with thousands [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=trikks.wordpress.com&#038;blog=7671208&#038;post=449&#038;subd=trikks&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
				<content:encoded><![CDATA[<p>Having an error similar to this <strong>Enable-CsUser : Multiple management objects were found for identity &#8220;Håkan Karlsson&#8221;.</strong>?</p>
<p>In my case this occurred when having multiple AD&#8217;s that didn&#8217;t sync as they should and when moving a user around in my OU&#8217;s it got copied at one point instead of moved. In an AD with thousands of users this may become a bit problematic.</p>
<h2>Solution 1 &#8211; find the duplicate user and remove it</h2>
<p>Open PowerShell as admin and (this should be done at the AD server)</p>
<pre class="powershell" style="font-family:monospace;font-size:9pt;border:1px dashed #2F6FAB;color:black;padding:1em;background-color:#F9F9F9;"><span style="color:#008080;font-weight:bold;">PS</span> C:\<span style="color:pink;">&gt;</span> Import<span style="color:pink;">-</span>Module ActiveDirectory
<span style="color:#008080;font-weight:bold;">PS</span> C:\<span style="color:pink;">&gt;</span> Get<span style="color:pink;">-</span>ADUser <span style="color:pink;">-</span><span style="color:#0000FF;">filter</span> <span style="color:#000000;">{</span><span style="color:#000000;">(</span>GivenName <span style="color:#FF0000;">-eq</span> <span style="color:#800000;">"Håkan"</span><span style="color:#000000;">)</span> <span style="color:#FF0000;">-and</span> <span style="color:#000000;">(</span>Surname <span style="color:#FF0000;">-eq</span> <span style="color:#800000;">"Karlsson"</span><span style="color:#000000;">)</span><span style="color:#000000;">}</span></pre>
<p>This gave me</p>
<pre class="powershell" style="font-family:monospace;font-size:9pt;border:1px dashed #2F6FAB;color:black;padding:1em;background-color:#F9F9F9;">DistinguishedName&nbsp;: CN<span style="color:pink;">=</span><span style="color:#008080;font-weight:bold;">H</span>åkan Karlsson<span style="color:pink;">,</span>OU<span style="color:pink;">=</span>UnitName<span style="color:pink;">,</span>OU<span style="color:pink;">=</span>Customers<span style="color:pink;">,</span>DC<span style="color:pink;">=</span>domain<span style="color:pink;">,</span>DC<span style="color:pink;">=</span>se
Enabled          &nbsp;: True
GivenName        &nbsp;: Hakan
Name             &nbsp;: <span style="color:#008080;font-weight:bold;">H</span>åkan Karlsson
ObjectClass      &nbsp;: user
ObjectGUID       &nbsp;: 047cf709<span style="color:pink;">-</span>0a3f<span style="color:pink;">-</span>42f5<span style="color:pink;">-</span>a459<span style="color:pink;">-</span>b6885c99aace
SamAccountName   &nbsp;: hakan
SID              &nbsp;: S<span style="color:pink;">-</span><span style="color:#000000;">1</span><span style="color:pink;">-</span><span style="color:#000000;">5</span><span style="color:pink;">-</span><span style="color:#000000;">21</span><span style="color:pink;">-</span><span style="color:#000000;">54898309</span><span style="color:pink;">-</span><span style="color:#000000;">311788698</span><span style="color:pink;">-</span><span style="color:#000000;">4246315985</span><span style="color:pink;">-</span><span style="color:#000000;">1142</span>
Surname          &nbsp;: Karlsson
UserPrincipalName&nbsp;: hakan<span style="color:pink;">@</span>domain.se
&nbsp;
DistinguishedName&nbsp;: CN<span style="color:pink;">=</span><span style="color:#008080;font-weight:bold;">H</span>åkan Karlsson<span style="color:pink;">,</span>OU<span style="color:pink;">=</span>Sales<span style="color:pink;">,</span>OtherUnit<span style="color:pink;">,</span>OU<span style="color:pink;">=</span>Customers<span style="color:pink;">,</span>DC<span style="color:pink;">=</span>domain<span style="color:pink;">,</span>DC<span style="color:pink;">=</span>se
Enabled          &nbsp;: True
GivenName        &nbsp;: <span style="color:#008080;font-weight:bold;">H</span>åkan
Name             &nbsp;: <span style="color:#008080;font-weight:bold;">H</span>åkan Karlsson
ObjectClass      &nbsp;: user
ObjectGUID       &nbsp;: 0bae8230<span style="color:pink;">-</span>eb34<span style="color:pink;">-</span><span style="color:#000000;">4119</span><span style="color:pink;">-</span>bc97<span style="color:pink;">-</span>bfde80a3dfe4
SamAccountName   &nbsp;: User13
SID              &nbsp;: S<span style="color:pink;">-</span><span style="color:#000000;">1</span><span style="color:pink;">-</span><span style="color:#000000;">5</span><span style="color:pink;">-</span><span style="color:#000000;">21</span><span style="color:pink;">-</span><span style="color:#000000;">54898309</span><span style="color:pink;">-</span><span style="color:#000000;">311788698</span><span style="color:pink;">-</span><span style="color:#000000;">4246315985</span><span style="color:pink;">-</span><span style="color:#000000;">1265</span>
Surname          &nbsp;: Karlsson
UserPrincipalName&nbsp;: User13<span style="color:pink;">@</span>domain.se</pre>
<p>There, it&#8217;s very easy to track and remove any of these users if I&#8217;d like to.</p>
<h2>Solution 2 &#8211; Keep both users and add by DistinguishedName instead</h2>
<p>Even though it&#8217;s rarely mentioned you can add users to Lync by their DistinguishedName.</p>
<p>Any given day you would type something like</p>
<pre class="powershell" style="font-family:monospace;font-size:9pt;border:1px dashed #2F6FAB;color:black;padding:1em;background-color:#F9F9F9;">Enable<span style="color:pink;">-</span>CsUser <span style="color:pink;">-</span>Identity <span style="color:#800000;">"Håkan Karlsson"</span> <span style="color:pink;">-</span>RegistrarPool <span style="color:#800000;">"lync.domain.se"</span> <span style="color:pink;">-</span>SipAddressType SamAccountName <span style="color:pink;">-</span>SipDomain domain.se</pre>
<p>Now, that was the command that didn&#8217;t work since you have two users by that name. Instead do this</p>
<pre class="powershell" style="font-family:monospace;font-size:9pt;border:1px dashed #2F6FAB;color:black;padding:1em;background-color:#F9F9F9;">Enable<span style="color:pink;">-</span>CsUser –Identity <span style="color:#800000;">"CN=Håkan Karlsson,OU=Sales,OtherUnit,OU=Customers,DC=domain,DC=se"</span> 
<span style="color:pink;">-</span>RegistrarPool <span style="color:#800000;">"lync.domain.se"</span> <span style="color:pink;">-</span>SipAddressType SamAccountName <span style="color:pink;">-</span>SipDomain domain.se</pre>
<p>That&#8217;s it.</p>
<p>Lessons learned from this? <strong>Always use the DistinguishedName when adding users to lync!</strong></p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/trikks.wordpress.com/449/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/trikks.wordpress.com/449/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=trikks.wordpress.com&#038;blog=7671208&#038;post=449&#038;subd=trikks&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://trikks.wordpress.com/2012/12/17/error-multiple-management-objects-were-found-for-identity-when-enabling-users-in-lync/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/90294caceec6e1e468a078d4f7f86ea1?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">trikks</media:title>
		</media:content>
	</item>
		<item>
		<title>Updating Lync Media Configuration using PowerShell</title>
		<link>http://trikks.wordpress.com/2012/12/16/updating-lync-media-configuration-using-powershell/</link>
		<comments>http://trikks.wordpress.com/2012/12/16/updating-lync-media-configuration-using-powershell/#comments</comments>
		<pubDate>Sun, 16 Dec 2012 09:40:08 +0000</pubDate>
		<dc:creator>trikks</dc:creator>
				<category><![CDATA[Lync]]></category>
		<category><![CDATA[PowerShell]]></category>

		<guid isPermaLink="false">http://trikks.wordpress.com/?p=443</guid>
		<description><![CDATA[This will describe how to work with the CsMediaConfiguration cmdlets. This particular guide assumes you have a rather simple setup, for more complex setups you may need to tweak my suggestions a bit. Let&#8217;s have a look at your current config Open PowerShell and run the Get-CsMediaConfiguration command, a default setup of lync should look [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=trikks.wordpress.com&#038;blog=7671208&#038;post=443&#038;subd=trikks&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
				<content:encoded><![CDATA[<p>This will describe how to work with the CsMediaConfiguration cmdlets.</p>
<p>This particular guide assumes you have a rather simple setup, for more complex setups you may need to tweak my suggestions a bit.</p>
<h2>Let&#8217;s have a look at your current config</h2>
<p>Open PowerShell and run the Get-CsMediaConfiguration command, a default setup of lync should look like this</p>
<pre class="powershell" style="font-family:monospace;font-size:9pt;"><span style="color:#008080;font-weight:bold;">PS</span> c:\<span style="color:pink;">&gt;</span> Get<span style="color:pink;">-</span>CsMediaConfiguration
&nbsp;
Identity           &nbsp;: Global
EnableQoS          &nbsp;: False
EncryptionLevel    &nbsp;: RequireEncryption
EnableSiren        &nbsp;: False
MaxVideoRateAllowed&nbsp;: VGA600K</pre>
<p>The CsMediaConfiguration utilizes the Microsoft.Rtc.Management.WritableConfig.Settings.Media.MediaSettings object as I describe here <a href="http://trikks.wordpress.com/2012/12/16/the-undocumented-mediasettings-class-from-microsoft-rtc/" rel="nofollow">http://trikks.wordpress.com/2012/12/16/the-undocumented-mediasettings-class-from-microsoft-rtc/</a></p>
<h2>Allowing HD video</h2>
<p><b>Note the -Identity property</b></p>
<pre class="powershell" style="font-family:monospace;font-size:9pt;"><span style="color:#008080;font-weight:bold;">PS</span> C:\<span style="color:pink;">&gt;</span> Set<span style="color:pink;">-</span>CsMediaConfiguration <span style="color:pink;">-</span>Identity site:Global <span style="color:pink;">-</span>MaxVideoRateAllowed hd720p15m</pre>
<h2>Using PowerShell a bit</h2>
<p>In this example I store the current configuration object in a <b>$config</b> variable and uses the identity in the object. The settings are also changed to allow HD and to SupportEncryption rather than to require it.</p>
<pre class="powershell" style="font-family:monospace;font-size:9pt;">&nbsp;
<span style="color:#008080;font-weight:bold;">PS</span> C:\<span style="color:pink;">&gt;</span> <span style="color:#800080;">$config</span> <span style="color:pink;">=</span> Get<span style="color:pink;">-</span>CsMediaConfiguration
<span style="color:#008080;font-weight:bold;">PS</span> C:\<span style="color:pink;">&gt;</span> Set<span style="color:pink;">-</span>CsMediaConfiguration <span style="color:pink;">-</span>Identity <span style="color:#800080;">$config</span>.Identity <span style="color:pink;">-</span>MaxVideoRateAllowed hd720p15m <span style="color:pink;">-</span>EncryptionLevel SupportEncryption
&nbsp;
<span style="color:#008080;font-weight:bold;">PS</span> C:\<span style="color:pink;">&gt;</span> Get<span style="color:pink;">-</span>CsMediaConfiguration
&nbsp;
Identity           &nbsp;: Global
EnableQoS          &nbsp;: False
EncryptionLevel    &nbsp;: SupportEncryption
EnableSiren        &nbsp;: False
MaxVideoRateAllowed&nbsp;: Hd720p15M</pre>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/trikks.wordpress.com/443/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/trikks.wordpress.com/443/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=trikks.wordpress.com&#038;blog=7671208&#038;post=443&#038;subd=trikks&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://trikks.wordpress.com/2012/12/16/updating-lync-media-configuration-using-powershell/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/90294caceec6e1e468a078d4f7f86ea1?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">trikks</media:title>
		</media:content>
	</item>
	</channel>
</rss>
