Force or replace local site theme on *.googlesource.com
Sample usage: ~/mitm-gerrit/mitm-theme.sh ./path/to/theme.html Change-Id: I9c445d5c8354952771d73b1de0a29626787c8634
This commit is contained in:
parent
a927d62c15
commit
fd72a50e29
@ -36,6 +36,17 @@ This flow assumes no additional .html/.js are needed, i.e. the plugin is a singl
|
||||
2. Open any *.googlesource.com domain in proxied window
|
||||
3. plugin.html and more.js are served
|
||||
|
||||
### Force or replace default site theme for *.googlesource.com
|
||||
|
||||
1. Create a new proxied browser window and start mitmproxy via Docker:
|
||||
```
|
||||
~/mitm-gerrit/mitm-theme.sh ./path/to/theme.html
|
||||
```
|
||||
2. Open any *.googlesource.com domain in proxied window
|
||||
3. Default site themes are enabled.
|
||||
4. Local `theme.html` content replaces `/static/gerrit-theme.html`
|
||||
5. `/static/*` URLs are served from local theme directory, i.e. `./path/to/`
|
||||
|
||||
### Serve uncompiled PolyGerrit
|
||||
|
||||
1. Create a new proxied browser window and start mitmproxy via Docker:
|
||||
|
31
contrib/mitm-ui/mitm-theme.sh
Executable file
31
contrib/mitm-ui/mitm-theme.sh
Executable file
@ -0,0 +1,31 @@
|
||||
#!/bin/sh
|
||||
|
||||
if [[ -z "$1" ]]; then
|
||||
echo This script forces or replaces default site theme on *.googlesource.com
|
||||
echo Provide path to the theme.html as a parameter.
|
||||
exit 1
|
||||
fi
|
||||
|
||||
realpath() {
|
||||
OURPWD=$PWD
|
||||
cd "$(dirname "$1")"
|
||||
LINK=$(basename "$1")
|
||||
while [ -L "$LINK" ]; do
|
||||
LINK=$(readlink "$LINK")
|
||||
cd "$(dirname "$LINK")"
|
||||
LINK="$(basename "$1")"
|
||||
done
|
||||
REAL_DIR=`pwd -P`
|
||||
RESULT=$REAL_DIR/$LINK
|
||||
cd "$OURPWD"
|
||||
echo "$RESULT"
|
||||
}
|
||||
|
||||
theme=$(realpath "$1")
|
||||
theme_dir=$(dirname "${theme}")
|
||||
|
||||
mitm_dir="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null && pwd )"
|
||||
|
||||
"${mitm_dir}"/dev-chrome.sh &
|
||||
|
||||
"${mitm_dir}"/mitm-docker.sh -v "${theme_dir}":"${theme_dir}" "serve-app-dev.py --strip_assets --theme \"${theme}\""
|
@ -32,9 +32,10 @@ import re
|
||||
import argparse
|
||||
import os.path
|
||||
import json
|
||||
import mimetypes
|
||||
|
||||
class Server:
|
||||
def __init__(self, devpath, plugins, pluginroot, assets, strip_assets):
|
||||
def __init__(self, devpath, plugins, pluginroot, assets, strip_assets, theme):
|
||||
if devpath:
|
||||
print("Serving app from " + devpath)
|
||||
if pluginroot:
|
||||
@ -53,6 +54,7 @@ class Server:
|
||||
self.devpath = devpath
|
||||
self.pluginroot = pluginroot
|
||||
self.strip_assets = strip_assets
|
||||
self.theme = theme
|
||||
|
||||
def readfile(self, path):
|
||||
with open(path, 'rb') as contentfile:
|
||||
@ -92,6 +94,8 @@ def response(flow: http.HTTPFlow) -> None:
|
||||
localfile = ""
|
||||
if flow.request.path == "/config/server/info":
|
||||
config = json.loads(flow.response.content[5:].decode('utf8'))
|
||||
if server.theme:
|
||||
config['default_theme'] = '/static/gerrit-theme.html'
|
||||
for filename, path in server.plugins.items():
|
||||
pluginname = filename.split(".")[0]
|
||||
payload = config["plugin"]["js_resource_paths" if filename.endswith(".js") else "html_resource_paths"]
|
||||
@ -115,13 +119,23 @@ def response(flow: http.HTTPFlow) -> None:
|
||||
localfile = server.pluginroot + pluginfile
|
||||
elif os.path.isfile(server.pluginroot + pluginurl):
|
||||
localfile = server.pluginroot + pluginurl
|
||||
|
||||
if server.theme:
|
||||
if flow.request.path.endswith('/gerrit-theme.html'):
|
||||
localfile = server.theme
|
||||
else:
|
||||
match = re.match("^/static(/[\w\.]+)$", flow.request.path)
|
||||
if match is not None:
|
||||
localfile = os.path.dirname(server.theme) + match.group(1)
|
||||
|
||||
if localfile and os.path.isfile(localfile):
|
||||
if pluginmatch is not None:
|
||||
print("Serving " + flow.request.path + " from " + localfile)
|
||||
flow.response.content = server.readfile(localfile)
|
||||
flow.response.status_code = 200
|
||||
if localfile.endswith('.js'):
|
||||
flow.response.headers['Content-type'] = 'text/javascript'
|
||||
localtype = mimetypes.guess_type(localfile)
|
||||
if localtype and localtype[0]:
|
||||
flow.response.headers['Content-type'] = localtype[0]
|
||||
|
||||
def expandpath(path):
|
||||
return os.path.realpath(os.path.expanduser(path))
|
||||
@ -132,8 +146,11 @@ parser.add_argument("--plugins", type=str, default="", help="Comma-separated lis
|
||||
parser.add_argument("--plugin_root", type=str, default="", help="Path containing individual plugin files to replace")
|
||||
parser.add_argument("--assets", type=str, default="", help="Path containing assets file to import.")
|
||||
parser.add_argument("--strip_assets", action="store_true", help="Strip plugin bundles from the response.")
|
||||
parser.add_argument("--theme", type=str, help="Path to the default site theme to be used.")
|
||||
args = parser.parse_args()
|
||||
server = Server(expandpath(args.app) + '/',
|
||||
args.plugins, expandpath(args.plugin_root) + '/',
|
||||
args.plugins,
|
||||
expandpath(args.plugin_root) + '/',
|
||||
args.assets and expandpath(args.assets),
|
||||
args.strip_assets)
|
||||
args.strip_assets,
|
||||
expandpath(args.theme))
|
||||
|
Loading…
Reference in New Issue
Block a user