Repository files navigation

rust-file-server (rfs)

pretty much as the name implies a file server written in rust. using this as a way to learn more about various things as well as integrating with third party services such as AWS and Azure but also plan on using this for my own purposes.

planned features

  • integration with third-party storage providers
    • Azure
    • AWS
    • BackBlaze
  • event propagation
    • web-hooks
  • secret management
    • local
    • Hashicorp Valut
    • Azure Key Vault
    • AWS Secrets Manager
  • file versioning
  • oauth support
  • bot accounts for automation

a cli is available for interacting with the server and a browser interface is planned for the future.

Setup

the server requires a PostgreSQL database to operate and store data. is an initialization script to setup a database that can be run manually or use rfs-db to run the initialization process for you.

once the database is setup the server can be run. tests have been run on Rocky and Ubuntu Linux thus far but don't foresee a reason that it will not work on other systems.

check the individual README.md's for more information on how to run/use the sub-modules

running

the server takes command line arguments and also takes a config file that will allow for more options to be specified. to see a list of available command line args run rfs --help.

config file options are as follows (JSON | Yaml):

# the id of the server, used for creating ids in the databaseid: 1# the directory to store server data, can be relative or absolutedata: /etc/rfs/rfs-server# ip address to bind the server toip: 0.0.0.0# ip port to listen onport: 8000# template rendering optionstemplates:
# directory where templates are storeddirectory: /etc/rfs/templates# specifies a dev option to always load templates from the file systemdev_mode: false# assets to be available for browser interfaces (not implemented)# paths can be relative or absoluteassets:
# list of files available. the key is the url for the request and the value# is the path to the filefiles:
"/favicon.ico": /etc/rfs/assets/favicon.ico# list of directories to do file lookups. the key is the url for the request# and the value is the path to the directorydirectories:
"/assets": /etc/rfs/assets# the available options for security featuressec:
# options specific to user session managementsession:
# the hashing algorithm to use for session tokenshash: Blake3# stuffsecure: false# PostgreSQL database connection informationdb:
user: postgrespassword: passwordhost: localhostport: 5432dbname: rfs

About

custom made file server written in rust.

Topics

Resources

Stars

0 stars

Watchers

1 watching

Forks

Used by

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

Repository files navigation

rust-file-server (rfs)

pretty much as the name implies a file server written in rust. using this as a way to learn more about various things as well as integrating with third party services such as AWS and Azure but also plan on using this for my own purposes.

planned features

  • integration with third-party storage providers
    • Azure
    • AWS
    • BackBlaze
  • event propagation
    • web-hooks
  • secret management
    • local
    • Hashicorp Valut
    • Azure Key Vault
    • AWS Secrets Manager
  • file versioning
  • oauth support
  • bot accounts for automation

a cli is available for interacting with the server and a browser interface is planned for the future.

Setup

the server requires a PostgreSQL database to operate and store data. is an initialization script to setup a database that can be run manually or use rfs-db to run the initialization process for you.

once the database is setup the server can be run. tests have been run on Rocky and Ubuntu Linux thus far but don't foresee a reason that it will not work on other systems.

check the individual README.md's for more information on how to run/use the sub-modules

running

the server takes command line arguments and also takes a config file that will allow for more options to be specified. to see a list of available command line args run rfs --help.

config file options are as follows (JSON | Yaml):

# the id of the server, used for creating ids in the databaseid: 1# the directory to store server data, can be relative or absolutedata: /etc/rfs/rfs-server# ip address to bind the server toip: 0.0.0.0# ip port to listen onport: 8000# template rendering optionstemplates:
# directory where templates are storeddirectory: /etc/rfs/templates# specifies a dev option to always load templates from the file systemdev_mode: false# assets to be available for browser interfaces (not implemented)# paths can be relative or absoluteassets:
# list of files available. the key is the url for the request and the value# is the path to the filefiles:
"/favicon.ico": /etc/rfs/assets/favicon.ico# list of directories to do file lookups. the key is the url for the request# and the value is the path to the directorydirectories:
"/assets": /etc/rfs/assets# the available options for security featuressec:
# options specific to user session managementsession:
# the hashing algorithm to use for session tokenshash: Blake3# stuffsecure: false# PostgreSQL database connection informationdb:
user: postgrespassword: passwordhost: localhostport: 5432dbname: rfs

About

custom made file server written in rust.

Topics

Resources

Stars

0 stars

Watchers

1 watching

Forks

Used by

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

Repository files navigation

rust-file-server (rfs)

pretty much as the name implies a file server written in rust. using this as a way to learn more about various things as well as integrating with third party services such as AWS and Azure but also plan on using this for my own purposes.

planned features

  • integration with third-party storage providers
    • Azure
    • AWS
    • BackBlaze
  • event propagation
    • web-hooks
  • secret management
    • local
    • Hashicorp Valut
    • Azure Key Vault
    • AWS Secrets Manager
  • file versioning
  • oauth support
  • bot accounts for automation

a cli is available for interacting with the server and a browser interface is planned for the future.

Setup

the server requires a PostgreSQL database to operate and store data. is an initialization script to setup a database that can be run manually or use rfs-db to run the initialization process for you.

once the database is setup the server can be run. tests have been run on Rocky and Ubuntu Linux thus far but don't foresee a reason that it will not work on other systems.

check the individual README.md's for more information on how to run/use the sub-modules

running

the server takes command line arguments and also takes a config file that will allow for more options to be specified. to see a list of available command line args run rfs --help.

config file options are as follows (JSON | Yaml):

# the id of the server, used for creating ids in the databaseid: 1# the directory to store server data, can be relative or absolutedata: /etc/rfs/rfs-server# ip address to bind the server toip: 0.0.0.0# ip port to listen onport: 8000# template rendering optionstemplates:
# directory where templates are storeddirectory: /etc/rfs/templates# specifies a dev option to always load templates from the file systemdev_mode: false# assets to be available for browser interfaces (not implemented)# paths can be relative or absoluteassets:
# list of files available. the key is the url for the request and the value# is the path to the filefiles:
"/favicon.ico": /etc/rfs/assets/favicon.ico# list of directories to do file lookups. the key is the url for the request# and the value is the path to the directorydirectories:
"/assets": /etc/rfs/assets# the available options for security featuressec:
# options specific to user session managementsession:
# the hashing algorithm to use for session tokenshash: Blake3# stuffsecure: false# PostgreSQL database connection informationdb:
user: postgrespassword: passwordhost: localhostport: 5432dbname: rfs

About

custom made file server written in rust.

Topics

Resources

Stars

0 stars

Watchers

1 watching

Forks

Used by

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

Repository files navigation

rust-file-server (rfs)

pretty much as the name implies a file server written in rust. using this as a way to learn more about various things as well as integrating with third party services such as AWS and Azure but also plan on using this for my own purposes.

planned features

  • integration with third-party storage providers
    • Azure
    • AWS
    • BackBlaze
  • event propagation
    • web-hooks
  • secret management
    • local
    • Hashicorp Valut
    • Azure Key Vault
    • AWS Secrets Manager
  • file versioning
  • oauth support
  • bot accounts for automation

a cli is available for interacting with the server and a browser interface is planned for the future.

Setup

the server requires a PostgreSQL database to operate and store data. is an initialization script to setup a database that can be run manually or use rfs-db to run the initialization process for you.

once the database is setup the server can be run. tests have been run on Rocky and Ubuntu Linux thus far but don't foresee a reason that it will not work on other systems.

check the individual README.md's for more information on how to run/use the sub-modules

running

the server takes command line arguments and also takes a config file that will allow for more options to be specified. to see a list of available command line args run rfs --help.

config file options are as follows (JSON | Yaml):

# the id of the server, used for creating ids in the databaseid: 1# the directory to store server data, can be relative or absolutedata: /etc/rfs/rfs-server# ip address to bind the server toip: 0.0.0.0# ip port to listen onport: 8000# template rendering optionstemplates:
# directory where templates are storeddirectory: /etc/rfs/templates# specifies a dev option to always load templates from the file systemdev_mode: false# assets to be available for browser interfaces (not implemented)# paths can be relative or absoluteassets:
# list of files available. the key is the url for the request and the value# is the path to the filefiles:
"/favicon.ico": /etc/rfs/assets/favicon.ico# list of directories to do file lookups. the key is the url for the request# and the value is the path to the directorydirectories:
"/assets": /etc/rfs/assets# the available options for security featuressec:
# options specific to user session managementsession:
# the hashing algorithm to use for session tokenshash: Blake3# stuffsecure: false# PostgreSQL database connection informationdb:
user: postgrespassword: passwordhost: localhostport: 5432dbname: rfs

About

custom made file server written in rust.

Topics

Resources

Stars

0 stars

Watchers

1 watching

Forks

Used by

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

Repository files navigation

rust-file-server (rfs)

pretty much as the name implies a file server written in rust. using this as a way to learn more about various things as well as integrating with third party services such as AWS and Azure but also plan on using this for my own purposes.

planned features

  • integration with third-party storage providers
    • Azure
    • AWS
    • BackBlaze
  • event propagation
    • web-hooks
  • secret management
    • local
    • Hashicorp Valut
    • Azure Key Vault
    • AWS Secrets Manager
  • file versioning
  • oauth support
  • bot accounts for automation

a cli is available for interacting with the server and a browser interface is planned for the future.

Setup

the server requires a PostgreSQL database to operate and store data. is an initialization script to setup a database that can be run manually or use rfs-db to run the initialization process for you.

once the database is setup the server can be run. tests have been run on Rocky and Ubuntu Linux thus far but don't foresee a reason that it will not work on other systems.

check the individual README.md's for more information on how to run/use the sub-modules

running

the server takes command line arguments and also takes a config file that will allow for more options to be specified. to see a list of available command line args run rfs --help.

config file options are as follows (JSON | Yaml):

# the id of the server, used for creating ids in the databaseid: 1# the directory to store server data, can be relative or absolutedata: /etc/rfs/rfs-server# ip address to bind the server toip: 0.0.0.0# ip port to listen onport: 8000# template rendering optionstemplates:
# directory where templates are storeddirectory: /etc/rfs/templates# specifies a dev option to always load templates from the file systemdev_mode: false# assets to be available for browser interfaces (not implemented)# paths can be relative or absoluteassets:
# list of files available. the key is the url for the request and the value# is the path to the filefiles:
"/favicon.ico": /etc/rfs/assets/favicon.ico# list of directories to do file lookups. the key is the url for the request# and the value is the path to the directorydirectories:
"/assets": /etc/rfs/assets# the available options for security featuressec:
# options specific to user session managementsession:
# the hashing algorithm to use for session tokenshash: Blake3# stuffsecure: false# PostgreSQL database connection informationdb:
user: postgrespassword: passwordhost: localhostport: 5432dbname: rfs

About

custom made file server written in rust.

Topics

Resources

Stars

0 stars

Watchers

1 watching

Forks

Used by

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

Repository files navigation

rust-file-server (rfs)

pretty much as the name implies a file server written in rust. using this as a way to learn more about various things as well as integrating with third party services such as AWS and Azure but also plan on using this for my own purposes.

planned features

  • integration with third-party storage providers
    • Azure
    • AWS
    • BackBlaze
  • event propagation
    • web-hooks
  • secret management
    • local
    • Hashicorp Valut
    • Azure Key Vault
    • AWS Secrets Manager
  • file versioning
  • oauth support
  • bot accounts for automation

a cli is available for interacting with the server and a browser interface is planned for the future.

Setup

the server requires a PostgreSQL database to operate and store data. is an initialization script to setup a database that can be run manually or use rfs-db to run the initialization process for you.

once the database is setup the server can be run. tests have been run on Rocky and Ubuntu Linux thus far but don't foresee a reason that it will not work on other systems.

check the individual README.md's for more information on how to run/use the sub-modules

running

the server takes command line arguments and also takes a config file that will allow for more options to be specified. to see a list of available command line args run rfs --help.

config file options are as follows (JSON | Yaml):

# the id of the server, used for creating ids in the databaseid: 1# the directory to store server data, can be relative or absolutedata: /etc/rfs/rfs-server# ip address to bind the server toip: 0.0.0.0# ip port to listen onport: 8000# template rendering optionstemplates:
# directory where templates are storeddirectory: /etc/rfs/templates# specifies a dev option to always load templates from the file systemdev_mode: false# assets to be available for browser interfaces (not implemented)# paths can be relative or absoluteassets:
# list of files available. the key is the url for the request and the value# is the path to the filefiles:
"/favicon.ico": /etc/rfs/assets/favicon.ico# list of directories to do file lookups. the key is the url for the request# and the value is the path to the directorydirectories:
"/assets": /etc/rfs/assets# the available options for security featuressec:
# options specific to user session managementsession:
# the hashing algorithm to use for session tokenshash: Blake3# stuffsecure: false# PostgreSQL database connection informationdb:
user: postgrespassword: passwordhost: localhostport: 5432dbname: rfs

About

custom made file server written in rust.

Topics

Resources

Stars

0 stars

Watchers

1 watching

Forks

Used by

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

Repository files navigation

rust-file-server (rfs)

pretty much as the name implies a file server written in rust. using this as a way to learn more about various things as well as integrating with third party services such as AWS and Azure but also plan on using this for my own purposes.

planned features

  • integration with third-party storage providers
    • Azure
    • AWS
    • BackBlaze
  • event propagation
    • web-hooks
  • secret management
    • local
    • Hashicorp Valut
    • Azure Key Vault
    • AWS Secrets Manager
  • file versioning
  • oauth support
  • bot accounts for automation

a cli is available for interacting with the server and a browser interface is planned for the future.

Setup

the server requires a PostgreSQL database to operate and store data. is an initialization script to setup a database that can be run manually or use rfs-db to run the initialization process for you.

once the database is setup the server can be run. tests have been run on Rocky and Ubuntu Linux thus far but don't foresee a reason that it will not work on other systems.

check the individual README.md's for more information on how to run/use the sub-modules

running

the server takes command line arguments and also takes a config file that will allow for more options to be specified. to see a list of available command line args run rfs --help.

config file options are as follows (JSON | Yaml):

# the id of the server, used for creating ids in the databaseid: 1# the directory to store server data, can be relative or absolutedata: /etc/rfs/rfs-server# ip address to bind the server toip: 0.0.0.0# ip port to listen onport: 8000# template rendering optionstemplates:
# directory where templates are storeddirectory: /etc/rfs/templates# specifies a dev option to always load templates from the file systemdev_mode: false# assets to be available for browser interfaces (not implemented)# paths can be relative or absoluteassets:
# list of files available. the key is the url for the request and the value# is the path to the filefiles:
"/favicon.ico": /etc/rfs/assets/favicon.ico# list of directories to do file lookups. the key is the url for the request# and the value is the path to the directorydirectories:
"/assets": /etc/rfs/assets# the available options for security featuressec:
# options specific to user session managementsession:
# the hashing algorithm to use for session tokenshash: Blake3# stuffsecure: false# PostgreSQL database connection informationdb:
user: postgrespassword: passwordhost: localhostport: 5432dbname: rfs

About

custom made file server written in rust.

Topics

Resources

Stars

0 stars

Watchers

1 watching

Forks

Used by

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

Repository files navigation

rust-file-server (rfs)

pretty much as the name implies a file server written in rust. using this as a way to learn more about various things as well as integrating with third party services such as AWS and Azure but also plan on using this for my own purposes.

planned features

  • integration with third-party storage providers
    • Azure
    • AWS
    • BackBlaze
  • event propagation
    • web-hooks
  • secret management
    • local
    • Hashicorp Valut
    • Azure Key Vault
    • AWS Secrets Manager
  • file versioning
  • oauth support
  • bot accounts for automation

a cli is available for interacting with the server and a browser interface is planned for the future.

Setup

the server requires a PostgreSQL database to operate and store data. is an initialization script to setup a database that can be run manually or use rfs-db to run the initialization process for you.

once the database is setup the server can be run. tests have been run on Rocky and Ubuntu Linux thus far but don't foresee a reason that it will not work on other systems.

check the individual README.md's for more information on how to run/use the sub-modules

running

the server takes command line arguments and also takes a config file that will allow for more options to be specified. to see a list of available command line args run rfs --help.

config file options are as follows (JSON | Yaml):

# the id of the server, used for creating ids in the databaseid: 1# the directory to store server data, can be relative or absolutedata: /etc/rfs/rfs-server# ip address to bind the server toip: 0.0.0.0# ip port to listen onport: 8000# template rendering optionstemplates:
# directory where templates are storeddirectory: /etc/rfs/templates# specifies a dev option to always load templates from the file systemdev_mode: false# assets to be available for browser interfaces (not implemented)# paths can be relative or absoluteassets:
# list of files available. the key is the url for the request and the value# is the path to the filefiles:
"/favicon.ico": /etc/rfs/assets/favicon.ico# list of directories to do file lookups. the key is the url for the request# and the value is the path to the directorydirectories:
"/assets": /etc/rfs/assets# the available options for security featuressec:
# options specific to user session managementsession:
# the hashing algorithm to use for session tokenshash: Blake3# stuffsecure: false# PostgreSQL database connection informationdb:
user: postgrespassword: passwordhost: localhostport: 5432dbname: rfs

About

custom made file server written in rust.

Topics

Resources

Stars

0 stars

Watchers

1 watching

Forks

Used by

Contributors

Languages