Wednesday, June 23, 2010

SPSecurity.SetApplicationCendentialKey !! wondering the typo error in SharePoint API

While digging in to the Microsoft.SharePoint.dll using Reflector for an impersonation related issue, discovered this method SPSecurity.SetApplicationCendentialKey. This method is used to encrypt and decrypt password strings but notice the typo error in a method name it is supposed to be SetApplicationCredentialKey. Microsoft marked this method as obsolete and provided a new method with out typo SPSecurity.SetApplicationCredentialKey.

Still wondering, how this method passed all Microsoft test cases before the release?

Thursday, June 17, 2010

Hide sign in link for anonymous users in SharePoint internet facing sites

A frequent request when you enable anonymous access to any of your SharePoint zone is to hide the "Sign In" hyper link which comes in top right corner of the page. Probably the business might have a request to have an intranet site for all authenticated users and an anonymous site for their customers, so showing a "sign in" link is irrelevant by all means.
Let try eliminating this link in somewhat supported way.

Anatomy of the control
This link comes from user control called welcome.ascx in 12hive\TEMPLATE\CONTROLTEMPLATES, this user control has a feature menu template which is responsible for rendering the menu containing "sign in as different user" and "Sign out" options

Rendering of Feature Menu Template

Scroll towards the end of the file you will find the following section

<SharePoint:ApplicationPageLink runat="server" id="ExplicitLogin" ApplicationPageFileName="Authenticate.aspx" AppendCurrentPageUrl=true
Text="<%$Resources:wss,login_pagetitle%>" style="display:none" Visible="false" />

This application link control is responsible for rendering the "Sign in" control

Take a look at the control tag for its implementation, its visible attribute is marked as false, this will become visible only if the user is not authenticated and the site has anonymous access enabled.
Steps to remove sign in link
  1. Create a new folder under 12hive\TEMPLATE\CONTROLTEMPLATES say 12hive\TEMPLATE\CONTROLTEMPLATES\Foo
  2. Copy the welcome.ascx to this Foo folder (lets stick to best practice of not touching the OOB files).
  3. Comment this ApplicationPageLink section in this copied file under \CONTROLTEMPLATES\Foo

<!--<SharePoint:ApplicationPageLink runat="server" id="ExplicitLogin"
ApplicationPageFileName="Authenticate.aspx" AppendCurrentPageUrl=true
Text="<%$Resources:wss,login_pagetitle%>" style="display:none" Visible="false" /> -->

4. Open your custom master page and modify the mapping to our new user control as below

<%@ Register TagPrefix="wssuc" TagName="Welcome" src="~/_controltemplates/Foo/Welcome.ascx" %>

There you go .. . Do an iisreset and refresh the anonymous page

Less custom code, less bugs and more solid solutions.

Wednesday, June 16, 2010

Compare context menu in Winmerge

I heavily use Beyond compare to compare and merge files. I personally like the BC's context menu option "Select left side to compare" and "Compare to xxx" But one fine day the trial version expired and the only other alternate is WinMerge.

Winmerge also has this option buried deep under the options dialog box.
Open winmerge.exe from C:\Program Files\WinMerge\winmergeU.exe and select Edit-> options

Here you go with the Winmerge's compare To option enabled in context menus

Saturday, June 5, 2010

Where is my iisapp.vbs in Win 2008 Server ?

In sharepoint development iisapp is one of the script which I use heavily to find the application pools running and to recycle a single application pool. This is the usual case in doing development against Win 2003 & IIS 6. While starting the development in Win 2008 server soon it showed me that I'm dealing with a different web server.

Hit the command line console and gave iisapp, it replied that it is not an internal command or invalid command. IIS 7.0 gotta new administration console command called appcmd.

Giving the command "%windir%\system32\inetsrv\appcmd.exe list wp" provides me the information about the running application pools in IIS 7

Yet another tool to learn in a SharePoint developer's life ....