MaxSem has uploaded a new change for review.
https://gerrit.wikimedia.org/r/56774
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(-)
git pull ssh://gerrit.wikimedia.org:29418/operations/puppet
refs/changes/74/56774/1
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..adfc3eb 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") {
@@ -9,6 +11,11 @@
if (req.url ~ "^/event\.gif") {
error 204;
}
+ # Add X-Device to mobile load.php requests
+ if (req.url ~ "^/m/") {
+ set req.url = regsub(req.url, "^/m/", "/");
+ call device_detection;
+ }
/* For https-only wikis, the redirect from http to https for bits
assets should occur
in varnish instead of apache, since the apache redirect and
mediawiki doesn't
vary by protocol. This can result in a redirect loop and assets
not loading. */
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 059010c..f292c8c 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;
}
@@ -462,87 +464,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: newchange
Gerrit-Change-Id: Iab4615a735fd756f1fe6ede0e3340ec47428c01a
Gerrit-PatchSet: 1
Gerrit-Project: operations/puppet
Gerrit-Branch: production
Gerrit-Owner: MaxSem <[email protected]>
_______________________________________________
MediaWiki-commits mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits