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