Skip to content

Instantly share code, notes, and snippets.

@mlavergn
Created September 8, 2020 20:21
Show Gist options
  • Save mlavergn/ef41f9c64c325c35b05a4856a252cf81 to your computer and use it in GitHub Desktop.
Save mlavergn/ef41f9c64c325c35b05a4856a252cf81 to your computer and use it in GitHub Desktop.
Dart proxy.pac generator
import 'dart:io';
import 'dart:convert';
main() async {
var server = await HttpServer.bind(InternetAddress.loopbackIPv4, 8080);
print('Listening on localhost:${server.port}');
await for (HttpRequest request in server) {
var url = request.requestedUri;
var params = url.queryParameters;
var response = request.response;
response.headers.contentType = new ContentType('application', 'x-ns-proxy-autoconfig', charset: 'utf-8');
var body = proxyPac(params['host'], params['ip']);
response.write(body);
response.close();
}
}
String proxyPac(String proxyHost, String proxyAddr) {
return """
function FindProxyForURL(url, host) {
var clientIp = myIpAddress();
var clientIpValid = (clientIp.length > 0 && clientIp != '127.0.0.1');
var proxyPort = 8888;
var proxyIp = dnsResolve('${proxyHost}.local');
var proxyIpValid = (proxyIp.length > 0 && proxyIp != '127.0.0.1');
if (!proxyIpValid) {
if (clientIpValid) {
var seg = clientIp.split('.');
seg[3] = '46';
proxyIp = seg.join('.')
} else {
proxyIp = '${proxyAddr}';
}
}
// proxy
if (dnsDomainIs(host, '.disney.com') || dnsDomainIs(host, '.go.com') || dnsDomainIs(host, '.starwave.com')) {
return `PROXY \${proxyIp}:\${proxyPort}; DIRECT`;
}
// default
return 'DIRECT';
}""";
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment