Skip to content

Instantly share code, notes, and snippets.

source url: http://blog.netgusto.com/solving-web-file-permissions-problem-once-and-for-all/

If like us you develop Web applications and deploy them on Linux servers (development or production environments), you might have wondered how to handle file permissions on the application files in a simple and fool-proof way.

Some facts

Developers operating on the server require specific file permissions on the application files to be able to read and write them (for obvious reasons).

The web server (Apache, nginx, Lighttpd, etc.) also requires specific file permissions on the application files to be able to read them, and for some files (but not all files), to be able to write them (like for instance, when uploading a file, or creating a thumbnail, etc.)

import isSelectorValid from './isSelectorValid';
export default (param) => {
switch (true) {
case isSelectorValid(param):
return document.querySelectorAll(param);
case param instanceof HTMLElement:
return [param];
case param instanceof NodeList:
case param instanceof HTMLCollection:
const queryCheck = (s) => document.createDocumentFragment().querySelector(s);
export default function isSelectorValid(selector) {
if (typeof selector !== 'string') return false;
try { queryCheck(selector); } catch { return false; }
return true;
}
function getLabelTextFromField(formElement) {
return formElement.ariaLabel
|| formElement.labels?.[0]?.textContent;
}
### Keybase proof
I hereby claim:
* I am robsonsobral on github.
* I am sobral (https://keybase.io/sobral) on keybase.
* I have a public key ASAkt8uL-f9T3CK-tZOXvoDrYwLll6Numf_mDlhuli_s9go
To claim this, I am signing this object:
@robsonsobral
robsonsobral / meta-tags.html
Created May 23, 2020 23:20 — forked from benwo/meta-tags.html
Standard meta tags and meta image tags (and sizes).
<!DOCTYPE html>
<html itemscope itemtype="http://schema.org/Organization" lang="en">
<head>
<!-- Settings -->
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1">
<!-- Search Engines -->
@robsonsobral
robsonsobral / cloudflare.sh
Created April 25, 2020 03:29 — forked from Manouchehri/cloudflare.sh
Allow CloudFlare only
# Source:
# https://www.cloudflare.com/ips
# https://support.cloudflare.com/hc/en-us/articles/200169166-How-do-I-whitelist-CloudFlare-s-IP-addresses-in-iptables-
for i in `curl https://www.cloudflare.com/ips-v4`; do iptables -I INPUT -p tcp -m multiport --dports http,https -s $i -j ACCEPT; done
for i in `curl https://www.cloudflare.com/ips-v6`; do ip6tables -I INPUT -p tcp -m multiport --dports http,https -s $i -j ACCEPT; done
# Avoid racking up billing/attacks
# WARNING: If you get attacked and CloudFlare drops you, your site(s) will be unreachable.
iptables -A INPUT -p tcp -m multiport --dports http,https -j DROP
@robsonsobral
robsonsobral / cloudflare-ip.sh
Created April 25, 2020 03:29 — forked from jschpp/cloudflare-ip.sh
script to add all cloudflare IPs to iptables
#!/bin/sh
exec > /var/log/cloudflare.log 2>&1
set -x
for ip in $(curl -s https://www.cloudflare.com/ips-v4); do /usr/sbin/iptables -I INPUT -p tcp -m multiport --dports http,https -s "$ip" -j ACCEPT; done
for ip in $(curl -s https://www.cloudflare.com/ips-v6); do /usr/sbin/ip6tables -I INPUT -p tcp -m multiport --dports http,https -s "$ip" -j ACCEPT; done
@robsonsobral
robsonsobral / paste.js
Created December 4, 2019 13:34 — forked from cesarfigueroa/paste.js
Paste onto a [contenteditable] element as plain text
document.querySelector('[contenteditable]').addEventListener('paste', function (event) {
event.preventDefault();
document.execCommand('inserttext', false, event.clipboardData.getData('text/plain'));
});
@robsonsobral
robsonsobral / pageant-autoload-keys-at-startup.txt
Created January 21, 2019 23:13 — forked from chunter/pageant-autoload-keys-at-startup.txt
Make Pageant autoload keys at startup
To make Pageant automatically run and load keys at startup:
- Find the location of pageant.exe
- Windows key + R to open the 'run' dialog box
- Type: 'shell:startup' in the dialog box
- Create a shortcut to the pageant.exe and put into this startup folder.