<?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>Alex van Herwijnen</title>
	<atom:link href="http://www.alexvanherwijnen.nl/feed" rel="self" type="application/rss+xml" />
	<link>http://www.alexvanherwijnen.nl</link>
	<description>PS Alex:\&#62; Get-Blog</description>
	<lastBuildDate>Sat, 09 Jan 2010 15:29:16 +0000</lastBuildDate>
	
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Squid as a captive portal&#8230; part 2</title>
		<link>http://www.alexvanherwijnen.nl/blog/31-squid-as-a-captive-portal-part-2?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=squid-as-a-captive-portal-part-2</link>
		<comments>http://www.alexvanherwijnen.nl/blog/31-squid-as-a-captive-portal-part-2#comments</comments>
		<pubDate>Thu, 07 Jan 2010 22:20:24 +0000</pubDate>
		<dc:creator>Alex van Herwijnen</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[auth]]></category>
		<category><![CDATA[captive portal]]></category>
		<category><![CDATA[dev]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[proxy]]></category>
		<category><![CDATA[squid]]></category>

		<guid isPermaLink="false">http://www.alexvanherwijnen.nl/?p=31</guid>
		<description><![CDATA[This is long overdue, but here it is anyway. The source codes I used to set up Squid as a captive portal. The bundle also includes the squid config file, the redirector script, and the authentication pages.
Requirements:

Squid
Apache, PHP 5.2 or higher, and MySQL (which are easily found on almost every Linux-based machine)
Memcached
The Memcached PHP Extension [...]]]></description>
			<content:encoded><![CDATA[<p>This is long overdue, but here it is anyway. The source codes I used to set up Squid as a captive portal. The bundle also includes the squid config file, the redirector script, and the authentication pages.</p>
<p><strong>Requirements:</strong></p>
<ul>
<li><a href="http://www.squid-cache.org/" target="_blank">Squid</a></li>
<li>Apache, PHP 5.2 or higher, and MySQL (which are easily found on almost every Linux-based machine)</li>
<li><a href="http://memcached.org/" target="_blank">Memcached</a></li>
<li>The <a href="http://pecl.php.net/package/memcache">Memcached PHP Extension</a> from PECL</li>
<li>The <a href="http://www.kohanaphp.com" target="_blank">Kohana PHP Framework</a></li>
</ul>
<p>In my code, memcached is configured to be running on <em>localhost</em> on port <em>28888</em>.<span id="more-31"></span><strong> </strong></p>
<p><strong>Getting started:</strong></p>
<p>Once you have these things set up, these steps should get you up and running:</p>
<ul>
<li>Extract all files to a folder, somewhere, on your computer</li>
<li>Create a new database and import <em>SquidCaptive.sql</em> into it</li>
<li>Set up a database user which can access the database</li>
<li>Add a user to the users table in the database. Use <em>sha1</em>-hashing for the password.</li>
</ul>
<ul>
<li>Extract the <em>approot</em> and <em>www</em>-folders to a folder on your webserver</li>
<li>Configure a vhost in Apache with the document root set to the <em>www</em>-folder. Use a non-standard port number if possible (like, 8080 or 81)</li>
<li>In <em>index.php</em> in the <em>www</em>-folder, change the <em>$kohana_system</em> variable to the path where Kohana&#8217;s files are stored. I did not include the full distribution of Kohana, but only the files I needed.</li>
<li>In the <em>approot</em>-folder, go to <em>config/database.php</em> and edit it to reflect the correct database user, password and database itself</li>
</ul>
<ul>
<li>Place <em>scripts/redirect.php</em> in a folder which the Squid-user can access.</li>
<li>In redirect.php, change the host to match the host (or IP) and port of the vhost hosting the authentication page. For example, <em>proxy.lan:8081</em>.</li>
<li>Update your <em>squid.conf</em> so it uses the redirector&#8230; see my squid.conf for details. My squid.conf might have incorrect settings, I am not a Squid-expert but they worked for me.</li>
</ul>
<p>I think this is about it&#8230; do note that it was only a quick implementation which is not feature complete at all. Session don&#8217;t expire until memcached is restarted, there is no user registration or billing yet, all it does is authentication. However, it&#8217;s a start. Also, beware that not everything is &#8216;best practice&#8217;&#8230; I have a few things hardcoded and not configured, such as the vhost and the host and port memcached is running on.</p>
<p>If you need more tips, help or advice, feel free to send me an e-mail. I&#8217;ll do my best to help you.</p>
<p>Download: <a href="http://www.alexvanherwijnen.nl/wp-content/uploads/2010/01/Squid-Captive-Portal.zip">Squid Captive Portal</a></p>
<p><a rel="license" href="http://creativecommons.org/licenses/by/3.0/us/"><img style="border-width: 0;" src="http://i.creativecommons.org/l/by/3.0/us/88x31.png" alt="Creative Commons License" /></a><br />
<span>Squid Captive Portal</span> by <span>Alex van Herwijnen</span> is licensed under a <a rel="license" href="http://creativecommons.org/licenses/by/3.0/us/">Creative Commons Attribution 3.0 License</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.alexvanherwijnen.nl/blog/31-squid-as-a-captive-portal-part-2/feed</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>ASP.NET Ajax, UpdatePanels and ClientScriptBlocks</title>
		<link>http://www.alexvanherwijnen.nl/blog/15-asp-net-ajax-updatepanels-and-clientscriptblocks?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=asp-net-ajax-updatepanels-and-clientscriptblocks</link>
		<comments>http://www.alexvanherwijnen.nl/blog/15-asp-net-ajax-updatepanels-and-clientscriptblocks#comments</comments>
		<pubDate>Tue, 22 Dec 2009 10:33:26 +0000</pubDate>
		<dc:creator>Alex van Herwijnen</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[ajax]]></category>
		<category><![CDATA[asp.net]]></category>
		<category><![CDATA[dev]]></category>
		<category><![CDATA[updatepanel]]></category>

		<guid isPermaLink="false">http://www.alexvanherwijnen.nl/?p=15</guid>
		<description><![CDATA[For the project I am currently doing, I&#8217;m helping in developing a web application. The application itself is built on ASP.NET Ajax and thus uses UpdatePanels. One of the advantages of an UpdatePanel is that you can use the ScriptManager to execute Javascript on the client side. Today, a coworker attended me to the fact [...]]]></description>
			<content:encoded><![CDATA[<p>For the project I am currently doing, I&#8217;m helping in developing a web application. The application itself is built on ASP.NET Ajax and thus uses UpdatePanels. One of the advantages of an UpdatePanel is that you can use the ScriptManager to execute Javascript on the client side. Today, a coworker attended me to the fact that the ScriptManager.RegisterClientScriptBlock was not working from his code behind. The code was built as a user control (.ascx), containing an UpdatePanel from which he executed his code. The control itself was loaded dynamically onto the page. The code simply did not execute, and no errors or exceptions were thrown either.</p>
<p>After some searching (Google, Bing, you choose), the solution turned out to be a simple one: he called the RegisterClientScriptBlock-method specifying the UpdatePanel as control to register on, which is IntelliSense&#8217;s default suggestion. After <a href="http://msdn.microsoft.com/en-us/library/system.web.ui.scriptmanager.registerclientscriptblock.aspx" target="_blank">reading through MSDN</a>, I found out that an overloaded method is available which accepts a page.</p>
<p>What didn&#8217;t work:<br />
<code>ScriptManager.RegisterClientScriptBlock(this.UpdatePanel1, typeof(UpdatePanel) Guid.NewGuid().ToString(), myScript, true);</code></p>
<p>What worked:<br />
<code>ScriptManager.RegisterClientScriptBlock(this.Page, typeof(UpdatePanel) Guid.NewGuid().ToString(), myScript, true);</code></p>
]]></content:encoded>
			<wfw:commentRss>http://www.alexvanherwijnen.nl/blog/15-asp-net-ajax-updatepanels-and-clientscriptblocks/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Fyra&#8230; snel en comfortabel?</title>
		<link>http://www.alexvanherwijnen.nl/blog/12-fyra-snel-en-comfortabel?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=fyra-snel-en-comfortabel</link>
		<comments>http://www.alexvanherwijnen.nl/blog/12-fyra-snel-en-comfortabel#comments</comments>
		<pubDate>Mon, 05 Oct 2009 19:58:11 +0000</pubDate>
		<dc:creator>Alex van Herwijnen</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[fyra]]></category>
		<category><![CDATA[ns hispeed]]></category>
		<category><![CDATA[rant]]></category>
		<category><![CDATA[train]]></category>
		<category><![CDATA[trein]]></category>

		<guid isPermaLink="false">http://www.alexvanherwijnen.nl/?p=12</guid>
		<description><![CDATA[Nou, wees er maar trots op. Nederland heeft ook een &#8216;hogesnelheidslijn&#8217;&#8230; men rijdt 160 met standaardrijtuigen, getrokken door een rode loc i.p.v. een gele. Vanaf woensdag geldt het introductietarief niet meer en mag iedereen dus de volle mep gaan betalen (toeval?).
Iets van € 7,- per enkele rit bovenop de prijs voor een normaal kaartje Amsterdam [...]]]></description>
			<content:encoded><![CDATA[<p>Nou, wees er maar trots op. Nederland heeft ook een &#8216;hogesnelheidslijn&#8217;&#8230; men rijdt 160 met standaardrijtuigen, getrokken door een rode loc i.p.v. een gele. Vanaf woensdag geldt het introductietarief niet meer en mag iedereen dus de volle mep gaan betalen (toeval?).</p>
<p>Iets van € 7,- per enkele rit bovenop de prijs voor een normaal kaartje Amsterdam &#8211; Rotterdam. Mensen die een maandkaart hadden gekocht (zoals ik er eentje had) mogen &#8216;m dan nog een weekje langer gebruiken (<a href="http://www.nshispeed.nl/nl/nieuws-over-fyra-amsterdam-rotterdam">bron</a>), een schrale troost.<br />
<span id="more-12"></span><br />
De dagjesmens mag doodleuk een godsvermogen uitgeven om met een stammetje ICRm mee te mogen, wat met een ongelofelijke rotherrie door een stel tunnels en verdiepte bakken heentrekt à 160 km/h. In België rijdt men 200 km/h over hogesnelheidslijnen, en daar doet men tenminste gewoon normaal. </p>
<p>Ik heb € 64,50 betaald voor een maandkaart, (€ 64,- + € 0,50 lokettoeslag voor iets wat nog niet eens in de automaat verkrijgbaar was!) wat neerkomt op de prijs van 32 toeslagen voor een enkele rit, ofwel 16 dagretourtjes.</p>
<p>Fyra heeft donderdag, vrijdag, maandag en dinsdag niet gereden, wat al 8 ritten minder zijn. Daarnaast viel de trein nog eens 3x uit in een week tijd, en heb ik al op de eerste dag (!) een vertraging gehad van 35 minuten, wat een hoop tijdverspilling is dus dat beschouw ik ook als verloren.</p>
<p>Mijn baas verwacht dat ik 8 uur per dag werk, als ik behoorlijk te laat kom op mijn werk omdat Fyra niet of heel erg vertraagd reed (+5 vertrekken in Rotterdam, +14 in Amsterdam), moet ik die tijd (natuurlijk) ook inhalen. Daardoor heb ik ook al een keer of 4 de trein terug gemist, waardoor er van de 32 toeslagen die ik betaald heb er uiteindelijk 16 overbleven.</p>
<p>Dit is dus uiteindelijk <strong>duurder</strong> dan het kopen van 16 losse toeslagen, wat me € 32,- gekost zou hebben. Ik heb dus € 32,50 weggegooid aan een trein die hartstikke onbetrouwbaar blijkt te zijn.</p>
<p>Hoewel ik an sich niet zo&#8217;n last heb van geluid (ik kan tenslotte ook uitstekend tegen doedelzakspelende VIRMs) is het voortdurende monotone gebrom in die ICRm-rijtuigen behoorlijk storend. Het gebrek aan GSM- en 3G-ontvangst in de tunnels is storend, evenals de tunnels zelf.</p>
<p>In de tunnels zie je absoluut niks, de rest van de tijd zit je de helft van de tijd tegen geluidsschermen aan te kijken. De railcatering die langskomt is veel te duur (meer dan € 2,- betalen voor een bak koffie? Afzetters.) en de aansluitingen op verschillende andere treinen zijn slecht te noemen. Het personeel is dan weer wel erg vriendelijk, maar dat mag wel ook&#8230; voor die centen.</p>
<p>Ik ga niet meer met Fyra reizen: het is zijn geld absoluut niet waard.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.alexvanherwijnen.nl/blog/12-fyra-snel-en-comfortabel/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Using Squid to build a captive portal, for free!</title>
		<link>http://www.alexvanherwijnen.nl/blog/6-using-squid-to-build-a-captive-portal-for-free?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=using-squid-to-build-a-captive-portal-for-free</link>
		<comments>http://www.alexvanherwijnen.nl/blog/6-using-squid-to-build-a-captive-portal-for-free#comments</comments>
		<pubDate>Sun, 31 May 2009 17:05:15 +0000</pubDate>
		<dc:creator>Alex van Herwijnen</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[dev]]></category>
		<category><![CDATA[open source]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[proxy]]></category>
		<category><![CDATA[squid]]></category>

		<guid isPermaLink="false">http://www.alexvanherwijnen.nl/?p=6</guid>
		<description><![CDATA[The other day I was a bit bored so I wanted to try something new. I wanted to build a proxy server which required me to authenticate, but I was not satisfied with the basic HTTP authentication options Squid gave me. I wanted a nice looking webpage, with a form. I also wanted something which [...]]]></description>
			<content:encoded><![CDATA[<p>The other day I was a bit bored so I wanted to try something new. I wanted to build a proxy server which required me to authenticate, but I was not satisfied with the basic HTTP authentication options Squid gave me. I wanted a nice looking webpage, with a form. I also wanted something which would allow “visitor self service”, like a “I forgot my password”-page, or a page where a user could pay and sign up.</p>
<p><a href="http://etc.alex-media.nl/blogfiles/UsingSquidtobuildacaptiveportalforfree_222E/image.png"><img style="border-width: 0; display: block; float: none; margin-left: auto; margin-right: auto;" title="image" alt="image" src="http://etc.alex-media.nl/blogfiles/UsingSquidtobuildacaptiveportalforfree_222E/image_thumb.png" border="0" height="269" width="454" /></a></p>
<p>This is the page I get when typing <a href="http://www.google.com">www.google.com</a> in the address bar of my browser. Only after authenticating,&nbsp; I get granted access to the internet. It isn’t just web filtering, every application that requires internet access will be denied until the authentication process has been completed.</p>
<p>What I was looking for, is called a <a href="http://en.wikipedia.org/wiki/Captive_portal" target="_blank">Captive portal</a>. According to Wikipedia:</p>
<p><span id="more-6"></span></p>
<blockquote>
<p>The captive portal technique forces an HTTP client on a network to see a special web page (usually for authentication purposes) before using the Internet normally. A captive portal turns a Web browser into an authentication device. This is done by intercepting all packets, regardless of address or port, until the user opens a browser and tries to access the Internet. At that time the browser is redirected to a web page which may require authentication and/or payment, or simply display an acceptable use policy and require the user to agree. Captive portals are used at most Wi-Fi hotspots, and it can be used to control wired access (e.g. apartment houses, hotel rooms, business centers, &#8220;open&#8221; Ethernet jacks) as well.</p>
</blockquote>
<p>I got inspired to do this after reading about <a href="http://www.blogspaper.org/2009/03/kapcheng-my-captive-portal-engine-using-squid-apache-and-php/" target="_blank">Kapcheng</a>, a project with exactly the same goal as mine. I asked for his sources and I got them, but after looking through them I saw it was not exactly what I was looking for. So, I decided to “roll my own”.</p>
<p><a href="http://etc.alex-media.nl/blogfiles/UsingSquidtobuildacaptiveportalforfree_222E/proxyweb.jpg"><img style="border-width: 0; margin: 0 0 4px 8px; display: inline;" title="proxy-web" alt="proxy-web" src="http://etc.alex-media.nl/blogfiles/UsingSquidtobuildacaptiveportalforfree_222E/proxyweb_thumb.jpg" align="right" border="0" height="145" width="244" /></a>This is exactly what I was looking for, and I implemented it in a nice way. In my implementation, I’m using Squid as a proxy server with all clients behind a router. This means that all requests coming from clients within the same network (machines 1 and 2) will be authenticated, not just per client. </p>
<p><a href="http://etc.alex-media.nl/blogfiles/UsingSquidtobuildacaptiveportalforfree_222E/proxydirect.jpg"><img style="border-width: 0; margin: 0 0 4px 8px; display: inline;" title="proxy-direct" alt="proxy-direct" src="http://etc.alex-media.nl/blogfiles/UsingSquidtobuildacaptiveportalforfree_222E/proxydirect_thumb.jpg" align="right" border="0" height="184" width="244" /></a> This is a downside to my implementation, because of the router which I mentioned earlier, but the techniques I used here are still usable within a network. In that situation, clients connect directly from their machines to the machine running Squid (the gateway), and Squid catches the traffic and redirects it to the authentication page, or allows the traffic.</p>
<h3>Technical implementation</h3>
<p>I have a virtual private server (VPS) hosted at Strato, which isn’t expensive but gives me all the benefits of having a dedicated server. It’s much cheaper because it uses virtual machines. The VPS I have is running on CentOS 5.3, which is a full-blown Linux distribution optimized for servers.</p>
<p>On top of the CentOS-machine, I run Apache, PHP and MySQL – it’s a pretty typical LAMP setup. I install and update components using yum, because this doesn’t involve much installation work for me.</p>
<p><a href="http://www.squid-cache.org/" target="_blank">Squid</a> is a free, open source, web proxy server. It caches often-requested pages and images, so delivery to the end user is somewhat faster. It also has nice features on redirecting traffic called a <strong>redirector</strong>, and this is what I am using for the authentication. Squid has built-in authentication mechanisms, but these give a pop-up box and this does not fit my requirements so I can’t use them.</p>
<p>Because each and every request is redirected, I needed a quick way of looking up if the requestor still has the required permissions for that request. If he has, the request should be allowed. If there is no permission, the user is redirected to the proxy authentication web page by means of a HTTP 302 redirection header. </p>
<p>Because file system queries are intensive, and using a database for recording active sessions is overkill as well, I needed a different technique. A quick, easy way to store some data and retrieve it without the overhead of querying a file system.</p>
<p>There is a program which does exactly that – it’s called <a href="http://www.danga.com/memcached/" target="_blank">memcached</a>:</p>
<blockquote>
<p>memcached is a high-performance, distributed memory object caching system, generic in nature, but intended for use in speeding up dynamic web applications by alleviating database load. </p>
<p>Danga Interactive developed memcached to enhance the speed of LiveJournal.com, a site which was already doing 20 million+ dynamic page views per day for 1 million users with a bunch of webservers and a bunch of database servers. memcached dropped the database load to almost nothing, yielding faster page load times for users, better resource utilization, and faster access to the databases on a memcache miss.</p>
</blockquote>
<p>Memcached has a small downside, which makes perfect sense given memcached’s origin: after restarting memcached, all data stored in it is gone! This is no problem however, as active sessions aren’t that important to store: a user can quickly reauthenticate and then continue his work.</p>
<h3>The Squid part</h3>
<p>In my squid.conf, I added this line, which will start a few processes (called “children”) which will in turn take all requests and process it:</p>
<blockquote>
<p>url_rewrite_program /etc/squid/scripts/redirect.php</p>
</blockquote>
<p>The redirect.php-file, as mentioned in above line, takes the client IP and matches it against the memcached table. In my implementation, I take the sha1-hash of each IP and store it in memcache, along with the username and session start time. This is useful in order to have a session expire after a specific amount of time, for example, 8 hours.</p>
<p>After receiving a request, redirect.php (running as a shell script) checks in memcached if the hash exists, and if it’s still valid. If it does, the request is permitted and the original requested URL is outputted back to Squid. If authentication is required, the original URL is base64-encoded and the client is redirected to an authentication page by sending a HTTP 302 header with the base64-encoded URL appended to it.</p>
<p><strong>Caution:</strong> you do need to check if the requested URL isn’t part of your authentication server or payment service provider – it will cause an infinite loop if it is. Because you receive the entire URL, you can perform some matching rules against it… but keep it modest – too much regexp’s will slow things down and that’s exactly what you don’t want.</p>
<h3>The client part</h3>
<p>Because the user will authenticate from a web page, you’ll need a web server. Apache is the most common used webserver, but Lighttpd will do just fine, or IIS, or any other webserver. I chose Apache because I already had it running I set up an additional port for the web server to listen on, but this isn’t required, it can also run on a default port. </p>
<p>I use a MySQL database for storing user information – user name, password, e-mail address, etc. This information will be used upon initial authentication or registration, after which the user gets authenticated or not.</p>
<p>When a user lands on the web page, a form is displayed asking for credentials. After submitting the form, his credentials are verified. If they’re invalid, the user is redirected back to the authentication page and gets asked for his credentials again.</p>
<p>If his credentials are valid, an entry is added to memcached and the user is redirected back to the URL he requested (which had been supplied to the authentication page by using the base64-encoded version).</p>
<p>Of course, just displaying a form isn’t the only thing possible – you could also add a payment page, or just make it a general Terms and Agreements-page which a user has to agree to before granting him access to the network. The sky is the limit.</p>
<p>In my own implementation, I used the <a href="http://www.kohanaphp.com/" target="_blank">Kohana PHP framework</a>, which is a model-view-controller based framework and is easy to start with. The framework provides all kind of nifty features such as clean URLs, a database layer (you don’t even have to write your own queries anymore), and much more.</p>
<p><strong>Caution:</strong> if you’re using Squid as a web proxy server after a router (proxy server configured from within a browser), you can’t use HTTPS on your web server because Squid can’t add the X-FORWARDED-FOR header to HTTPS-streams, which means that the auth. page will receive the proxy server’s IP address and not that of the client that wants access!</p>
<p>When you’re using Squid as a transparent proxy (i.e. no configuration for the connecting clients, and the Squid server is in the same network) you can use HTTPS. This will be the case in most hotels, bars, restaurants, and offices.</p>
<h3>Wrapping it up</h3>
<p>Of course, this is just a start, and you can do much more than this – you could add a nice “pay first, then get access”-form, it’s entirely up to you. I’m not releasing my own codes yet, because I want to clean it up a bit first. However, eventually I will put up a nice tarball which should be good to go.</p>
<p>The technologies I used are Linux, Squid, Apache, MySQL, PHP and Memcached. They’re all free, fast, well-supported and do the job exactly as I want them to. The time it took me to create this? A few hours. I hope this can be of any value to somebody, feedback is always welcome. Feel free to leave a message, or send me an e-mail.</p>
<p style="font-size: 75%;">This post was originally posted on a diffetent weblog. Because a migration did not succeed, some comments got lost. My apologies for that.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.alexvanherwijnen.nl/blog/6-using-squid-to-build-a-captive-portal-for-free/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
