view Agendas/trunk/src/Agendas.Blog/Impl/PostWriterWebServiceAdapter.cs @ 109:6bd9be78caa0

Merge
author Nelo@Kenia.neluz.int
date Tue, 07 Jun 2011 23:21:07 -0300
parents 1d820f17fc75
children
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 BlogPublicadorConfig _config;
    private readonly PostWriterWebServiceSoapClient _service;

    public PostWriterWebServiceAdapter(BlogPublicadorConfig config)
    {
      _config = config;
      _service = new PortalSitefinity.PostWriterWebServiceSoapClient(new BasicHttpBinding(),
                                                                     new EndpointAddress(config.PostWriterServiceUrl));
    }

    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();
      _service.WriteBlogPost(securityToken, _config.BlogName, postTitle, postHtmlContent, postAuthor, setPublicationDate);
    }

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

      return buildToken(_config.BlogWriterMasterKey, now);
    }
  }
}