If it is necessary to log into a website before gaining access to the data, it is possible to write an authentication connector. A class called _SiteInfo must be placed in the same namespace of the entity classes for the website, and it must inherit from SiteInfo.

An additional SiteInfo attribute specifies the POST request to perform in order to log in.

Forms authentication

POST parameters are embedded in the URL as metaparameters.
[SiteInfo(
    LoginPostUrl = "/login.php#$post-remember=1&$post-usr={@UserName}&$post-pass={@Password}",
    IsLoggedInSelector = "#navbar a.profile"
)]
class _SiteInfo : SiteInfo
{

}
It is also necessary to specify either IsLoggedOutSelector, or IsLoggedInSelector. These selectors will be used to verify whether the server is recognizing the current user, or if it is necessary to perform a new login process.

If the login process is more complex, it is possible to override the LoginAsync and VerifyAuthentication methods of SiteInfo. The former should return a dictionary of cookies, the latter will be called after every HTTP request (in place of the IsLoggedInSelector/IsLoggedOutSelector selectors)

OAuth 1

If the login process is based on OAuth 1, it is possible to specify its configuration and Shaman will take care of the rest, displaying an interactive login window when a token is required.
[SiteInfo(
        OAuth1RequestTokenUrl = "http://www.tumblr.com/oauth/request_token",
        OAuth1AuthorizeUrl = "http://www.tumblr.com/oauth/authorize",
        OAuth1AccessTokenUrl = "http://www.tumblr.com/oauth/access_token",
        OAuth1ConsumerKey = "...",
        OAuth1ConsumerSecret = "...",
        OAuth1SignatureMethod = SiteInfo.OAuth1SignatureMethod.HmacSha1
        )]
Support for OAuth 2 is planned.