No Soup

Block users from a specific IP or range(s) of IPs and redirect them to another site.
Use with care, it’s version 0.3 ?

Download

bad_ip_ranges = get_option('_no_soup_bad_ip_ranges', '');
            $this->eat_that = get_option('_no_soup_eat_that', '');          
        }
        public function init_admin() {
            add_options_page(__('No Soup', "nosoup"), __('No Soup', "nosoup"), 'manage_options', basename(__FILE__), array(&$this, 'no_soup_admin_page') );
        }
        
        public function no_soup_admin_page() {
            // Handle updates
            if( !empty($_POST) && $_POST[ 'action' ] == 'no-soup-save' ) {
                check_admin_referer('no-soup-save', 'no-soup-nonce');
                $this->bad_ip_ranges = esc_html($_POST[ 'no_soup_bad_ip_ranges' ]);
                update_option('_no_soup_bad_ip_ranges', $this->bad_ip_ranges );
                $this->eat_that = esc_html($_POST[ 'no_soup_eat_that' ]);
                update_option('_no_soup_eat_that', $this->eat_that );
                ?>
                

Block users from a specific IP or range(s) of IPs and redirect them to another site.

 
<?php _e("Block these ip ranges
Separate with new-line
CIDR format (192.168.0.1/20)
or IP range (fromip - toip)): ", "nosoup"); ?>
<input type="text" style="width: 100%" id="no_soup_eat_that" name="no_soup_eat_that" value="eat_that; ?>" />

<input type="submit" name="Submit" value="" />

eat_that && $this->banned_ip() ) : wp_redirect( $this->eat_that ); die; endif; } private function banned_ip() { $ip = $_SERVER['REMOTE_ADDR']; $networks = preg_split("/[\r\n,]+/", $this->bad_ip_ranges); foreach ( $networks as $range ) : if ( false === strpos($range, '-')) : if ( 3 in_cidr( $range, $ip ) ) : return true; endif; else : if ( $this->in_ip_range($range, $ip)) : return true; endif; endif; endforeach; return false; } function in_cidr($network, $ip) { $ip_arr = explode('/', $network); $network_long = ip2long($ip_arr[0]); $x = ip2long($ip_arr[1]); $mask = long2ip($x) == $ip_arr[1] ? $x : 0xffffffff << (32 - $ip_arr[1]); $ip_long = ip2long($ip); return ($ip_long & $mask) == ($network_long & $mask); } function in_ip_range($range, $ip){ $range = preg_replace("'\s+'", '', $range); if ( false === strpos( $range, '-') ) : return ( $ip_start == $ip ); else : list($ip_start, $ip_end) = preg_split('/-/', $range); $iplong = ip2long( $ip ); return ( ip2long( $ip_start ) = $iplong ); endif; } } } if ( ! function_exists( '_log' ) ) { function _log() { if( WP_DEBUG === true ) { $args = func_get_args(); error_log( print_r( $args, true ) ); } } } // Init class if (class_exists("NoSoup")) { $nosoup = new NoSoup(); } add_action( 'admin_menu', array(&$nosoup, 'init_admin') ); add_action( 'init', array(&$nosoup, 'check_ip') );

If you want to block for instance the IP-addresses of swedish authorities, you can use the ranges below and instead show them the way to the Wikipedia article about ACTA. I’m not saying you should, I’m just saying you could, ok?

193.44.94.0 - 193.44.94.255  
193.15.242.192 - 193.15.242.223  
195.67.14.48 - 195.67.14.63  
194.71.64.0 - 194.71.82.255  
192.137.161.0 - 192.137.164.255  
192.165.145.0 - 192.165.145.255  
80.252.170.244 - 80.252.170.247  
194.52.83.0 - 194.52.83.255  
195.67.14.64 - 195.67.14.127  
130.242.25.0 - 130.242.25.255  
195.198.201.208 - 195.198.201.215  
195.67.88.208 - 195.67.88.223  
81.216.70.0 - 81.216.70.255  
212.181.33.112 - 212.181.33.115  
212.181.33.12 - 212.181.33.15  
212.28.207.32 - 212.28.207.63  
217.77.240.177 - 217.77.240.177  
217.77.247.160 - 217.77.247.163  
192.71.128.0 - 192.71.128.255  
194.16.218.60 - 194.16.218.63  
194.18.111.24 - 194.18.111.27  
62.65.85.16 - 62.65.85.31  
192.165.31.0 - 192.165.31.255  
192.165.173.0 - 192.165.173.255  
195.198.122.144 - 195.198.122.159  
192.36.96.0 - 192.36.96.255  
193.182.184.0 - 193.182.184.255  
193.182.190.0 - 193.182.190.255  
195.5.185.0 - 195.5.185.255  
194.103.14.0 - 194.103.15.255  
85.119.130.192 - 85.119.130.207  
85.119.133.128 - 85.119.133.191  
212.181.83.0 - 212.181.83.3  
192.121.27.0 - 192.121.27.255  
192.121.211.0 - 192.121.218.255  
213.50.75.16 - 213.50.75.31  
193.234.1.0 - 193.234.141.255  
193.235.152.0 - 193.235.152.255  
193.241.212.0 - 193.241.212.255  
194.18.73.0 - 194.18.73.255  
194.18.169.0 - 194.18.171.255  
192.121.237.0 - 192.121.237.255  
193.180.162.0 - 193.180.163.255  
194.52.96.0 - 194.52.127.255  
194.16.84.160 - 194.16.84.167  
195.84.103.128 - 195.84.103.191  
195.84.15.32 - 195.84.15.47  
195.84.76.0 - 195.84.76.255  
81.216.66.0 - 81.216.66.31  
194.198.144.0 - 194.198.144.255  
80.80.64.0 - 80.80.65.255  
192.121.238.0 - 192.121.238.255  
62.20.16.216 - 62.20.16.223  
195.58.108.96 - 195.58.108.127  
195.58.108.128 - 195.58.108.159  
195.58.110.248 - 195.58.110.255  
195.67.68.48 - 195.67.68.55  
195.67.81.48 - 195.67.81.63  
195.84.193.80 - 195.84.193.95  
193.181.64.0 - 193.181.127.255  
193.241.252.0 - 193.241.252.255  
193.241.0.0 - 193.241.211.255  
193.241.213.0 - 193.241.251.255  
193.241.253.0 - 193.241.255.255  
192.121.30.0 - 192.121.30.255  
143.118.0.0 - 143.118.255.255  
192.121.44.0 - 192.121.44.255  
62.119.64.128 - 62.119.64.135  
212.247.172.64 - 212.247.172.95  
145.235.0.0 - 145.235.255.255  
192.121.50.0 - 192.121.52.255  
192.165.140.0 - 192.165.141.255  
159.72.0.0 - 159.72.255.255  
62.119.150.16 - 62.119.150.31  
194.14.184.0 - 194.14.186.255  
192.121.82.0 - 192.121.82.255  
192.121.200.0 - 192.121.202.255  
159.190.0.0 - 159.190.255.255  
192.36.5.0 - 192.36.5.255  
212.247.200.64 - 212.247.200.95  
192.121.90.0 - 192.121.90.255  
130.242.58.0 - 130.242.58.255  
138.215.0.0 - 138.215.255.255  
212.214.131.192 - 212.214.131.223  
212.247.50.144 - 212.247.50.159  
192.121.219.0 - 192.121.219.255  
62.95.69.0 - 62.95.69.255  
62.95.13.160 - 62.95.13.175  
91.199.170.0 - 91.199.170.255  
62.119.21.32 - 62.119.21.63  
213.131.146.64 - 213.131.146.79  
62.95.35.0 - 62.95.35.31  
195.67.83.80 - 195.67.83.95  
213.242.135.0 - 213.242.135.7  
62.119.134.8 - 62.119.134.15  
62.119.24.8 - 62.119.24.15  
150.227.0.0 - 150.227.255.255  
192.36.132.0 - 192.36.132.255  
192.36.14.0 - 192.36.14.255  
192.36.220.0 - 192.36.220.255  
192.36.221.0 - 192.36.221.255  
193.180.254.0 - 193.180.254.255  
147.186.0.0 - 147.186.255.255  
195.67.26.48 - 195.67.26.51  
195.67.45.136 - 195.67.45.143  
195.198.83.24 - 195.198.83.31  
212.162.184.104 - 212.162.184.111  
137.61.0.0 - 137.61.255.255  
137.60.0.0 - 137.60.255.255  
137.59.0.0 - 137.59.255.255  
192.121.131.0 - 192.121.131.255  
193.15.216.208 - 193.15.216.223  
193.15.200.48 - 193.15.200.63  
195.198.184.208 - 195.198.184.223  
156.49.0.0 - 156.49.255.255  
62.20.16.216 - 62.20.16.223  
62.20.57.192 - 62.20.57.223  
212.181.19.0 - 212.181.19.255  
62.127.100.40 - 62.127.100.47  
192.36.25.0 - 192.36.25.255  
192.165.69.0 - 192.165.69.255  
193.181.190.0 - 193.181.191.255  
193.235.83.0 - 193.235.84.255  
194.132.96.0 - 194.132.103.255  
193.10.58.0 - 193.10.59.255  
193.182.167.0 - 193.182.167.255  
62.13.78.0 - 62.13.79.255  
213.115.124.8 - 213.115.124.11  
213.242.135.144 - 213.242.135.159  
82.136.153.64 - 82.136.153.95  
192.36.213.0 - 192.36.213.255  
192.165.64.0 - 192.165.64.255  
193.12.105.0 - 193.12.105.255  
195.42.219.208 - 195.42.219.215  
192.121.89.0 - 192.121.89.255  
130.242.12.0 - 130.242.12.255  
130.242.60.24 - 130.242.60.31  
195.17.245.40 - 195.17.245.47  
213.88.173.0 - 213.88.173.15  
193.15.197.32 - 193.15.197.47  
195.67.16.32 - 195.67.16.63  
194.50.107.0 - 194.50.107.255  
62.181.240.120 - 62.181.240.135  
83.241.192.88 - 83.241.192.91  
130.242.22.0 - 130.242.22.255  
195.67.76.224 - 195.67.76.255  
213.80.95.40 - 213.80.95.47  
80.252.162.192 - 80.252.162.207  
194.18.111.96 - 194.18.111.103  
192.165.243.0 - 192.165.243.255  
192.176.242.0 - 192.176.242.255  
194.198.105.0 - 194.198.105.255  
194.198.255.0 - 194.198.255.255  
193.121.206.128 - 193.121.206.159  
212.181.96.224 - 212.181.96.231  
62.20.85.128 - 62.20.85.143  
213.115.92.240 - 213.115.92.247  
88.131.68.108 - 88.131.68.111  
88.131.16.180 - 88.131.16.183  
83.241.222.192 - 83.241.222.223  
91.217.186.0 - 91.217.186.255  
213.199.105.128 - 213.199.105.135  
193.15.189.192 - 193.15.189.255  
82.182.190.0 - 82.182.190.255  
194.198.96.0 - 194.198.96.255  
213.115.31.0 - 213.115.31.15

Snabbare WordPress på egen server

Sen jag bytte till Tilaa, där jag sköter webbserver och databas själv, har svarstiderna förbättrats avsevärt.

Pingdom rapporterar:

 

Jag kör Gentoo Linux, nginx, php-fpm, fastcgi-cache, apc och mysql med query cache.

 

jonasnordstrom.se har flyttat från Binero till Tilaa

Igår flyttade jag hela sajten till Tilaa, som är en holländsk VPS, där jag kör nginx och php-fpm på Gentoo Linux.

Även Topp30 och Fredagswhisky (två mycket små sajter)  ligger numera på Tilaa. Orsaken till flytten är förstås att jag vill ha full koll på mina WordPress-installationer. Jag vill kunna prova olika tekniker, mäta prestanda, göra lite okonventionella prestandaoptimerimeringar, få SSH-access(!) och framförallt lära mig mer om serversidan av webbprojekt.

Jag har inget otalt med Binero, de har alltid (nästan …) fungerat bra, även om jag fortfarande låg på old.binero.com!

Om sajten svajar lite den här första tiden så vet ni alltså vad det beror på. Lite vägarbete.

 

Jonas tipsar – 18 October 2011

  1. This and that and what not – Lite om Ajour och förväntningar
  2. Matt Mullenweg – Chatting with Dries of Drupal
  3. www.thekitchn.com – The Metro Wine Map of France | Apartment Therapy The Kitchn
    – / france frenchwine drinking via:zite
  4. www.insidefacebook.com – Inside Facebook · The 25 Most Liked Pages on Facebook, Fall 2011
    – / facebook zynga via:zite
  5. Daniel – Det hände något idag. Kanske något stort, jag vet inte. Ibland
  6. High Performance Web Sites – frontend SPOF survey
  7. Dagens Media – Senaste nytt – Bonnier skrotar speltidning
  8. www.thenextweb.com – Demand for iOS 5 & iCloud was so high, Apple almost broke the Internet
    – ios5 tog nästan sönder internet 🙂
  9. Coding Horror – The Gamification
  10. jardenberg unedited – Om känslan att vara övervakad
  11. Daring Fireball – The iPad Marches On
  12. Boing Boing – Rich and Tasty: Recipes for the New Class Warfare
  13. Nikke Index – Linkability – Länkbarhet
  14. Otto on WordPress – GoDaddy Hosting = Epic Failure. Looking for a new hosting service.
  15. apt46.net – So You Want To Marry Your Gay 14-Year Old First Cousin | Apt46
  16. www.danielaberg.se – It just works
  17. jardenberg unedited – Steve Jobs är död
  18. www.slideshare.net – Relative Sizes Of Planets And Stars
  19. The Tapir's Tale – 7 Reasons to go to Øredev 2011
  20. MKSE.com – All about CMS – Heroku erbjuder Python och Django stöd

Unrecognized exception: [href=edit-comments.php?page=disqus]

I senaste WordPress-betan, 3.2 beta 1, används jQuery 1.5.2. Den versionen tillåter inte längre css-selektorer som inte sätter attributvärden inom citationstecken.
Om man, som jag, kör Disqus som kommentarsystem så uppstår ett problem, eftersom Disqus använder [property=value]-metoden vilket gör att jag får javascriptfel i admin vilket gör att de flesta menyknappar etc. är helt döda. Firebug visar det här felet:


Som tur är är det lätt att ordna, det är bara att gå in i plugin-filen disqus-comment-system/disqus.php och ändra:

mc.find('a.wp-has-submenu').attr('href', 'edit-comments.php?page=disqus').end()
   .find('.wp-submenu  li:has(a[href=edit-comments.php?page=disqus])')
   .prependTo(mc.find('.wp-submenu ul'));

till

mc.find('a.wp-has-submenu').attr('href', 'edit-comments.php?page=disqus').end()
   .find('.wp-submenu  li:has(a[href="edit-comments.php?page=disqus"])')
   .prependTo(mc.find('.wp-submenu ul'));

(det är alltså [href=edit-comments.php?page=disqus] som behöver attributfnuttar: [href=”edit-comments.php?page=disqus”])

Mer info här.

Jag gissar att Disqus lagar den här buggen väldigt snart.

WordPress kickstart

Det går ganska fort att installera WordPress. Med ett enkelt bash-script går det ännu fortare.
Så här gör jag för att installera en ny WP-sajt på min gentoo-server med nginx som kör i en virtualbox-image på min Macbook Pro.

Scriptet laddar hem senaste nightly build av WordPress, packar upp den, skapar en ny virtual host, skapar databas och användare samt modifierar wp-config.php. Efter det behöver jag bara lägga in det nya host-namnet i /etc/hosts och sajten är uppe.

Unable to display content. Adobe Flash is required.