<?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/"
	>

<channel>
	<title>Yaco Sistemas</title>
	<atom:link href="http://www.yaco.es/blog/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.yaco.es/blog</link>
	<description>Blog de Yaco Sistemas</description>
	<lastBuildDate>Wed, 28 Nov 2012 10:42:15 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>(Español) Éxito del entorno federado del Sistema Nacional de Educación a Distancia de México</title>
		<link>http://www.yaco.es/blog/en/uniquid/2012/11/exito-del-entorno-federado-del-sistema-nacional-educacion-distancia-mexico/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=exito-del-entorno-federado-del-sistema-nacional-educacion-distancia-mexico</link>
		<comments>http://www.yaco.es/blog/en/uniquid/2012/11/exito-del-entorno-federado-del-sistema-nacional-educacion-distancia-mexico/#comments</comments>
		<pubDate>Wed, 21 Nov 2012 11:25:58 +0000</pubDate>
		<dc:creator>mmontero</dc:creator>
				<category><![CDATA[confia]]></category>
		<category><![CDATA[uniquid]]></category>
		<category><![CDATA[identity federation]]></category>
		<category><![CDATA[sined]]></category>

		<guid isPermaLink="false">http://www.yaco.es/blog/?p=2007</guid>
		<description><![CDATA[<p>Sorry, this entry is only available in Spanish </p> Related Posts: <a href='http://www.yaco.es/blog/uniquid/2012/02/proyecto-investigacion-provision-asincrona-basado-en-saml2-0/' title='&#60;!--:en--&#62;Research project about async user provisioning based on SAML2.0&#60;!--:--&#62;&#60;!--:es--&#62;Proyecto de investigación sobre Provisión asíncrona de usuarios basado en SAML2.0&#60;!--:--&#62;'>Research project about async user provisioning based on SAML2.0Proyecto de investigación sobre Provisión asíncrona de usuarios basado en SAML2.0</a> <a href='http://www.yaco.es/blog/uniquid/2011/11/como-hacer-que-nuestras-aplicaciones-google-apps-autentiquen-contra-nuestra-fuente-usuarios-local-base-datos-ldap-etc-usando-uniquid-protocolo-saml-2-0/' title='&#60;!--:es--&#62;Como hacer que [...]]]></description>
			<content:encoded><![CDATA[<p>Sorry, this entry is only available in Spanish </p>
<h3 class='related_post_title'>Related Posts:</h3>
<ul class='related_post'>
<li><a href='http://www.yaco.es/blog/uniquid/2012/02/proyecto-investigacion-provision-asincrona-basado-en-saml2-0/' title='&lt;!--:en--&gt;Research project about async user provisioning based on SAML2.0&lt;!--:--&gt;&lt;!--:es--&gt;Proyecto de investigación sobre Provisión asíncrona de usuarios basado en SAML2.0&lt;!--:--&gt;'><!--:en-->Research project about async user provisioning based on SAML2.0<!--:--><!--:es-->Proyecto de investigación sobre Provisión asíncrona de usuarios basado en SAML2.0<!--:--></a></li>
<li><a href='http://www.yaco.es/blog/uniquid/2011/11/como-hacer-que-nuestras-aplicaciones-google-apps-autentiquen-contra-nuestra-fuente-usuarios-local-base-datos-ldap-etc-usando-uniquid-protocolo-saml-2-0/' title='&lt;!--:es--&gt;Como hacer que nuestras aplicaciones de Google Apps autentiquen contra nuestra fuente de usuarios local (base de datos, ldap, etc) usando Uniquid (protocolo SAML 2.0).&lt;!--:--&gt;'><!--:es-->Como hacer que nuestras aplicaciones de Google Apps autentiquen contra nuestra fuente de usuarios local (base de datos, ldap, etc) usando Uniquid (protocolo SAML 2.0).<!--:--></a></li>
<li><a href='http://www.yaco.es/blog/uniquid/2011/10/resumen-del-workshop-educacionyfuturo/' title='&lt;!--:es--&gt;Resumen del Workshop #EducaciónyFuturo&lt;!--:--&gt;'><!--:es-->Resumen del Workshop #EducaciónyFuturo<!--:--></a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.yaco.es/blog/en/uniquid/2012/11/exito-del-entorno-federado-del-sistema-nacional-educacion-distancia-mexico/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>How visually detect visually cyclic import between our django applications</title>
		<link>http://www.yaco.es/blog/en/eventos/2012/07/how-visually-detect-cyclic-import-between-our-django-applications/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=how-visually-detect-cyclic-import-between-our-django-applications</link>
		<comments>http://www.yaco.es/blog/en/eventos/2012/07/how-visually-detect-cyclic-import-between-our-django-applications/#comments</comments>
		<pubDate>Mon, 30 Jul 2012 14:05:55 +0000</pubDate>
		<dc:creator>pmartin</dc:creator>
				<category><![CDATA[contribuciones]]></category>
		<category><![CDATA[django]]></category>
		<category><![CDATA[Events]]></category>
		<category><![CDATA[python]]></category>
		<category><![CDATA[django-detect-cyclic]]></category>
		<category><![CDATA[django-en]]></category>
		<category><![CDATA[piweek]]></category>
		<category><![CDATA[python-en]]></category>

		<guid isPermaLink="false">http://www.yaco.es/blog/?p=1896</guid>
		<description><![CDATA[<p>Applications in Django are meant to encapsulate concrete <a title="project vs application" href="https://docs.djangoproject.com/en/1.4/intro/tutorial01/#creating-models" target="_blank">features</a>, and to be as independent as possible. Usually, however, during the development of a project, we end up with a bunch of nice, generic, independent applications and a bunch of applications with tangled dependencies and functionality </p> <p>The problem is when [...]]]></description>
			<content:encoded><![CDATA[<p>Applications in Django are meant to encapsulate concrete <a title="project vs application" href="https://docs.djangoproject.com/en/1.4/intro/tutorial01/#creating-models" target="_blank">features</a>, and to be as independent as possible. Usually, however, during the development of a project, we end up with a bunch of nice, generic, independent applications <img src='http://www.yaco.es/blog/wp-includes/images/smilies/icon_cool.gif' alt='8-)' class='wp-smiley' /> and a bunch of applications with tangled dependencies and functionality <img src='http://www.yaco.es/blog/wp-includes/images/smilies/icon_redface.gif' alt=':oops:' class='wp-smiley' /> </p>
<p>The problem is when this second set of applications don&#8217;t have a defined hierarchy: if application A imports from application B, application B should not import from application A. This is easy to say, but when the size of the project begins to grow organically, driven by ever changing customer requirements, this gets more and more difficult to achieve.</p>
<p><a title="django-detect-cyclic" href="http://pypi.python.org/pypi/django-detect-cyclic/" target="_blank">Django-detect-cyclic</a> makes the detection of import cycles very easy. After <a title="requeriments and installation" href="http://pypi.python.org/pypi/django-detect-cyclic#requeriments" target="_blank">installing</a> the app, we only have to access the wizard, in the admin site, and after filling out a form (in which every field has a default value) the app will generate a graph with all the dependencies between the installed applications. We can see this in the following images</p>
<p style="text-align: center;"><a href="http://www.yaco.es/blog/eventos/2012/07/how-visually-detect-cyclic-import-between-our-django-applications/attachment/wizard-2/" rel="attachment wp-att-1973"><img class=" wp-image-1973 aligncenter" title="wizard" src="http://www.yaco.es/blog/wp-content/uploads/2012/07/wizard1.png" alt="" width="523" height="884" /></a></p>
<p style="text-align: center;"><span style="font-size: x-small;">Wizard with generated graph on top</span></p>
<p style="text-align: center;"><a href="http://www.yaco.es/blog/eventos/2012/07/how-visually-detect-cyclic-import-between-our-django-applications/attachment/example-modules-dotted/" rel="attachment wp-att-1921"><img class="alignnone size-full wp-image-1921" title="example-modules-dotted" src="http://www.yaco.es/blog/wp-content/uploads/2012/07/example-modules-dotted.png" alt="" width="750" height="617" /></a></p>
<p style="text-align: center;"><span style="font-size: x-small;">Example of graph, selecting the &#8220;Show modules&#8221; option</span></p>
<p>Caption:</p>
<ul>
<li>The nodes are applications, or (if you use the option &#8220;Show modules&#8221;) modules in the applications</li>
<li>One edge means that the source node imports from the destination node</li>
<li>Every edge of a cycle has the same background color and the label contains &#8220;Cycle X&#8221;</li>
<li>The labels of the edges contain the weight in parentheses</li>
<li>If you use the &#8220;Show modules&#8221; option, each node will have a background color. If two nodes are from the same application, they will have the same background color.</li>
<li>If an edge is dotted, every import in the source happens at runtime, whithin the body of a function or method</li>
</ul>
<p>You can do the same from the <a title="Examples" href="https://github.com/goinnn/django-detect-cyclic/blob/master/EXAMPLES.rst/" target="_blank">command line.</a></p>
<p><a title="Pi Week" href="http://www.yaco.es/blog/eventos/2012/07/how-visually-detect-cyclic-import-between-our-django-applications/attachment/piweek_logo-2/" rel="attachment wp-att-1958" target="_blank"><img class="size-full wp-image-1958 aligncenter" title="piweek_logo" src="http://www.yaco.es/blog/wp-content/uploads/2012/07/piweek_logo1.png" alt="" width="250" height="70" /></a></p>
<p style="text-align: center;">This egg was done in the <a title="pi week" href="http://piweek.es/?p=332" target="_blank">pi week</a></p>
<h3 class='related_post_title'>Related Posts:</h3>
<ul class='related_post'>
<li><a href='http://www.yaco.es/blog/django/2012/05/how-to-integrate-forms-in-the-django-admin-site/' title='&lt;!--:en--&gt;How to integrate forms in the Django admin site? django-form-admin&lt;!--:--&gt;&lt;!--:es--&gt;¿Cómo integrar formularios en la administración de Django? django-form-admin&lt;!--:--&gt;'><!--:en-->How to integrate forms in the Django admin site? django-form-admin<!--:--><!--:es-->¿Cómo integrar formularios en la administración de Django? django-form-admin<!--:--></a></li>
<li><a href='http://www.yaco.es/blog/django/2012/02/a-simple-and-impossible-query-in-django/' title='&lt;!--:en--&gt;A simple and impossible query in django&lt;!--:--&gt;&lt;!--:es--&gt;Una simple e imposible consulta en django&lt;!--:--&gt;'><!--:en-->A simple and impossible query in django<!--:--><!--:es-->Una simple e imposible consulta en django<!--:--></a></li>
<li><a href='http://www.yaco.es/blog/django/2012/01/inline-editing-and-translating-in-django/' title='&lt;!--:en--&gt;Inline Editing and translating in Django&lt;!--:--&gt;&lt;!--:es--&gt;Editando y traduciendo inline en Django&lt;!--:--&gt;'><!--:en-->Inline Editing and translating in Django<!--:--><!--:es-->Editando y traduciendo inline en Django<!--:--></a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.yaco.es/blog/en/eventos/2012/07/how-visually-detect-cyclic-import-between-our-django-applications/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>(Español) Participamos en la PI Week</title>
		<link>http://www.yaco.es/blog/en/yaco/2012/07/participamos-en-pi-week/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=participamos-en-pi-week</link>
		<comments>http://www.yaco.es/blog/en/yaco/2012/07/participamos-en-pi-week/#comments</comments>
		<pubDate>Tue, 17 Jul 2012 14:40:46 +0000</pubDate>
		<dc:creator>lgs</dc:creator>
				<category><![CDATA[contribuciones]]></category>
		<category><![CDATA[Events]]></category>
		<category><![CDATA[Yaco]]></category>
		<category><![CDATA[piweek]]></category>

		<guid isPermaLink="false">http://www.yaco.es/blog/?p=1937</guid>
		<description><![CDATA[<p>Sorry, this entry is only available in Spanish </p> Related Posts: <a href='http://www.yaco.es/blog/eventos/2012/07/how-visually-detect-cyclic-import-between-our-django-applications/' title='&#60;!--:en--&#62;How visually detect visually cyclic import between our django applications&#60;!--:--&#62;&#60;!--:es--&#62;Como detectar visualmente importaciones cíclicas entre nuestras aplicaciones django&#60;!--:--&#62;'>How visually detect visually cyclic import between our django applicationsComo detectar visualmente importaciones cíclicas entre nuestras aplicaciones django</a>]]></description>
			<content:encoded><![CDATA[<p>Sorry, this entry is only available in Spanish </p>
<h3 class='related_post_title'>Related Posts:</h3>
<ul class='related_post'>
<li><a href='http://www.yaco.es/blog/eventos/2012/07/how-visually-detect-cyclic-import-between-our-django-applications/' title='&lt;!--:en--&gt;How visually detect visually cyclic import between our django applications&lt;!--:--&gt;&lt;!--:es--&gt;Como detectar visualmente importaciones cíclicas entre nuestras aplicaciones django&lt;!--:--&gt;'><!--:en-->How visually detect visually cyclic import between our django applications<!--:--><!--:es-->Como detectar visualmente importaciones cíclicas entre nuestras aplicaciones django<!--:--></a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.yaco.es/blog/en/yaco/2012/07/participamos-en-pi-week/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Implemented SAML plugin for ownCloud</title>
		<link>http://www.yaco.es/blog/en/uniquid/2012/06/implementado-plugin-saml-para-owncloud/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=implementado-plugin-saml-para-owncloud</link>
		<comments>http://www.yaco.es/blog/en/uniquid/2012/06/implementado-plugin-saml-para-owncloud/#comments</comments>
		<pubDate>Fri, 29 Jun 2012 17:07:22 +0000</pubDate>
		<dc:creator>smartin</dc:creator>
				<category><![CDATA[confia]]></category>
		<category><![CDATA[contribuciones]]></category>
		<category><![CDATA[uniquid]]></category>
		<category><![CDATA[owncloud]]></category>
		<category><![CDATA[plugin saml]]></category>
		<category><![CDATA[saml]]></category>

		<guid isPermaLink="false">http://www.yaco.es/blog/?p=1842</guid>
		<description><![CDATA[<p style="text-align: justify;">In <a title="Confía" href="http://confia.aupa.info/" target="_blank">Confía</a>, the Andalusian Public Universities Identity Federation, cloud based file transfering and hosting services are being evaluated.</p> <p>Among the players that are being most nice are the <a href="https://gestionproyectos.us.es/projects/show/consigna">University of Sevilla Consigna</a>, <a href="http://www.assembla.com/wiki/show/file_sender">Filesender</a> y <a href="http://owncloud.org/">ownCloud</a>.</p> <p></p> <p>ownCloud is essentially a tool to host files but it has [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align: justify;"><span style="color: #000000;">In <a title="Confía" href="http://confia.aupa.info/" target="_blank"><span style="color: #000000;">Confía</span></a>, the Andalusian Public Universities Identity Federation, cloud based file transfering and hosting services are being evaluated.</span></p>
<p><span style="color: #000000;">Among the players that are being most nice are the <a href="https://gestionproyectos.us.es/projects/show/consigna"><span style="color: #000000;">University of Sevilla Consigna</span></a>, <a href="http://www.assembla.com/wiki/show/file_sender"><span style="color: #000000;">Filesender</span></a> y <a href="http://owncloud.org/"><span style="color: #000000;">ownCloud</span></a>.<img title="Más..." src="http://www.yaco.es/blog/wp-includes/js/tinymce/plugins/wordpress/img/trans.gif" alt="" /></span></p>
<p><span style="color: #000000;"><span id="more-1842"></span></span></p>
<p><span style="color: #000000;">ownCloud is essentially a tool to host files but it has a lot more features:</span></p>
<ul>
<li><span style="color: #000000;"><em>Security</em>: files are encrypted.</span></li>
<li><span style="color: #000000;"><em>Usability</em>: versions, drag &amp; drop, change notifications, document viewers and image galleries.</span></li>
<li><span style="color: #000000;"><em>Interoperability</em>: it offers an API for third party applications and WebDav support.</span></li>
<li><span style="color: #000000;">Tasks management.</span></li>
<li><span style="color: #000000;">Contacts management.</span></li>
<li><span style="color: #000000;">Calendar.</span></li>
</ul>
<p><span style="color: #000000;">Other important point is the great community behind the project, which is making the software to evolve very quickly.</span></p>
<p><span style="color: #000000;">Because of all this and given the fact it was lacking SAML support, from the Confía federation this contribution has been made and it has been available since last week.</span></p>
<div class="mceTemp mceIEcenter" style="text-align: center;">
<dl id="" class="wp-caption aligncenter" style="width: 262px;">
<dt class="wp-caption-dt"><span style="color: #000000;"><a href="http://www.yaco.es/blog/uniquid/2012/06/implementado-plugin-saml-para-owncloud/attachment/logo/" rel="attachment wp-att-1843"><span style="color: #000000;"><img class="  " title="login owncloud" src="http://www.yaco.es/blog/wp-content/uploads/2012/06/logo.png" alt="SAML support, owncloud login screen" width="252" height="376" /></span></a></span></dt>
<dd class="wp-caption-dd">oncloud login with SAML support</dd>
</dl>
</div>
<p><span style="color: #000000;"><a href="https://150.214.2.7/owncloud/"><span style="color: #000000;">An ownCloud instance has been deployed at the lab environment of Confía</span></a> and it is available for the pre-production identity providers of the universities.</span></p>
<p style="text-align: justify;"><span style="color: #000000;">Since the very beginning of this development there has been a great feedback from the project maintainers. As a proof, the main developer, Frank Karlitschek, has given me commit rights in the ownCloud central repository so I could push the code myself and be responsible of its maintenance from now on.</span></p>
<p><span style="color: #000000;">Hence, the <a href="https://gitorious.org/owncloud/apps/trees/master/user_saml"><span style="color: #000000;">application that add SAML support to ownCloud</span></a> is already available from the official ownCloud repository hosted at gitorious.</span></p>
<p><span style="text-decoration: underline;"><span style="color: #000000; font-size: large; text-decoration: underline;">Installation of the user_saml application</span></span></p>
<p style="text-align: justify;"><span style="color: #000000;">Assuming there is an already deployed and configured instance of the <a href="http://simplesamlphp.org/docs/trunk/simplesamlphp-sp"><span style="color: #000000;">SimpleSAMLphp SP</span></a> the first thing we should do is to get the source code of the user_saml application from the official ownCloud repository. In ownCloud a plugin is called an app:</span></p>
<p><span style="color: #000000;">    # git clone git@github.com:pitbulk/apps.git<br />
</span></p>
<p><span style="color: #000000;">And we copy that copy into our ownCloud instance:</span></p>
<p><span style="color: #000000;">    # cp -R apps/saml_user/apps/</span></p>
<p><span style="color: #000000;">Now we access the administration web interface and enable the SAML application in the applications panel</span></p>
<p><span style="text-decoration: underline;"><span style="color: #000000; font-size: large; text-decoration: underline;">Configuration</span></span></p>
<p><span style="color: #000000;">We access the administration panel and go to the SAML application section where we should configure some options.</span></p>
<p><span style="color: #000000;">In the &#8220;Basic&#8221; tab we can configure:</span></p>
<ul>
<li><span style="color: #000000;">simpleSAMLphp related options such as its path and the SP auth source which we want to authenticate with.</span></li>
<li><span style="color: #000000;">automatic provisioning support and if we want to update the user information every time the user performs the login process.</span></li>
<li><span style="color: #000000;">a set of internal ownCloud groups that won&#8217;t be modified by the SAML application.</span></li>
<li><span style="color: #000000;">a default group which will be associated with the user in case the SAML group is not found in ownCloud.</span></li>
</ul>
<div class="mceTemp mceIEcenter">
<dl id="attachment_1844" class="wp-caption aligncenter" style="width: 648px;">
<dt><span style="color: #000000;"><a href="http://www.yaco.es/blog/uniquid/2012/06/implementado-plugin-saml-para-owncloud/attachment/config/" rel="attachment wp-att-1844"><span style="color: #000000;"><img class=" " title="configuration 1" src="http://www.yaco.es/blog/wp-content/uploads/2012/06/config.png" alt="Base tab of the configuration panel of the SAML app of owncloud" width="638" height="302" /></span></a></span></dt>
<dd><span style="color: #000000;">Basic tab of the configuration panel of the SAML app</span></dd>
</dl>
</div>
<p><span style="color: #000000;">In the &#8220;Mapping&#8221; tab we should configure which attributes from the SAML assertion should be used for the username, email and group of the user in ownCloud..</span></p>
<div class="mceTemp mceIEcenter">
<dl id="attachment_1845" class="wp-caption aligncenter" style="width: 701px;">
<dt><span style="color: #000000;"><a href="http://www.yaco.es/blog/uniquid/2012/06/implementado-plugin-saml-para-owncloud/attachment/config2/" rel="attachment wp-att-1845"><span style="color: #000000;"><img title="configuration 2" src="http://www.yaco.es/blog/wp-content/uploads/2012/06/config2.png" alt="Mapping tab of the configuration panel of the SAML app of owncloud" width="691" height="246" /></span></a></span></dt>
</dl>
</div>
<p><span style="text-decoration: underline;"><span style="color: #000000; font-size: large; text-decoration: underline;">How it works and usage.</span></span></p>
<p style="text-align: justify;"><span style="color: #000000;">When we enable the SAML application, a new link will be displayed at the bottom of the login form. When this link is activated we will be redirected to the Identity Provider configured in the Service Provider in simpleSAMLphp.</span></p>
<p style="text-align: justify;"><span style="color: #000000;">If the &#8220;autocreate user&#8221; option is enabled, the user will be created if he does not exist in ownCloud user storage. If this option is disabled and the user is not already provisioned in ownCloud, the access will be denied.</span></p>
<p style="text-align: justify;"><span style="color: #000000;">If the &#8220;update user data after login&#8221; option is enabled, the user and group information will be updated in each SAML access. This also handles the case of deprovisioning the groups that are not listed in the SAML assertion anymore with the exception of the group listed in the &#8220;groups that will not be unlinked from the user when sync the IdP and the ownCloud&#8221;option.</span></p>
<p style="text-align: justify;"><span style="text-decoration: underline; color: #000000; font-size: large;">How the ownCloud SAML application was developed?</span></p>
<p style="text-align: justify;"><span style="color: #000000;">ownCloud has some of the typical problems we have faced before when &#8220;domesticating&#8221; an application in a SAML environment. The authentication infraestructure is coupled to the idea of user credentials being a username and a password. This means the password is a required field in the user database table. As you should probably know in a SAML environment the applications never store passwords.</span></p>
<p style="text-align: justify;"><span style="color: #000000;">Let&#8217;s have a quick look to the function declaration of the authentication base class which will be extended by the authentication backends that are called in the login process:</span></p>
<p><span style="font-size: small; color: #333399;">public static function login( $uid, $password ){</span></p>
<p><span style="font-size: small; color: #333399;">    &#8230;</span></p>
<p><span style="font-size: small; color: #333399;">    $uid = self::checkPassword( $uid, $password );</span></p>
<p><span style="font-size: small; color: #333399;">    if ($uid) {</span></p>
<p><span style="font-size: small; color: #333399;">        session_generate_id();</span></p>
<p><span style="font-size: small; color: #333399;">        self::setUserId($uid);</span></p>
<p><span style="font-size: small; color: #333399;">        return true;</span></p>
<p><span style="font-size: small; color: #333399;">    }</span></p>
<p><span style="font-size: small; color: #333399;">    return false;</span></p>
<p><span style="font-size: small; color: #333399;">}</span></p>
<p><span style="font-size: small; color: #333399;">public static function createUser( $uid, $password )</span></p>
<p>As you can see the login function in the core of ownCloud calls the checkPassword function wich expect a username and a password, which are provided by the login form. This information is also required to create a user.</p>
<p style="text-align: justify;"><span style="color: #000000;">We have created an independent view where we redirect the user when he clicks on the SAML link which this code:</span></p>
<p><span style="color: #000000;">// simpleSAMLphp library load</span></p>
<p><span style="color: #333399; font-size: small;">include_once($sspPath.&#8221;/lib/_autoload.php&#8221;);</span></p>
<p><span style="color: #000000;">// SAML authentication initialization</span></p>
<p><span style="color: #333399; font-size: small;">$auth = new SimpleSAML_Auth_Simple($spSource);</span></p>
<p><span style="color: #000000;">// We force the user to be authenticated</span></p>
<p><span style="color: #333399; font-size: small;">$auth-&gt;requireAuth();</span></p>
<p><span style="color: #000000;">// Once he is authenticated and we have a valid session in the SP, we have to make a call to the ownCloud login function but we don&#8217;t give it the real username or password.</span></p>
<p><span style="color: #333399; font-size: small;">OC_User::login(&#8216; &#8216;, &#8216; &#8216;)</span></p>
<p><span style="color: #000000;">This calls all the authentication backend in cascade until one of them is successful. In this case no one will be successful until we get to the SAML backend. In this backend we check there is a session at the SP and if so, we get the user information and start the session in ownCloud.</span></p>
<p><span style="color: #333399; font-size: small;">public function checkPassword($uid, $password){</span></p>
<p><span style="color: #333399; font-size: small;">    if(!$this-&gt;auth-&gt;isAuthenticated()) {</span></p>
<p><span style="color: #333399; font-size: small;">        return false;</span></p>
<p><span style="color: #333399; font-size: small;">    }</span></p>
<p><span style="color: #333399; font-size: small;">    $attributes = $this-&gt;auth-&gt;getAttributes();</span></p>
<p><span style="color: #333399; font-size: small;">    if (array_key_exists($this-&gt;usernameMapping, $attributes)) {</span></p>
<p><span style="color: #333399; font-size: small;">        $uid = $attributes[$this-&gt;usernameMapping][0];</span></p>
<p><span style="color: #333399; font-size: small;">        OC_Log::write(&#8216;saml&#8217;,'Authenticated user &#8216;.$uid,OC_Log::DEBUG);</span></p>
<p><span style="color: #333399; font-size: small;">    }</span></p>
<p><span style="color: #333399; font-size: small;">    else {</span></p>
<p><span style="color: #333399; font-size: small;">        OC_Log::write(&#8216;saml&#8217;,'Not found attribute used to get the username (&#8220;&#8216;.$this-&gt;usernameMapping.&#8217;&#8221;) at the requested saml attribute</span></p>
<p><span style="color: #333399; font-size: small;">assertion&#8217;,OC_Log::DEBUG);</span></p>
<p><span style="color: #333399; font-size: small;">    }</span></p>
<p><span style="color: #333399; font-size: small;">    return $uid;</span></p>
<p><span style="color: #333399; font-size: small;">}</span></p>
<p><span style="color: #000000;">After that, in the post-login hooks available in ownCloud, we create or update the user if that is required.</span></p>
<p><span style="color: #000000;">As we saw, the password is a required attribute so every time we create a user we generate a random password for him.</span></p>
<p><span style="color: #000000;">Another typical problem when integrating an application in a SAML environment is the Single Log Out problem when this process is started in a different application from ownCloud. In this case the ownCloud log out is not supported.</span></p>
<p><span style="color: #000000;">The fix will require to check the SP session everytime the ownCloud session is checked.</span></p>
<p><span style="color: #000000;">In ownCloud the function that checks if the user is authenticated is this one:</span></p>
<p><span style="color: #333399; font-size: small;">public static function isLoggedIn() {</span><span style="color: #333399; font-size: small;">    static $is_login_checked = null;</p>
<p>if (!is_null($is_login_checked)) {</span></p>
<p><span style="color: #333399; font-size: small;">        return $is_login_checked;</span></p>
<p><span style="color: #333399; font-size: small;">    }</span></p>
<p><span style="color: #333399; font-size: small;">    if( isset($_SESSION['user_id']) AND $_SESSION['user_id']) {</span></p>
<p><span style="color: #333399; font-size: small;">        OC_App::loadApps(array(&#8216;authentication&#8217;));</span></p>
<p><span style="color: #333399; font-size: small;">        if (self::userExists($_SESSION['user_id']) ){</span></p>
<p><span style="color: #333399; font-size: small;">            return $is_login_checked = true;</span></p>
<p><span style="color: #333399; font-size: small;">       }</span></p>
<p><span style="color: #333399; font-size: small;">    }</span></p>
<p><span style="color: #333399; font-size: small;">    return $is_login_checked = false;</span></p>
<p><span style="color: #333399; font-size: small;">}</span></p>
<p>So if userExists returns false the access is denied.</p>
<p>We initially tried to implement the userExists function in our backend with this code:</p>
<p><span style="font-size: small; color: #333399;">public function userExists($uid){</span></p>
<p><span style="font-size: small; color: #333399;">    if ($this-&gt;auth-&gt;isAuthenticated()) {</span></p>
<p><span style="font-size: small; color: #333399;">        $attributes = $this-&gt;auth-&gt;getAttributes();</span></p>
<p><span style="font-size: small; color: #333399;">        if (array_key_exists($this-&gt;usernameMapping, $attributes)) {</span></p>
<p><span style="font-size: small; color: #333399;">            $saml_uid = $attributes[$this-&gt;usernameMapping][0];</span></p>
<p><span style="font-size: small; color: #333399;">            if($saml_uid &amp;&amp; $saml_uid == $uid) {</span></p>
<p><span style="font-size: small; color: #333399;">                OC_Log::write(&#8216;saml&#8217;,'SAML session found for user &#8216;.$uid,OC_Log::DEBUG);</span></p>
<p><span style="font-size: small; color: #333399;">                return true;</span></p>
<p><span style="font-size: small; color: #333399;">            }</span></p>
<p><span style="font-size: small; color: #333399;">        }</span></p>
<p><span style="font-size: small; color: #333399;">    }</span></p>
<p><span style="font-size: small; color: #333399;">    OC_Log::write(&#8216;saml&#8217;,'Deleting local session for user &#8216;.$uid,OC_Log::DEBUG);</span></p>
<p><span style="font-size: small; color: #333399;">    unset($_SESSION['user_id']);</span></p>
<p><span style="font-size: small; color: #333399;">    return false;</span></p>
<p><span style="font-size: small; color: #333399;">}</span></p>
<p style="text-align: justify;">The problem is that the global UserExists function calls the authentication backends in a chain and as soon as one of them returns true, the access is allowed and the other backends are not called anymore. So our previous function never get called.</p>
<p><span style="color: #333399; font-size: small;">public static function userExists($uid){</span></p>
<p><span style="color: #333399; font-size: small;">    foreach(self::$_usedBackends as $backend){</span></p>
<p><span style="color: #333399; font-size: small;">        $result=$backend-&gt;userExists($uid);</span></p>
<p><span style="color: #333399; font-size: small;">        if ($result===true){</span></p>
<p><span style="color: #333399; font-size: small;">            return true;</span></p>
<p><span style="color: #333399; font-size: small;">        }</span></p>
<p><span style="color: #333399; font-size: small;">    }</span></p>
<p><span style="color: #333399; font-size: small;">    return false;</span></p>
<p><span style="color: #333399; font-size: small;">}</span></p>
<p>At this point we didn&#8217;t find an easy way to solve this problem without changing ownCloud core code.<br />
<h3 class='related_post_title'>Related Posts:</h3>
<ul class='related_post'>
<li><a href='http://www.yaco.es/blog/uniquid/2012/02/proyecto-investigacion-provision-asincrona-basado-en-saml2-0/' title='&lt;!--:en--&gt;Research project about async user provisioning based on SAML2.0&lt;!--:--&gt;&lt;!--:es--&gt;Proyecto de investigación sobre Provisión asíncrona de usuarios basado en SAML2.0&lt;!--:--&gt;'><!--:en-->Research project about async user provisioning based on SAML2.0<!--:--><!--:es-->Proyecto de investigación sobre Provisión asíncrona de usuarios basado en SAML2.0<!--:--></a></li>
<li><a href='http://www.yaco.es/blog/uniquid/2012/01/presentado-proyecto-confia-en-iv-convocatoria-premios-aslan-administraciones-y-organismos-publicos/' title='&lt;!--:es--&gt;Presentado el proyecto CONFIA en la IV Convocatoria de Premios @asLAN a Administraciones y Organismos Públicos&lt;!--:--&gt;'><!--:es-->Presentado el proyecto CONFIA en la IV Convocatoria de Premios @asLAN a Administraciones y Organismos Públicos<!--:--></a></li>
<li><a href='http://www.yaco.es/blog/uniquid/2011/11/como-hacer-que-nuestras-aplicaciones-google-apps-autentiquen-contra-nuestra-fuente-usuarios-local-base-datos-ldap-etc-usando-uniquid-protocolo-saml-2-0/' title='&lt;!--:es--&gt;Como hacer que nuestras aplicaciones de Google Apps autentiquen contra nuestra fuente de usuarios local (base de datos, ldap, etc) usando Uniquid (protocolo SAML 2.0).&lt;!--:--&gt;'><!--:es-->Como hacer que nuestras aplicaciones de Google Apps autentiquen contra nuestra fuente de usuarios local (base de datos, ldap, etc) usando Uniquid (protocolo SAML 2.0).<!--:--></a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.yaco.es/blog/en/uniquid/2012/06/implementado-plugin-saml-para-owncloud/feed/</wfw:commentRss>
		<slash:comments>14</slash:comments>
		</item>
		<item>
		<title>(Español) Asistimos al WBSDay-2012 en Madrid.</title>
		<link>http://www.yaco.es/blog/en/uniquid/2012/06/asistimos-al-wsbday-2012-en-madrid/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=asistimos-al-wsbday-2012-en-madrid</link>
		<comments>http://www.yaco.es/blog/en/uniquid/2012/06/asistimos-al-wsbday-2012-en-madrid/#comments</comments>
		<pubDate>Fri, 15 Jun 2012 12:27:48 +0000</pubDate>
		<dc:creator>smartin</dc:creator>
				<category><![CDATA[Events]]></category>
		<category><![CDATA[uniquid]]></category>

		<guid isPermaLink="false">http://www.yaco.es/blog/?p=1824</guid>
		<description><![CDATA[<p>Sorry, this entry is only available in Spanish </p> Related Posts: No Related Posts]]></description>
			<content:encoded><![CDATA[<p>Sorry, this entry is only available in Spanish </p>
<h3 class='related_post_title'>Related Posts:</h3>
<ul class='related_post'>
<li>No Related Posts</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.yaco.es/blog/en/uniquid/2012/06/asistimos-al-wsbday-2012-en-madrid/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>(Español) Estuvimos en la TNC 2012</title>
		<link>http://www.yaco.es/blog/en/uniquid/2012/05/estuvimos-en-tnc-2012/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=estuvimos-en-tnc-2012</link>
		<comments>http://www.yaco.es/blog/en/uniquid/2012/05/estuvimos-en-tnc-2012/#comments</comments>
		<pubDate>Sat, 26 May 2012 16:38:33 +0000</pubDate>
		<dc:creator>lgs</dc:creator>
				<category><![CDATA[Events]]></category>
		<category><![CDATA[events-uniquid]]></category>
		<category><![CDATA[uniquid]]></category>
		<category><![CDATA[tnc]]></category>

		<guid isPermaLink="false">http://www.yaco.es/blog/?p=1814</guid>
		<description><![CDATA[<p>Sorry, this entry is only available in Spanish </p> Related Posts: No Related Posts]]></description>
			<content:encoded><![CDATA[<p>Sorry, this entry is only available in Spanish </p>
<h3 class='related_post_title'>Related Posts:</h3>
<ul class='related_post'>
<li>No Related Posts</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.yaco.es/blog/en/uniquid/2012/05/estuvimos-en-tnc-2012/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>How to integrate forms in the Django admin site? django-form-admin</title>
		<link>http://www.yaco.es/blog/en/django/2012/05/how-to-integrate-forms-in-the-django-admin-site/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=how-to-integrate-forms-in-the-django-admin-site</link>
		<comments>http://www.yaco.es/blog/en/django/2012/05/how-to-integrate-forms-in-the-django-admin-site/#comments</comments>
		<pubDate>Tue, 15 May 2012 09:02:13 +0000</pubDate>
		<dc:creator>pmartin</dc:creator>
				<category><![CDATA[contribuciones]]></category>
		<category><![CDATA[django]]></category>
		<category><![CDATA[django-admin]]></category>
		<category><![CDATA[django-en]]></category>
		<category><![CDATA[django-form]]></category>
		<category><![CDATA[django-form-admin]]></category>
		<category><![CDATA[python]]></category>
		<category><![CDATA[python-en]]></category>

		<guid isPermaLink="false">http://www.yaco.es/blog/?p=1715</guid>
		<description><![CDATA[<p>It is very common having to add some feature only for the super users in our website, and it is common that the site where we put this feature is the admin site. Normally we try to hide from the user that he is (programmatically) outside of the <a title="Django" href="https://www.djangoproject.com/" target="_blank">Django</a> adiministration, to provide for [...]]]></description>
			<content:encoded><![CDATA[<p>It is very common having to add some feature only for the super users in our website, and it is common that the site where we put this feature is the admin site. Normally we try to hide from the user that he is (programmatically) outside of the <a title="Django" href="https://www.djangoproject.com/" target="_blank">Django</a> adiministration, to provide for a better user experience; so our view will have the same path prefix as the administration (/admin/), and the same styles.</p>
<p>If we use forms in these features, we have a layout problem, or mucho work with CSS, because Django renders the forms (as_p, as_ul, as_table) in a very different way compared to the admin site. The<a title="django-form-admin" href="http://pypi.python.org/pypi/django-form-admin" target="_blank"> django-form-admin</a> app is tailored to solve this problem.</p>
<p><span id="more-1715"></span></p>
<p>To show the diferences in layout between a normal form and another that uses django-form-admin, we&#8217;ll show an example of a form to update the value of some cookies defined in the settings.</p>
<p>For this we will create the following view, in for /admin/edit-cookies/:</p>
<pre class="brush:python" style="font-size: 12px;">@permission_required('my_perm')
def edit_cookies(request):
    initial = {}
    data = None
    if request.method == 'POST':
        data = request.POST
    for cookie in settings.COOKIES_EDITABLES:
        initial[cookie] = request.COOKIES.get(cookie, None)
    form = ChangeCookie(settings.COOKIES_EDITABLES,
                                      initial=initial, data=data)
    if form.is_valid():
        messages.info(request, _('Added the cookies'))
        response = HttpResponseRedirect(reverse('edit_cookies'))
        form.save(response)
        return response
    return render_to_response('foo/edit_cookies.html',
                              {'form': form},
                              context_instance=RequestContext(request))</pre>
<p>We now code a form, to create/modify/delete the cookies:</p>
<pre class="brush:python" style="font-size: 12px;">class ChangeCookie(forms.Form):

    def __init__(self, cookies, *args, **kwargs):
        for cookie in cookies:
            self.base_fields[cookie] = forms.CharField(required=False)
        super(ChangeCookie, self).__init__(*args, **kwargs)

    def save(self, response):
        for key, val in self.cleaned_data.items():
            if val:
                response.set_cookie(key, smart_str(val))
            else:
                response.delete_cookie(key)</pre>
<p>And the template to be rendered by our view, edit_cookies.html:</p>
<pre style="font-size: 12px;">{% extends "admin/base_site.html" %}
{% load i18n admin_static admin_modify %}
{% block extrahead %}
    {{ block.super }}
    {{ media }}
    {{ form.media }}
{% endblock %}
{% block extrastyle %}
    {{ block.super }}
    &lt;link rel="stylesheet" type="text/css" href="{% static "admin/css/forms.css" %}" /&gt;
{% endblock %}
{% block coltype %}
    {% if ordered_objects %}colMS{% else %}colM{% endif %}
{% endblock %}
{% block breadcrumbs %}
{% endblock %}
{% block content %}
    &lt;div id="content-main"&gt;
        &lt;form action="." method="POST"&gt;
            {% csrf_token %}
            {{ form }}
            &lt;div&gt;
                &lt;input type="submit" name="submit" value="{% trans "Update Cookies" %}"/&gt;
            &lt;/div&gt;
        &lt;/form&gt;
    &lt;/div&gt;
{% endblock %}</pre>
<p>The end result is <strong>not</strong> very good, because Django renders the forms in a very different way in the admin site.</p>
<p><a href="http://www.yaco.es/blog/django/2012/05/how-to-integrate-forms-in-the-django-admin-site/attachment/before-4/" rel="attachment wp-att-1745"><img class="alignnone size-full wp-image-1745" title="Sin django form admin" src="http://www.yaco.es/blog/wp-content/uploads/2012/04/before3.png" alt="" width="774" height="124" /></a></p>
<p>But if we install the django-form-admin application in out project and we add some like this in our form (<a href="http://pypi.python.org/pypi/django-form-admin#how-to-use-it" target="_blank">there are many ways to do it</a>: inheritance, delegation, implicit, explicit) the difference is more than considerable:</p>
<pre class="brush:python" style="font-size: 12px;">    def __unicode__(self):
        from formadmin.forms import as_django_admin
        return as_django_admin(self)

<a href="http://www.yaco.es/blog/django/2012/05/how-to-integrate-forms-in-the-django-admin-site/attachment/after-3/" rel="attachment wp-att-1750"><img class="alignnone size-full wp-image-1750" title="Con django-form-admin" src="http://www.yaco.es/blog/wp-content/uploads/2012/04/after2.png" alt="" width="753" height="219" /></a></pre>
<p>This app has only had a minimal change in the last year, so this is a stable version. No changes were needed to adapt it to Django 1.3 or Django 1.4.</p>
<p>I hope you like it.</p>
<h3 class='related_post_title'>Related Posts:</h3>
<ul class='related_post'>
<li><a href='http://www.yaco.es/blog/django/2011/12/pypi-y-yaco/' title='&lt;!--:en--&gt;PyPI and Yaco&lt;!--:--&gt;&lt;!--:es--&gt;PyPI y Yaco&lt;!--:--&gt;'><!--:en-->PyPI and Yaco<!--:--><!--:es-->PyPI y Yaco<!--:--></a></li>
<li><a href='http://www.yaco.es/blog/eventos/2012/07/how-visually-detect-cyclic-import-between-our-django-applications/' title='&lt;!--:en--&gt;How visually detect visually cyclic import between our django applications&lt;!--:--&gt;&lt;!--:es--&gt;Como detectar visualmente importaciones cíclicas entre nuestras aplicaciones django&lt;!--:--&gt;'><!--:en-->How visually detect visually cyclic import between our django applications<!--:--><!--:es-->Como detectar visualmente importaciones cíclicas entre nuestras aplicaciones django<!--:--></a></li>
<li><a href='http://www.yaco.es/blog/django/2012/02/a-simple-and-impossible-query-in-django/' title='&lt;!--:en--&gt;A simple and impossible query in django&lt;!--:--&gt;&lt;!--:es--&gt;Una simple e imposible consulta en django&lt;!--:--&gt;'><!--:en-->A simple and impossible query in django<!--:--><!--:es-->Una simple e imposible consulta en django<!--:--></a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.yaco.es/blog/en/django/2012/05/how-to-integrate-forms-in-the-django-admin-site/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>High Availability deployment using Red Hat and Virtualization</title>
		<link>http://www.yaco.es/blog/en/virtualizacion/2012/04/implantacion-alta-disponibilidad-con-red-hat-y-virtualizacion-2/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=implantacion-alta-disponibilidad-con-red-hat-y-virtualizacion-2</link>
		<comments>http://www.yaco.es/blog/en/virtualizacion/2012/04/implantacion-alta-disponibilidad-con-red-hat-y-virtualizacion-2/#comments</comments>
		<pubDate>Mon, 09 Apr 2012 08:20:12 +0000</pubDate>
		<dc:creator>aperezaranda</dc:creator>
				<category><![CDATA[Virtualization]]></category>
		<category><![CDATA[kvm]]></category>
		<category><![CDATA[libvirt]]></category>
		<category><![CDATA[Red Hat]]></category>

		<guid isPermaLink="false">http://www.yaco.es/blog/?p=1500</guid>
		<description><![CDATA[<p>Yaco has implemented a virtualized HA cluster for the web site of Patronato de la Alhambra, <a title="www.alhambra-patronato.es" href="http://www.alhambra-patronato.es" target="_blank">www.alhambra-patronato.es</a> . This monumental place is one of the most visited in Spain and its web site is very important for the tourist strategy, knowledge, research and diffussion. The Web site gets more than 1 million [...]]]></description>
			<content:encoded><![CDATA[<p>Yaco has implemented a virtualized HA cluster for the web site of Patronato de la Alhambra, <a title="www.alhambra-patronato.es" href="http://www.alhambra-patronato.es" target="_blank">www.alhambra-patronato.es</a> . This monumental place is one of the most visited in Spain and its web site is very important for the tourist strategy, knowledge, research and diffussion. The Web site gets more than 1 million visits yearly with a very high grown (40% with respect to 2010).</p>
<p><span id="more-1500"></span></p>
<div id="attachment_1488" class="wp-caption aligncenter" style="width: 657px"><a href="http://www.yaco.es/blog/uncategorized/2012/03/implantacion-alta-disponibilidad-con-red-hat-y-virtualizacion/attachment/postsobreimplantacionclusteralhambra/" rel="attachment wp-att-1488"><img class="size-full wp-image-1488" title="Fail Over with KVM + Libvirt + SAN" src="http://www.yaco.es/blog/wp-content/uploads/2012/03/PostsobreimplantaciónClusterAlhambra.png" alt="Fail Over with KVM + Libvirt + SAN" width="647" height="528" /></a><p class="wp-caption-text">Basic fail over with KVM + Libvirt + SAN</p></div>
<p>By leveraging the use of virtualization we can clone, make snapshots and backup each node improving the update cycle. This was not possible with the old cluster based on physical machines.</p>
<p>We use Red Hat Enterprise 6 (RHEL6) and its Cluster Suite (RHCS) because is very easy to make Fail-Over domains, even when the software services are not designed for clustering or their hardware requirements are too high. For example, MySQL usually needs 4 nodes as a minimum, not counting front-end apps nodes like Tomcat, Apache, PHP.</p>
<p>We use a SAN node connected with fully redundant multipath fiber channel (channels, chassis and units) to store shared portal data, such as resource files and data base files, and virtual machine images. This redundant storage is more reliable than <a title="DRBD" href="http://en.wikipedia.org/wiki/DRBD" target="_blank">DRDB</a> systems (Distributed Replicated Block Device), although it’s not cheap.</p>
<p>RHCS includes in its features CLVM, a clustered version of LVM storage. This allows to use LVM tags are to manage the “quorum” status of volume groups avoiding the need for unique quorum disk. When a node tries to access a volume group (mounting / writting), a check is done to verify that no other nodes are using it. This feature is very useful to share storage with data bases or search engines such as Apache Solr or Sphinx.</p>
<p>The RHCS is installed on Virtual marchines managed with Libvirt + KVM. The fencing cluster points from guests to other virtualization hosts. This means that a virtual machine A on virtualization node A can send a fence command to virtualization node B, and then halt Virtual machine B. This is done with fence_ilo, but fence_virt / fence_vmx (fence to virt) can also be used. Examples of fencing include an AC blackout on the real machine or a KILL Signal sent to the KVM instance.</p>
<p>All the clusters can be managed by Conga, the web UI, which is installed on another RHEL6 machine apart of the fail over domain machines. This could be virtualized too and HA is not required. Cluster functionallities are not affected if the machine running Conga or the service itself are stopped. With this application you can setup all the fencing, services and service groups configuration. As it can manage more than one cluster domain, this allows us to use a centralized managed UI for many cluster systems.</p>
<table border="0">
<tbody>
<tr>
<td><a href="http://www.redhat.com"><img class="aligncenter  wp-image-1549" style="background-color: #ddd;" title="logo redhat" src="http://www.yaco.es/blog/wp-content/uploads/2012/03/redhat-logo.png" alt="logo redhat" width="152" height="50" /></a></td>
<td><a href="http://www.libvirt.org/"><img class="aligncenter  wp-image-1548" title="logo libvirt" src="http://www.yaco.es/blog/wp-content/uploads/2012/03/libvirtLogo.png" alt="logo libvirt" width="62" height="50" /></a></td>
<td><a href="http://www.linux-kvm.org"><img class="aligncenter  wp-image-1547" title="logo kvm" src="http://www.yaco.es/blog/wp-content/uploads/2012/03/kvmbanner-logo2.png" alt="logo kvm" width="150" height="50" /></a></td>
</tr>
</tbody>
</table>
<h3 class='related_post_title'>Related Posts:</h3>
<ul class='related_post'>
<li>No Related Posts</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.yaco.es/blog/en/virtualizacion/2012/04/implantacion-alta-disponibilidad-con-red-hat-y-virtualizacion-2/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>(Español) Entrevista a Pablo Caro, quién hay detrás de Yaco Sistemas</title>
		<link>http://www.yaco.es/blog/en/yaco/2012/03/entrevista-pcaro/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=entrevista-pcaro</link>
		<comments>http://www.yaco.es/blog/en/yaco/2012/03/entrevista-pcaro/#comments</comments>
		<pubDate>Tue, 13 Mar 2012 10:10:19 +0000</pubDate>
		<dc:creator>iservan</dc:creator>
				<category><![CDATA[Equipo]]></category>
		<category><![CDATA[Yaco]]></category>

		<guid isPermaLink="false">http://www.yaco.es/blog/?p=1442</guid>
		<description><![CDATA[<p>Sorry, this entry is only available in Spanish </p> Related Posts: No Related Posts]]></description>
			<content:encoded><![CDATA[<p>Sorry, this entry is only available in Spanish </p>
<h3 class='related_post_title'>Related Posts:</h3>
<ul class='related_post'>
<li>No Related Posts</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.yaco.es/blog/en/yaco/2012/03/entrevista-pcaro/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>PEER 0.9.0 highlights</title>
		<link>http://www.yaco.es/blog/en/uniquid/2012/03/english-peer-0-9-0-highlights/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=english-peer-0-9-0-highlights</link>
		<comments>http://www.yaco.es/blog/en/uniquid/2012/03/english-peer-0-9-0-highlights/#comments</comments>
		<pubDate>Sun, 04 Mar 2012 11:00:51 +0000</pubDate>
		<dc:creator>lgs</dc:creator>
				<category><![CDATA[software]]></category>
		<category><![CDATA[uniquid]]></category>

		<guid isPermaLink="false">http://www.yaco.es/blog/?p=1411</guid>
		<description><![CDATA[<p>In this post I&#8217;ll show you the new features that PEER 0.9.0 delivers. This release just hit the streets last saturday and is the result of another month of work from Yaco team. We have improved the metadata editor, added a new entity subscription feature and fix many small bugs and glitches.</p> <p></p> Metadata edition [...]]]></description>
			<content:encoded><![CDATA[<p>In this post I&#8217;ll show you the new features that PEER 0.9.0 delivers. This release just hit the streets last saturday and is the result of another month of work from Yaco team. We have improved the metadata editor, added a new entity subscription feature and fix many small bugs and glitches.</p>
<p><span id="more-1411"></span></p>
<h2>Metadata edition improvements</h2>
<p>Now when you add or modify the certificates of an entity you have the option to specifying more details about them. You can choose the Algorithm that should be used with that certificate, its key length and other parameters. This information is then saved in the EncryptionMethod element of the metadata xml.</p>
<div id="attachment_1420" class="wp-caption aligncenter" style="width: 426px"><a href="http://www.yaco.es/blog/wp-content/uploads/2012/03/encryption-method.png"><img class=" wp-image-1420 " title="Encryption Method support" src="http://www.yaco.es/blog/wp-content/uploads/2012/03/encryption-method.png" alt="Encryption Method support" width="416" height="272" /></a><p class="wp-caption-text">You can select the Algorithm, key size and OAEP parameters</p></div>
<p>Furthermore, there is support for more MDUI elements now:  the PrivacyStatementURL and InformationURL elements are available so you can easily add these urls (in several languages) to complete the information about your entity and improve the discovery and other processes.</p>
<div id="attachment_1419" class="wp-caption aligncenter" style="width: 429px"><a href="http://www.yaco.es/blog/wp-content/uploads/2012/03/metadata-more-mdui.png"><img class=" wp-image-1419 " title="Support for Information and Privacy Statement URLs" src="http://www.yaco.es/blog/wp-content/uploads/2012/03/metadata-more-mdui.png" alt="Support for Information and Privacy Statement URLs" width="419" height="477" /></a><p class="wp-caption-text">Support for Information and Privacy Statement URLs</p></div>
<p>Finally, we have extended the SAMLmetaJS editor beyond the borders of Service Providers metadata. Until now, it only managed SPSSODescriptor elements but with this release it is now possible to define some parts of the IDPSSODescriptor elements. Basically you can define Identity Provider&#8217;s endpoints and certificates. In order to accomplish this, you should select the role (IdP or SP) in the endpoint and certificate forms. We expect to increase this IdP support in the future for other elements like the Extensions element.</p>
<div id="attachment_1416" class="wp-caption aligncenter" style="width: 430px"><a href="http://www.yaco.es/blog/wp-content/uploads/2012/03/metadata-role-radio-button.png"><img class=" wp-image-1416 " title="Role choice for endpoints" src="http://www.yaco.es/blog/wp-content/uploads/2012/03/metadata-role-radio-button.png" alt="Role choice for endpoints" width="420" height="341" /></a><p class="wp-caption-text">You can specify in the endpoint is for the IdP or SP role</p></div>
<p>The development of these SAMLmetaJS features has been easier this time since the main developer of this library gave me commiter access. I&#8217;d like to thanks Andreas Soldberg for this confidence in us.</p>
<h2>Entity subscriptions</h2>
<p>This is a new feature that is still a little bit experimental and not yet finished. Even so we wanted to include the work we did in this release to gather some feedback. Basically you can subscribe to an entity now and get email notifications any time the endpoints of that entity are being down. I think it is a very useful feature if you run a federation but the only problem is the definition of <em>being down</em>. We had some discussion on the PEER mailing list and it looks like we may need to add a SAML extension to monitor this health state of entities.</p>
<div id="attachment_1421" class="wp-caption aligncenter" style="width: 178px"><a href="http://www.yaco.es/blog/wp-content/uploads/2012/03/monitor-endpoints.png"><img class=" wp-image-1421 " title="Monitor Endpoints menu item" src="http://www.yaco.es/blog/wp-content/uploads/2012/03/monitor-endpoints.png" alt="Monitor Endpoints menu item" width="168" height="178" /></a><p class="wp-caption-text">Monitor Endpoints menu item</p></div>
<div id="attachment_1422" class="wp-caption aligncenter" style="width: 315px"><a href="http://www.yaco.es/blog/wp-content/uploads/2012/03/monitor-endpoints-preferences.png"><img class=" wp-image-1422 " title="Monitor Endpoints Preferences" src="http://www.yaco.es/blog/wp-content/uploads/2012/03/monitor-endpoints-preferences.png" alt="Monitor Endpoints Preferences" width="305" height="140" /></a><p class="wp-caption-text">Monitor Endpoints Preferences</p></div>
<h2>Details, details, details&#8230;.</h2>
<p>As you may know, the devil is in the details. We tried to polish small glitches and imperfections as we go. In this release we have refactored the views of the entity&#8217;s application since it was starting to become a huge python module. We have shown IdP information (that you can edit now in the SAMLmetaJS editor) in the details view. The certificates are now rendered in lines of 64 characters so no horizontal scrolling is going to happen anymore.</p>
<div id="attachment_1424" class="wp-caption aligncenter" style="width: 447px"><a href="http://www.yaco.es/blog/wp-content/uploads/2012/03/idp-rendering.png"><img class=" wp-image-1424 " title="Better IdP rendering" src="http://www.yaco.es/blog/wp-content/uploads/2012/03/idp-rendering.png" alt="Better IdP rendering" width="437" height="235" /></a><p class="wp-caption-text">IdP endpoints are shown and certificate are better rendered</p></div>
<p>We have also fixed small bugs like not using the right legal file in the terms of use widget of the metadata upload file form (issue #2), the use of ugettext_lazy instead of ugettext in some parts of the code, a crash in the particular case of an entity that does not have metadata yet, the way the diff was computed in the review before commit dialog and so on so on.</p>
<h2>Future work</h2>
<p>According to our roadmap, in the next release we plan to add Nagios integration and remove PEER entity&#8217;s name, forcing the existence of Entity IDs. In addition, we are going to improve external authentication by upgrading our dependencies to latest pysaml2 version which fixes many things.<br />
<h3 class='related_post_title'>Related Posts:</h3>
<ul class='related_post'>
<li>No Related Posts</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.yaco.es/blog/en/uniquid/2012/03/english-peer-0-9-0-highlights/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
