Tired of Russian bots hammering your ridiculously outdated contact page code? Well you've come to right place. In a thinly veiled attempt to add content without creating any artwork, I've decided to explain how I added Google's Recaptcha to the Orchard CMS module PlanetTelex.ContactForm. A strangely specific post that will have a target audience of right around nobody, let's begin!
|Sorry, Russian bots, you can no haz :-(|
A little background, I haven't really updated my Orchard CMS (the blog engine this site runs on) codebase in a few years and I don't plan on doing so until it blows up. So when I do make updates it's almost always to resolve annoying issues like contact page Russian bots or an onslaught of blog comment Cilais/Air Jordan offers. While the blog comment fix was pretty easy using built in Orchard tools, this change required a bit of code hackery. For all the files you can checkout the module source on my Github repo, the updated files include:
Controllers\ContactFormController.cs Drivers\ContactFormDriver.cs Services\ContactFormService.cs Services\IContactFormService.cs Views\DisplayTemplates\Parts\ContactForm.cshtml
All those paths are beneath the PlanetTelex.ContactForm root folder. Also, the ContactForm.cshtml view is very basic and only does server side validation. I have a customized version in my SouleDesignsDark theme that does client side validation and is bootstrappy, if you're into that kind of thing.
I won't delve into the programming details any further because it would be painfully boring and time consuming. Let's just say I recreated the recaptcha logic from the built in Orchard.AntiSpam module in the PlanetTelex.ContactForm module. Code duplication is a horrible programming practice and I urge you not to follow in my footsteps! However, if you choose to do so you'll need to:
- Replace your PlanetTelex.ContactForm module code with the code from my version in the repo
- Enable the Orchard.AntiSpam module
- Fill in the Settings > Spam > Recaptcha public/private key values
If you need more details on the second two points checkout my Stopping Orchard Comment Spam post where I outline this process in detail. Now I know you're asking, "Why do I need to setup a different module to get this contact form recaptcha working?" Well, I opted to reuse the settings from Orchard.AntiSpam rather than forcing you to reenter them for the contact form. This is probably a kluge, just like my hackey code duplication, but I don't care!