Mark Bergsma has submitted this change and it was merged.

Change subject: Add device detection to mobile ResourceLoader requests
......................................................................


Add device detection to mobile ResourceLoader requests

Per discussion at wikitech-l

Change-Id: Iab4615a735fd756f1fe6ede0e3340ec47428c01a
---
M manifests/varnish.pp
M templates/varnish/bits.inc.vcl.erb
A templates/varnish/device-detection.inc.vcl.erb
M templates/varnish/mobile-frontend.inc.vcl.erb
4 files changed, 94 insertions(+), 81 deletions(-)

Approvals:
  Mark Bergsma: Looks good to me, approved
  jenkins-bot: Verified



diff --git a/manifests/varnish.pp b/manifests/varnish.pp
index 7aee3dc..533885a 100644
--- a/manifests/varnish.pp
+++ b/manifests/varnish.pp
@@ -46,6 +46,8 @@
                file {
                        "/etc/varnish/geoip.inc.vcl":
                                content => 
template("varnish/geoip.inc.vcl.erb");
+                       "/etc/varnish/device-detection.inc.vcl":
+                               content => 
template("varnish/device-detection.inc.vcl.erb");
                }
        }
 
diff --git a/templates/varnish/bits.inc.vcl.erb 
b/templates/varnish/bits.inc.vcl.erb
index 7089c2d..f0efaf9 100644
--- a/templates/varnish/bits.inc.vcl.erb
+++ b/templates/varnish/bits.inc.vcl.erb
@@ -1,5 +1,7 @@
 # Varnish VCL include file for bits
 
+include "device-detection.inc.vcl";
+
 sub vcl_recv {
        /* Since we are allowing POST at wikimedia3.vcl.erb, disallow here */
        if (req.request == "POST") {
@@ -15,6 +17,11 @@
                if ( req.url ~ 
"^/(auditcom|boardgovcom|board|chair|chapcom|checkuser|collab|donate|exec|fdc|grants|internal|movementroles|nomcom|office|otrs-wiki|searchcom|spcom|steward|wikimaniateam)\.wikimedia\.org/"
 && req.http.X-Forwarded-Proto != "https" ) {
                        error 301 "https://<%= cluster_options.fetch( 
"bits_domain", "bits.wikimedia.org" )%>" + req.url;
                }
+               # Add X-Device to mobile load.php requests
+               if (req.url ~ "^/m/") {
+                       set req.url = regsub(req.url, "^/m/", "/");
+                       call device_detection;
+               }
 <% if cluster_options.fetch( "enable_geoiplookup", false ) -%>
                if (req.url == "/geoiplookup") {
                        error 666 "geoiplookup";
diff --git a/templates/varnish/device-detection.inc.vcl.erb 
b/templates/varnish/device-detection.inc.vcl.erb
new file mode 100644
index 0000000..928b137
--- /dev/null
+++ b/templates/varnish/device-detection.inc.vcl.erb
@@ -0,0 +1,83 @@
+# Varnish VCL include file for mobile device detection
+# Shared between mobile caches and bits
+
+sub device_detection {
+
+       set req.http.X-Device = "";
+
+       if ( req.http.User-Agent ~ "Android" ){
+               set req.http.X-Device = "android";
+               if ( req.http.User-Agent ~ "Opera Mini" ) {
+                       set req.http.X-Device = "operamini";
+               } else if( req.http.User-Agent ~ "Opera Mobi" ) {
+                       set req.http.X-Device = "operamobile";
+               }
+       } else if( req.http.User-Agent ~ "MSIE (8|9|1\d)\." ) {
+               set req.http.X-Device = "ie";
+       } else if( req.http.User-Agent ~ "MSIE" ) {
+               set req.http.X-Device = "html";
+       } else if ( req.http.User-Agent ~ "Opera Mobi" ) {
+               set req.http.X-Device = "operamobile";
+       } else if( req.http.User-Agent ~ "Safari" && ( req.http.User-Agent ~ 
"iPad" ||
+               req.http.User-Agent ~ "iPhone" ) ) {
+               set req.http.X-Device = "iphone";
+       } else if( req.http.User-Agent ~ "iPhone" ) {
+               if( req.http.User-Agent ~ "Opera" ) {
+                       set req.http.X-Device = "operamini";
+               } else {
+                       set req.http.X-Device = "capable";
+               }
+       } else if( req.http.User-Agent ~ "WebKit" ) {
+               if( req.http.User-Agent ~ "Series60" ) {
+                       set req.http.X-Device = "nokia";
+               } else if( req.http.User-Agent ~ "webOS" ) {
+                       set req.http.X-Device = "palm_pre";
+               } else {
+                       set req.http.X-Device = "webkit";
+               }
+       } else if( req.http.User-Agent ~ "Opera" ) {
+               if( req.http.User-Agent ~ "Nintendo Wii" ) {
+                       set req.http.X-Device = "wii";
+               } else if( req.http.User-Agent ~ "Opera Mini" ) {
+                       set req.http.X-Device = "operamini";
+               } else {
+                       set req.http.X-Device = "operamobile";
+               }
+       } else if( req.http.User-Agent ~ "Kindle/1.0" ) {
+               set req.http.X-Device = "kindle";
+       } else if( req.http.User-Agent ~ "Kindle/2.0" ) {
+               set req.http.X-Device = "kindle2";
+       } else if( req.http.User-Agent ~ "Firefox|Maemo Browser|Fennec" ) {
+               set req.http.X-Device = "capable";
+       } else if( req.http.User-Agent ~ "NetFront" ) {
+               set req.http.X-Device = "netfront";
+       } else if( req.http.User-Agent ~ "SEMC-Browser" ) {
+               set req.http.X-Device = "wap2";
+       } else if( req.http.User-Agent ~ "Series60" ) {
+               set req.http.X-Device = "wap2";
+       } else if( req.http.User-Agent ~ "PlayStation Portable" ) {
+               set req.http.X-Device = "psp";
+       } else if( req.http.User-Agent ~ "PLAYSTATION 3" ) {
+               set req.http.X-Device = "ps3";
+       } else if( req.http.User-Agent ~ "SAMSUNG" ) {
+               set req.http.X-Device = "capable";
+       } else if( req.http.User-Agent ~ "BlackBerry" ) {
+               if( req.http.User-Agent ~ "/1." || req.http.User-Agent ~ "/2." 
|| req.http.User-Agent ~ "/3."
+                       || req.http.User-Agent ~ "/4." ) {
+                               set req.http.X-Device = "blackberry-lt5";
+                       } else {
+                               set req.http.X-Device = "blackberry";
+                       }
+       }
+
+       if ( req.http.X-Device == "" ) {
+               if ( req.http.Accept ~ "application/vnd.wap.xhtml+xml" ) {
+                       // Should be wap2
+                       set req.http.X-Device = "html";
+               } else if ( req.http.Accept ~ "vnd.wap.wml" ) {
+                       set req.http.X-Device = "wml";
+               } else {
+                       set req.http.X-Device = "html";
+               }
+       }
+}
\ No newline at end of file
diff --git a/templates/varnish/mobile-frontend.inc.vcl.erb 
b/templates/varnish/mobile-frontend.inc.vcl.erb
index 228662d..f6e156e 100644
--- a/templates/varnish/mobile-frontend.inc.vcl.erb
+++ b/templates/varnish/mobile-frontend.inc.vcl.erb
@@ -7,6 +7,8 @@
 #include <arpa/inet.h>
 }C
 
+include "device-detection.inc.vcl";
+
 acl wmf_office {
        "216.38.130.160"/28;
 }
@@ -518,87 +520,6 @@
                unset req.http.X-Carrier;
        }
        */
-}
-
-sub device_detection {
-
-       set req.http.X-Device = "";
-
-       if ( req.http.User-Agent ~ "Android" ){
-               set req.http.X-Device = "android";
-               if ( req.http.User-Agent ~ "Opera Mini" ) {
-                       set req.http.X-Device = "operamini";
-               } else if( req.http.User-Agent ~ "Opera Mobi" ) {
-                       set req.http.X-Device = "operamobile";
-               }
-       } else if( req.http.User-Agent ~ "MSIE (8|9|1\d)\." ) {
-               set req.http.X-Device = "ie";
-       } else if( req.http.User-Agent ~ "MSIE" ) {
-               set req.http.X-Device = "html";
-       } else if ( req.http.User-Agent ~ "Opera Mobi" ) {
-               set req.http.X-Device = "operamobile";
-       } else if( req.http.User-Agent ~ "Safari" && ( req.http.User-Agent ~ 
"iPad" ||
-               req.http.User-Agent ~ "iPhone" ) ) {
-               set req.http.X-Device = "iphone";
-       } else if( req.http.User-Agent ~ "iPhone" ) {
-               if( req.http.User-Agent ~ "Opera" ) {
-                       set req.http.X-Device = "operamini";
-               } else {
-                       set req.http.X-Device = "capable";
-               }
-       } else if( req.http.User-Agent ~ "WebKit" ) {
-               if( req.http.User-Agent ~ "Series60" ) {
-                       set req.http.X-Device = "nokia";
-               } else if( req.http.User-Agent ~ "webOS" ) {
-                       set req.http.X-Device = "palm_pre";
-               } else {
-                       set req.http.X-Device = "webkit";
-               }
-       } else if( req.http.User-Agent ~ "Opera" ) {
-               if( req.http.User-Agent ~ "Nintendo Wii" ) {
-                       set req.http.X-Device = "wii";
-               } else if( req.http.User-Agent ~ "Opera Mini" ) {
-                       set req.http.X-Device = "operamini";
-               } else {
-                       set req.http.X-Device = "operamobile";
-               }
-       } else if( req.http.User-Agent ~ "Kindle/1.0" ) {
-               set req.http.X-Device = "kindle";
-       } else if( req.http.User-Agent ~ "Kindle/2.0" ) {
-               set req.http.X-Device = "kindle2";
-       } else if( req.http.User-Agent ~ "Firefox|Maemo Browser|Fennec" ) {
-               set req.http.X-Device = "capable";
-       } else if( req.http.User-Agent ~ "NetFront" ) {
-               set req.http.X-Device = "netfront";
-       } else if( req.http.User-Agent ~ "SEMC-Browser" ) {
-               set req.http.X-Device = "wap2";
-       } else if( req.http.User-Agent ~ "Series60" ) {
-               set req.http.X-Device = "wap2";
-       } else if( req.http.User-Agent ~ "PlayStation Portable" ) {
-               set req.http.X-Device = "psp";
-       } else if( req.http.User-Agent ~ "PLAYSTATION 3" ) {
-               set req.http.X-Device = "ps3";
-       } else if( req.http.User-Agent ~ "SAMSUNG" ) {
-               set req.http.X-Device = "capable";
-       } else if( req.http.User-Agent ~ "BlackBerry" ) {
-               if( req.http.User-Agent ~ "/1." || req.http.User-Agent ~ "/2." 
|| req.http.User-Agent ~ "/3."
-                       || req.http.User-Agent ~ "/4." ) {
-                               set req.http.X-Device = "blackberry-lt5";
-                       } else {
-                               set req.http.X-Device = "blackberry";
-                       }
-       }
-
-       if ( req.http.X-Device == "" ) {
-               if ( req.http.Accept ~ "application/vnd.wap.xhtml+xml" ) {
-                       // Should be wap2
-                       set req.http.X-Device = "html";
-               } else if ( req.http.Accept ~ "vnd.wap.wml" ) {
-                       set req.http.X-Device = "wml";
-               } else {
-                       set req.http.X-Device = "html";
-               }
-       }
 }
 
 sub vcl_recv {

-- 
To view, visit https://gerrit.wikimedia.org/r/56774
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings

Gerrit-MessageType: merged
Gerrit-Change-Id: Iab4615a735fd756f1fe6ede0e3340ec47428c01a
Gerrit-PatchSet: 3
Gerrit-Project: operations/puppet
Gerrit-Branch: production
Gerrit-Owner: MaxSem <[email protected]>
Gerrit-Reviewer: Asher <[email protected]>
Gerrit-Reviewer: Mark Bergsma <[email protected]>
Gerrit-Reviewer: MaxSem <[email protected]>
Gerrit-Reviewer: jenkins-bot

_______________________________________________
MediaWiki-commits mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits

Reply via email to