Latest commit

History

14 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

FastCGI processor for the Go-guerrilla package.

FastCGI is an optimized CGI protocol implementation used by web servers to execute scripts or other programs.

Well, it's NOT only for web servers. Yes, you've read that right ;-)

About

This package is a Processor for the Go-Guerrilla default Backend interface implementation. Typical use for this package is if you would like to add the ability to deliver emails to your FastCGI backend, using Go-Guerrilla's built-in gateway backend.

Just like a web server would hand over the HTTP request to a FastCGI backend, this plugin allows you to hand over the processing of an email to your FastCGI backend, such as php-fpm.

The reason why you would do this is because perhaps your codebase is in a scripting language such as PHP, so there's no need to learn Go, becoming easier for you to maintain, no need to re-compile to change, use your favourite framework / library / IDE, etc.

Also, there's no overhead of a web server - it goes straight to your script.

Usage

Import "github.com/flashmob/fastcgi-processor" to your Go-guerrilla project.
Assuming you have imported the go-guerrilla package already, and all dependencies.

Then, when using go-guerrilla as a package, use something like this

cfg:=&AppConfig{
LogFile: "stderr",
AllowedHosts: []string{"example.com"},
BackendConfig: backends.BackendConfig{
"save_process" : "HeadersParser|Debugger|FastCGI",
"validate_process" : "FastCGI",
"fcgi_script_filename_save" : "/home/path/to/save.php",
"fcgi_script_filename_validate" : "/home/path/to/validate.php",
"fcgi_connection_type" : "unix",
"fcgi_connection_address" : "/tmp/php-fpm.sock"
},
}
d:=Daemon{Config: cfg}
d.AddProcessor("FastCGI", fastcgi_processor.Processor)
d.Start()
// .. keep the server busy..

This will let Go-Guerrilla know about your FastCGI processor. Note that here we've added FastCGI to the end of the save_process config option, then used the d.AddProcessor api call to register it. Then configured other settings.

See the configuration section for how to configure.

Configuration

The following values are required in your backend_config section

{
"fcgi_script_filename_save" : "/home/path/to/save.php",
"fcgi_script_filename_validate" : "/home/path/to/validate.php",
"fcgi_connection_type" : "unix",
"fcgi_connection_address" : "/tmp/php-fpm.sock"
} 

fcgi_connection_type type can be unix or tcp. fcgi_connection_address is a path to a unix socket descriptor, or IP address with tcp port eg. "127.0.0.1:8000"

If fcgi_connection_address using the unix socket descriptor, make sure your program has permissions for writing to it. The permissions will be tested during initialization.

Don't forget to add FastCGI to the end of your save_process config option, eg:

"save_process": "HeadersParser|Debugger|Hasher|Header|FastCGI",

also, add FastCGI to the end of your validate_process config option if you want to use the validate script, eg:

"validate_process": "FastCGI",

Scripting

Validate Recipient Email

A single parameter comes to to your recipient validating script via HTTP GET.

  • rcpt_to - the email address that we want to validate

Output:

Please echo the string PASS and nothing else if validation passed. Otherwise return anything you wish.

Save Mail

The parameters comes to to your saving script via a HTTP POST.

The following parameters will be sent:

  • remote_ip - remote ip address of the client that we got the email from (not the sender)
  • subject - the subject of the email (if available)
  • tls_on - boolean, represented as string "true" or "false", was the connection a TLS connection?
  • helo - hello sent by the client when connecting to us
  • mail_from - string of the From email address, could be blank to indicate a bounce
  • body - the raw email body, along with the headers. Please make sure your Fast CGI gateway can handle large enough POST

Output:

Please echo the string SAVED if successful.

Example

See MailDiranasaurus - it uses this package as an example, https://github.com/flashmob/MailDiranasaurus

Credits

This package depends on Shen Sheng's Go Fastcgi client package.

go get github.com/sloonz/go-maildir

Tips

Your FastCGI script should timeout well before 30 seconds, preferably finish under 1 second.

About

FastCGI processor package for https://github.com/flashmob/go-guerrilla (ie Save/Process emails with PHP-FPM or other fcgi backend)

Resources

Stars

17 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

Latest commit

History

14 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

FastCGI processor for the Go-guerrilla package.

FastCGI is an optimized CGI protocol implementation used by web servers to execute scripts or other programs.

Well, it's NOT only for web servers. Yes, you've read that right ;-)

About

This package is a Processor for the Go-Guerrilla default Backend interface implementation. Typical use for this package is if you would like to add the ability to deliver emails to your FastCGI backend, using Go-Guerrilla's built-in gateway backend.

Just like a web server would hand over the HTTP request to a FastCGI backend, this plugin allows you to hand over the processing of an email to your FastCGI backend, such as php-fpm.

The reason why you would do this is because perhaps your codebase is in a scripting language such as PHP, so there's no need to learn Go, becoming easier for you to maintain, no need to re-compile to change, use your favourite framework / library / IDE, etc.

Also, there's no overhead of a web server - it goes straight to your script.

Usage

Import "github.com/flashmob/fastcgi-processor" to your Go-guerrilla project.
Assuming you have imported the go-guerrilla package already, and all dependencies.

Then, when using go-guerrilla as a package, use something like this

cfg:=&AppConfig{
LogFile: "stderr",
AllowedHosts: []string{"example.com"},
BackendConfig: backends.BackendConfig{
"save_process" : "HeadersParser|Debugger|FastCGI",
"validate_process" : "FastCGI",
"fcgi_script_filename_save" : "/home/path/to/save.php",
"fcgi_script_filename_validate" : "/home/path/to/validate.php",
"fcgi_connection_type" : "unix",
"fcgi_connection_address" : "/tmp/php-fpm.sock"
},
}
d:=Daemon{Config: cfg}
d.AddProcessor("FastCGI", fastcgi_processor.Processor)
d.Start()
// .. keep the server busy..

This will let Go-Guerrilla know about your FastCGI processor. Note that here we've added FastCGI to the end of the save_process config option, then used the d.AddProcessor api call to register it. Then configured other settings.

See the configuration section for how to configure.

Configuration

The following values are required in your backend_config section

{
"fcgi_script_filename_save" : "/home/path/to/save.php",
"fcgi_script_filename_validate" : "/home/path/to/validate.php",
"fcgi_connection_type" : "unix",
"fcgi_connection_address" : "/tmp/php-fpm.sock"
} 

fcgi_connection_type type can be unix or tcp. fcgi_connection_address is a path to a unix socket descriptor, or IP address with tcp port eg. "127.0.0.1:8000"

If fcgi_connection_address using the unix socket descriptor, make sure your program has permissions for writing to it. The permissions will be tested during initialization.

Don't forget to add FastCGI to the end of your save_process config option, eg:

"save_process": "HeadersParser|Debugger|Hasher|Header|FastCGI",

also, add FastCGI to the end of your validate_process config option if you want to use the validate script, eg:

"validate_process": "FastCGI",

Scripting

Validate Recipient Email

A single parameter comes to to your recipient validating script via HTTP GET.

  • rcpt_to - the email address that we want to validate

Output:

Please echo the string PASS and nothing else if validation passed. Otherwise return anything you wish.

Save Mail

The parameters comes to to your saving script via a HTTP POST.

The following parameters will be sent:

  • remote_ip - remote ip address of the client that we got the email from (not the sender)
  • subject - the subject of the email (if available)
  • tls_on - boolean, represented as string "true" or "false", was the connection a TLS connection?
  • helo - hello sent by the client when connecting to us
  • mail_from - string of the From email address, could be blank to indicate a bounce
  • body - the raw email body, along with the headers. Please make sure your Fast CGI gateway can handle large enough POST

Output:

Please echo the string SAVED if successful.

Example

See MailDiranasaurus - it uses this package as an example, https://github.com/flashmob/MailDiranasaurus

Credits

This package depends on Shen Sheng's Go Fastcgi client package.

go get github.com/sloonz/go-maildir

Tips

Your FastCGI script should timeout well before 30 seconds, preferably finish under 1 second.

About

FastCGI processor package for https://github.com/flashmob/go-guerrilla (ie Save/Process emails with PHP-FPM or other fcgi backend)

Resources

Stars

17 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Latest commit

History

14 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

FastCGI processor for the Go-guerrilla package.

FastCGI is an optimized CGI protocol implementation used by web servers to execute scripts or other programs.

Well, it's NOT only for web servers. Yes, you've read that right ;-)

About

This package is a Processor for the Go-Guerrilla default Backend interface implementation. Typical use for this package is if you would like to add the ability to deliver emails to your FastCGI backend, using Go-Guerrilla's built-in gateway backend.

Just like a web server would hand over the HTTP request to a FastCGI backend, this plugin allows you to hand over the processing of an email to your FastCGI backend, such as php-fpm.

The reason why you would do this is because perhaps your codebase is in a scripting language such as PHP, so there's no need to learn Go, becoming easier for you to maintain, no need to re-compile to change, use your favourite framework / library / IDE, etc.

Also, there's no overhead of a web server - it goes straight to your script.

Usage

Import "github.com/flashmob/fastcgi-processor" to your Go-guerrilla project.
Assuming you have imported the go-guerrilla package already, and all dependencies.

Then, when using go-guerrilla as a package, use something like this

cfg:=&AppConfig{
LogFile: "stderr",
AllowedHosts: []string{"example.com"},
BackendConfig: backends.BackendConfig{
"save_process" : "HeadersParser|Debugger|FastCGI",
"validate_process" : "FastCGI",
"fcgi_script_filename_save" : "/home/path/to/save.php",
"fcgi_script_filename_validate" : "/home/path/to/validate.php",
"fcgi_connection_type" : "unix",
"fcgi_connection_address" : "/tmp/php-fpm.sock"
},
}
d:=Daemon{Config: cfg}
d.AddProcessor("FastCGI", fastcgi_processor.Processor)
d.Start()
// .. keep the server busy..

This will let Go-Guerrilla know about your FastCGI processor. Note that here we've added FastCGI to the end of the save_process config option, then used the d.AddProcessor api call to register it. Then configured other settings.

See the configuration section for how to configure.

Configuration

The following values are required in your backend_config section

{
"fcgi_script_filename_save" : "/home/path/to/save.php",
"fcgi_script_filename_validate" : "/home/path/to/validate.php",
"fcgi_connection_type" : "unix",
"fcgi_connection_address" : "/tmp/php-fpm.sock"
} 

fcgi_connection_type type can be unix or tcp. fcgi_connection_address is a path to a unix socket descriptor, or IP address with tcp port eg. "127.0.0.1:8000"

If fcgi_connection_address using the unix socket descriptor, make sure your program has permissions for writing to it. The permissions will be tested during initialization.

Don't forget to add FastCGI to the end of your save_process config option, eg:

"save_process": "HeadersParser|Debugger|Hasher|Header|FastCGI",

also, add FastCGI to the end of your validate_process config option if you want to use the validate script, eg:

"validate_process": "FastCGI",

Scripting

Validate Recipient Email

A single parameter comes to to your recipient validating script via HTTP GET.

  • rcpt_to - the email address that we want to validate

Output:

Please echo the string PASS and nothing else if validation passed. Otherwise return anything you wish.

Save Mail

The parameters comes to to your saving script via a HTTP POST.

The following parameters will be sent:

  • remote_ip - remote ip address of the client that we got the email from (not the sender)
  • subject - the subject of the email (if available)
  • tls_on - boolean, represented as string "true" or "false", was the connection a TLS connection?
  • helo - hello sent by the client when connecting to us
  • mail_from - string of the From email address, could be blank to indicate a bounce
  • body - the raw email body, along with the headers. Please make sure your Fast CGI gateway can handle large enough POST

Output:

Please echo the string SAVED if successful.

Example

See MailDiranasaurus - it uses this package as an example, https://github.com/flashmob/MailDiranasaurus

Credits

This package depends on Shen Sheng's Go Fastcgi client package.

go get github.com/sloonz/go-maildir

Tips

Your FastCGI script should timeout well before 30 seconds, preferably finish under 1 second.

About

FastCGI processor package for https://github.com/flashmob/go-guerrilla (ie Save/Process emails with PHP-FPM or other fcgi backend)

Resources

Stars

17 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Latest commit

History

14 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

FastCGI processor for the Go-guerrilla package.

FastCGI is an optimized CGI protocol implementation used by web servers to execute scripts or other programs.

Well, it's NOT only for web servers. Yes, you've read that right ;-)

About

This package is a Processor for the Go-Guerrilla default Backend interface implementation. Typical use for this package is if you would like to add the ability to deliver emails to your FastCGI backend, using Go-Guerrilla's built-in gateway backend.

Just like a web server would hand over the HTTP request to a FastCGI backend, this plugin allows you to hand over the processing of an email to your FastCGI backend, such as php-fpm.

The reason why you would do this is because perhaps your codebase is in a scripting language such as PHP, so there's no need to learn Go, becoming easier for you to maintain, no need to re-compile to change, use your favourite framework / library / IDE, etc.

Also, there's no overhead of a web server - it goes straight to your script.

Usage

Import "github.com/flashmob/fastcgi-processor" to your Go-guerrilla project.
Assuming you have imported the go-guerrilla package already, and all dependencies.

Then, when using go-guerrilla as a package, use something like this

cfg:=&AppConfig{
LogFile: "stderr",
AllowedHosts: []string{"example.com"},
BackendConfig: backends.BackendConfig{
"save_process" : "HeadersParser|Debugger|FastCGI",
"validate_process" : "FastCGI",
"fcgi_script_filename_save" : "/home/path/to/save.php",
"fcgi_script_filename_validate" : "/home/path/to/validate.php",
"fcgi_connection_type" : "unix",
"fcgi_connection_address" : "/tmp/php-fpm.sock"
},
}
d:=Daemon{Config: cfg}
d.AddProcessor("FastCGI", fastcgi_processor.Processor)
d.Start()
// .. keep the server busy..

This will let Go-Guerrilla know about your FastCGI processor. Note that here we've added FastCGI to the end of the save_process config option, then used the d.AddProcessor api call to register it. Then configured other settings.

See the configuration section for how to configure.

Configuration

The following values are required in your backend_config section

{
"fcgi_script_filename_save" : "/home/path/to/save.php",
"fcgi_script_filename_validate" : "/home/path/to/validate.php",
"fcgi_connection_type" : "unix",
"fcgi_connection_address" : "/tmp/php-fpm.sock"
} 

fcgi_connection_type type can be unix or tcp. fcgi_connection_address is a path to a unix socket descriptor, or IP address with tcp port eg. "127.0.0.1:8000"

If fcgi_connection_address using the unix socket descriptor, make sure your program has permissions for writing to it. The permissions will be tested during initialization.

Don't forget to add FastCGI to the end of your save_process config option, eg:

"save_process": "HeadersParser|Debugger|Hasher|Header|FastCGI",

also, add FastCGI to the end of your validate_process config option if you want to use the validate script, eg:

"validate_process": "FastCGI",

Scripting

Validate Recipient Email

A single parameter comes to to your recipient validating script via HTTP GET.

  • rcpt_to - the email address that we want to validate

Output:

Please echo the string PASS and nothing else if validation passed. Otherwise return anything you wish.

Save Mail

The parameters comes to to your saving script via a HTTP POST.

The following parameters will be sent:

  • remote_ip - remote ip address of the client that we got the email from (not the sender)
  • subject - the subject of the email (if available)
  • tls_on - boolean, represented as string "true" or "false", was the connection a TLS connection?
  • helo - hello sent by the client when connecting to us
  • mail_from - string of the From email address, could be blank to indicate a bounce
  • body - the raw email body, along with the headers. Please make sure your Fast CGI gateway can handle large enough POST

Output:

Please echo the string SAVED if successful.

Example

See MailDiranasaurus - it uses this package as an example, https://github.com/flashmob/MailDiranasaurus

Credits

This package depends on Shen Sheng's Go Fastcgi client package.

go get github.com/sloonz/go-maildir

Tips

Your FastCGI script should timeout well before 30 seconds, preferably finish under 1 second.

About

FastCGI processor package for https://github.com/flashmob/go-guerrilla (ie Save/Process emails with PHP-FPM or other fcgi backend)

Resources

Stars

17 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

Latest commit

History

14 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

FastCGI processor for the Go-guerrilla package.

FastCGI is an optimized CGI protocol implementation used by web servers to execute scripts or other programs.

Well, it's NOT only for web servers. Yes, you've read that right ;-)

About

This package is a Processor for the Go-Guerrilla default Backend interface implementation. Typical use for this package is if you would like to add the ability to deliver emails to your FastCGI backend, using Go-Guerrilla's built-in gateway backend.

Just like a web server would hand over the HTTP request to a FastCGI backend, this plugin allows you to hand over the processing of an email to your FastCGI backend, such as php-fpm.

The reason why you would do this is because perhaps your codebase is in a scripting language such as PHP, so there's no need to learn Go, becoming easier for you to maintain, no need to re-compile to change, use your favourite framework / library / IDE, etc.

Also, there's no overhead of a web server - it goes straight to your script.

Usage

Import "github.com/flashmob/fastcgi-processor" to your Go-guerrilla project.
Assuming you have imported the go-guerrilla package already, and all dependencies.

Then, when using go-guerrilla as a package, use something like this

cfg:=&AppConfig{
LogFile: "stderr",
AllowedHosts: []string{"example.com"},
BackendConfig: backends.BackendConfig{
"save_process" : "HeadersParser|Debugger|FastCGI",
"validate_process" : "FastCGI",
"fcgi_script_filename_save" : "/home/path/to/save.php",
"fcgi_script_filename_validate" : "/home/path/to/validate.php",
"fcgi_connection_type" : "unix",
"fcgi_connection_address" : "/tmp/php-fpm.sock"
},
}
d:=Daemon{Config: cfg}
d.AddProcessor("FastCGI", fastcgi_processor.Processor)
d.Start()
// .. keep the server busy..

This will let Go-Guerrilla know about your FastCGI processor. Note that here we've added FastCGI to the end of the save_process config option, then used the d.AddProcessor api call to register it. Then configured other settings.

See the configuration section for how to configure.

Configuration

The following values are required in your backend_config section

{
"fcgi_script_filename_save" : "/home/path/to/save.php",
"fcgi_script_filename_validate" : "/home/path/to/validate.php",
"fcgi_connection_type" : "unix",
"fcgi_connection_address" : "/tmp/php-fpm.sock"
} 

fcgi_connection_type type can be unix or tcp. fcgi_connection_address is a path to a unix socket descriptor, or IP address with tcp port eg. "127.0.0.1:8000"

If fcgi_connection_address using the unix socket descriptor, make sure your program has permissions for writing to it. The permissions will be tested during initialization.

Don't forget to add FastCGI to the end of your save_process config option, eg:

"save_process": "HeadersParser|Debugger|Hasher|Header|FastCGI",

also, add FastCGI to the end of your validate_process config option if you want to use the validate script, eg:

"validate_process": "FastCGI",

Scripting

Validate Recipient Email

A single parameter comes to to your recipient validating script via HTTP GET.

  • rcpt_to - the email address that we want to validate

Output:

Please echo the string PASS and nothing else if validation passed. Otherwise return anything you wish.

Save Mail

The parameters comes to to your saving script via a HTTP POST.

The following parameters will be sent:

  • remote_ip - remote ip address of the client that we got the email from (not the sender)
  • subject - the subject of the email (if available)
  • tls_on - boolean, represented as string "true" or "false", was the connection a TLS connection?
  • helo - hello sent by the client when connecting to us
  • mail_from - string of the From email address, could be blank to indicate a bounce
  • body - the raw email body, along with the headers. Please make sure your Fast CGI gateway can handle large enough POST

Output:

Please echo the string SAVED if successful.

Example

See MailDiranasaurus - it uses this package as an example, https://github.com/flashmob/MailDiranasaurus

Credits

This package depends on Shen Sheng's Go Fastcgi client package.

go get github.com/sloonz/go-maildir

Tips

Your FastCGI script should timeout well before 30 seconds, preferably finish under 1 second.

About

FastCGI processor package for https://github.com/flashmob/go-guerrilla (ie Save/Process emails with PHP-FPM or other fcgi backend)

Resources

Stars

17 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Latest commit

History

14 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

FastCGI processor for the Go-guerrilla package.

FastCGI is an optimized CGI protocol implementation used by web servers to execute scripts or other programs.

Well, it's NOT only for web servers. Yes, you've read that right ;-)

About

This package is a Processor for the Go-Guerrilla default Backend interface implementation. Typical use for this package is if you would like to add the ability to deliver emails to your FastCGI backend, using Go-Guerrilla's built-in gateway backend.

Just like a web server would hand over the HTTP request to a FastCGI backend, this plugin allows you to hand over the processing of an email to your FastCGI backend, such as php-fpm.

The reason why you would do this is because perhaps your codebase is in a scripting language such as PHP, so there's no need to learn Go, becoming easier for you to maintain, no need to re-compile to change, use your favourite framework / library / IDE, etc.

Also, there's no overhead of a web server - it goes straight to your script.

Usage

Import "github.com/flashmob/fastcgi-processor" to your Go-guerrilla project.
Assuming you have imported the go-guerrilla package already, and all dependencies.

Then, when using go-guerrilla as a package, use something like this

cfg:=&AppConfig{
LogFile: "stderr",
AllowedHosts: []string{"example.com"},
BackendConfig: backends.BackendConfig{
"save_process" : "HeadersParser|Debugger|FastCGI",
"validate_process" : "FastCGI",
"fcgi_script_filename_save" : "/home/path/to/save.php",
"fcgi_script_filename_validate" : "/home/path/to/validate.php",
"fcgi_connection_type" : "unix",
"fcgi_connection_address" : "/tmp/php-fpm.sock"
},
}
d:=Daemon{Config: cfg}
d.AddProcessor("FastCGI", fastcgi_processor.Processor)
d.Start()
// .. keep the server busy..

This will let Go-Guerrilla know about your FastCGI processor. Note that here we've added FastCGI to the end of the save_process config option, then used the d.AddProcessor api call to register it. Then configured other settings.

See the configuration section for how to configure.

Configuration

The following values are required in your backend_config section

{
"fcgi_script_filename_save" : "/home/path/to/save.php",
"fcgi_script_filename_validate" : "/home/path/to/validate.php",
"fcgi_connection_type" : "unix",
"fcgi_connection_address" : "/tmp/php-fpm.sock"
} 

fcgi_connection_type type can be unix or tcp. fcgi_connection_address is a path to a unix socket descriptor, or IP address with tcp port eg. "127.0.0.1:8000"

If fcgi_connection_address using the unix socket descriptor, make sure your program has permissions for writing to it. The permissions will be tested during initialization.

Don't forget to add FastCGI to the end of your save_process config option, eg:

"save_process": "HeadersParser|Debugger|Hasher|Header|FastCGI",

also, add FastCGI to the end of your validate_process config option if you want to use the validate script, eg:

"validate_process": "FastCGI",

Scripting

Validate Recipient Email

A single parameter comes to to your recipient validating script via HTTP GET.

  • rcpt_to - the email address that we want to validate

Output:

Please echo the string PASS and nothing else if validation passed. Otherwise return anything you wish.

Save Mail

The parameters comes to to your saving script via a HTTP POST.

The following parameters will be sent:

  • remote_ip - remote ip address of the client that we got the email from (not the sender)
  • subject - the subject of the email (if available)
  • tls_on - boolean, represented as string "true" or "false", was the connection a TLS connection?
  • helo - hello sent by the client when connecting to us
  • mail_from - string of the From email address, could be blank to indicate a bounce
  • body - the raw email body, along with the headers. Please make sure your Fast CGI gateway can handle large enough POST

Output:

Please echo the string SAVED if successful.

Example

See MailDiranasaurus - it uses this package as an example, https://github.com/flashmob/MailDiranasaurus

Credits

This package depends on Shen Sheng's Go Fastcgi client package.

go get github.com/sloonz/go-maildir

Tips

Your FastCGI script should timeout well before 30 seconds, preferably finish under 1 second.

About

FastCGI processor package for https://github.com/flashmob/go-guerrilla (ie Save/Process emails with PHP-FPM or other fcgi backend)

Resources

Stars

17 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Latest commit

History

14 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

FastCGI processor for the Go-guerrilla package.

FastCGI is an optimized CGI protocol implementation used by web servers to execute scripts or other programs.

Well, it's NOT only for web servers. Yes, you've read that right ;-)

About

This package is a Processor for the Go-Guerrilla default Backend interface implementation. Typical use for this package is if you would like to add the ability to deliver emails to your FastCGI backend, using Go-Guerrilla's built-in gateway backend.

Just like a web server would hand over the HTTP request to a FastCGI backend, this plugin allows you to hand over the processing of an email to your FastCGI backend, such as php-fpm.

The reason why you would do this is because perhaps your codebase is in a scripting language such as PHP, so there's no need to learn Go, becoming easier for you to maintain, no need to re-compile to change, use your favourite framework / library / IDE, etc.

Also, there's no overhead of a web server - it goes straight to your script.

Usage

Import "github.com/flashmob/fastcgi-processor" to your Go-guerrilla project.
Assuming you have imported the go-guerrilla package already, and all dependencies.

Then, when using go-guerrilla as a package, use something like this

cfg:=&AppConfig{
LogFile: "stderr",
AllowedHosts: []string{"example.com"},
BackendConfig: backends.BackendConfig{
"save_process" : "HeadersParser|Debugger|FastCGI",
"validate_process" : "FastCGI",
"fcgi_script_filename_save" : "/home/path/to/save.php",
"fcgi_script_filename_validate" : "/home/path/to/validate.php",
"fcgi_connection_type" : "unix",
"fcgi_connection_address" : "/tmp/php-fpm.sock"
},
}
d:=Daemon{Config: cfg}
d.AddProcessor("FastCGI", fastcgi_processor.Processor)
d.Start()
// .. keep the server busy..

This will let Go-Guerrilla know about your FastCGI processor. Note that here we've added FastCGI to the end of the save_process config option, then used the d.AddProcessor api call to register it. Then configured other settings.

See the configuration section for how to configure.

Configuration

The following values are required in your backend_config section

{
"fcgi_script_filename_save" : "/home/path/to/save.php",
"fcgi_script_filename_validate" : "/home/path/to/validate.php",
"fcgi_connection_type" : "unix",
"fcgi_connection_address" : "/tmp/php-fpm.sock"
} 

fcgi_connection_type type can be unix or tcp. fcgi_connection_address is a path to a unix socket descriptor, or IP address with tcp port eg. "127.0.0.1:8000"

If fcgi_connection_address using the unix socket descriptor, make sure your program has permissions for writing to it. The permissions will be tested during initialization.

Don't forget to add FastCGI to the end of your save_process config option, eg:

"save_process": "HeadersParser|Debugger|Hasher|Header|FastCGI",

also, add FastCGI to the end of your validate_process config option if you want to use the validate script, eg:

"validate_process": "FastCGI",

Scripting

Validate Recipient Email

A single parameter comes to to your recipient validating script via HTTP GET.

  • rcpt_to - the email address that we want to validate

Output:

Please echo the string PASS and nothing else if validation passed. Otherwise return anything you wish.

Save Mail

The parameters comes to to your saving script via a HTTP POST.

The following parameters will be sent:

  • remote_ip - remote ip address of the client that we got the email from (not the sender)
  • subject - the subject of the email (if available)
  • tls_on - boolean, represented as string "true" or "false", was the connection a TLS connection?
  • helo - hello sent by the client when connecting to us
  • mail_from - string of the From email address, could be blank to indicate a bounce
  • body - the raw email body, along with the headers. Please make sure your Fast CGI gateway can handle large enough POST

Output:

Please echo the string SAVED if successful.

Example

See MailDiranasaurus - it uses this package as an example, https://github.com/flashmob/MailDiranasaurus

Credits

This package depends on Shen Sheng's Go Fastcgi client package.

go get github.com/sloonz/go-maildir

Tips

Your FastCGI script should timeout well before 30 seconds, preferably finish under 1 second.

About

FastCGI processor package for https://github.com/flashmob/go-guerrilla (ie Save/Process emails with PHP-FPM or other fcgi backend)

Resources

Stars

17 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

Latest commit

History

14 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

FastCGI processor for the Go-guerrilla package.

FastCGI is an optimized CGI protocol implementation used by web servers to execute scripts or other programs.

Well, it's NOT only for web servers. Yes, you've read that right ;-)

About

This package is a Processor for the Go-Guerrilla default Backend interface implementation. Typical use for this package is if you would like to add the ability to deliver emails to your FastCGI backend, using Go-Guerrilla's built-in gateway backend.

Just like a web server would hand over the HTTP request to a FastCGI backend, this plugin allows you to hand over the processing of an email to your FastCGI backend, such as php-fpm.

The reason why you would do this is because perhaps your codebase is in a scripting language such as PHP, so there's no need to learn Go, becoming easier for you to maintain, no need to re-compile to change, use your favourite framework / library / IDE, etc.

Also, there's no overhead of a web server - it goes straight to your script.

Usage

Import "github.com/flashmob/fastcgi-processor" to your Go-guerrilla project.
Assuming you have imported the go-guerrilla package already, and all dependencies.

Then, when using go-guerrilla as a package, use something like this

cfg:=&AppConfig{
LogFile: "stderr",
AllowedHosts: []string{"example.com"},
BackendConfig: backends.BackendConfig{
"save_process" : "HeadersParser|Debugger|FastCGI",
"validate_process" : "FastCGI",
"fcgi_script_filename_save" : "/home/path/to/save.php",
"fcgi_script_filename_validate" : "/home/path/to/validate.php",
"fcgi_connection_type" : "unix",
"fcgi_connection_address" : "/tmp/php-fpm.sock"
},
}
d:=Daemon{Config: cfg}
d.AddProcessor("FastCGI", fastcgi_processor.Processor)
d.Start()
// .. keep the server busy..

This will let Go-Guerrilla know about your FastCGI processor. Note that here we've added FastCGI to the end of the save_process config option, then used the d.AddProcessor api call to register it. Then configured other settings.

See the configuration section for how to configure.

Configuration

The following values are required in your backend_config section

{
"fcgi_script_filename_save" : "/home/path/to/save.php",
"fcgi_script_filename_validate" : "/home/path/to/validate.php",
"fcgi_connection_type" : "unix",
"fcgi_connection_address" : "/tmp/php-fpm.sock"
} 

fcgi_connection_type type can be unix or tcp. fcgi_connection_address is a path to a unix socket descriptor, or IP address with tcp port eg. "127.0.0.1:8000"

If fcgi_connection_address using the unix socket descriptor, make sure your program has permissions for writing to it. The permissions will be tested during initialization.

Don't forget to add FastCGI to the end of your save_process config option, eg:

"save_process": "HeadersParser|Debugger|Hasher|Header|FastCGI",

also, add FastCGI to the end of your validate_process config option if you want to use the validate script, eg:

"validate_process": "FastCGI",

Scripting

Validate Recipient Email

A single parameter comes to to your recipient validating script via HTTP GET.

  • rcpt_to - the email address that we want to validate

Output:

Please echo the string PASS and nothing else if validation passed. Otherwise return anything you wish.

Save Mail

The parameters comes to to your saving script via a HTTP POST.

The following parameters will be sent:

  • remote_ip - remote ip address of the client that we got the email from (not the sender)
  • subject - the subject of the email (if available)
  • tls_on - boolean, represented as string "true" or "false", was the connection a TLS connection?
  • helo - hello sent by the client when connecting to us
  • mail_from - string of the From email address, could be blank to indicate a bounce
  • body - the raw email body, along with the headers. Please make sure your Fast CGI gateway can handle large enough POST

Output:

Please echo the string SAVED if successful.

Example

See MailDiranasaurus - it uses this package as an example, https://github.com/flashmob/MailDiranasaurus

Credits

This package depends on Shen Sheng's Go Fastcgi client package.

go get github.com/sloonz/go-maildir

Tips

Your FastCGI script should timeout well before 30 seconds, preferably finish under 1 second.

About

FastCGI processor package for https://github.com/flashmob/go-guerrilla (ie Save/Process emails with PHP-FPM or other fcgi backend)

Resources

Stars

17 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages