view Agendas/trunk/src/Agendas.Blog/Impl/PostWriterWebServiceAdapter.cs @ 104:c5034884c7d7

refactor para que los estados sean singletons
author jorge.rowies
date Sun, 05 Jun 2011 13:22:36 -0300
parents 3027c64344bd
children 1d820f17fc75
line wrap: on
line source

using System;
using System.Globalization;
using System.Security.Cryptography;
using System.ServiceModel;
using Agendas.Blog.Exceptions;
using Agendas.Blog.PortalSitefinity;

namespace Agendas.Blog.Impl
{
  public class PostWriterWebServiceAdapter : IPostWriterWebService
  {
    private readonly PostWriterWebServiceSoapClient _service;

    public PostWriterWebServiceAdapter()
    {
      var postWriterUrl = System.Configuration.ConfigurationManager.AppSettings["PublicadorBlog.PostWriterServiceUrl"];
      if (string.IsNullOrEmpty(postWriterUrl))
        throw new PostWriterServiceUrlNotFoundException();

      _service = new PortalSitefinity.PostWriterWebServiceSoapClient(new BasicHttpBinding(), new EndpointAddress(postWriterUrl));
    }

    private static string buildToken(string key, DateTime time)
    {
      var aux = key + time.ToString(CultureInfo.InvariantCulture);

      var enc = System.Text.Encoding.ASCII.GetEncoder();

      var data = new byte[aux.Length];
      enc.GetBytes(aux.ToCharArray(), 0, aux.Length, data, 0, true);

      var md5 = new MD5CryptoServiceProvider();
      var result = md5.ComputeHash(data);

      return BitConverter.ToString(result).Replace("-", "").ToLower();
    }

    public void WriteBlogPost(string postTitle, string postHtmlContent, string postAuthor, bool setPublicationDate)
    {
      var securityToken = getSecurityToken();
      var blogName = System.Configuration.ConfigurationManager.AppSettings["PublicadorBlog.BlogName"];
      if (string.IsNullOrEmpty(blogName))
        throw new BlogNameNotFoundException();

      _service.WriteBlogPost(securityToken, blogName, postTitle, postHtmlContent, postAuthor, setPublicationDate);
    }

    private static string getSecurityToken()
    {
      var masterKey = System.Configuration.ConfigurationManager.AppSettings["PublicadorBlog.BlogWriterMasterKey"];
      if (string.IsNullOrEmpty(masterKey))
        throw new BlogWriterMasterKeyNotFoundException();

      var now = DateTime.UtcNow;
      now = new DateTime(now.Year, now.Month, now.Day, now.Hour, now.Minute, 0, 0);

      return buildToken(masterKey, now);
    }
  }
}