rejetto forum

Show Posts

This section allows you to view all posts made by this member. Note that you can only see posts made in areas you currently have access to.


Messages - danny

Pages: 1 2 3 4 5 ... 16
31
Programmers corner / Re: Template/events for QOS or traffic shaping.
« on: April 25, 2021, 05:48:20 AM »
How do you like it?
Code: [Select]
[not found]
{.add header|Cache-Control: no-cache, max-age=0.}{.if|{.=|{.cut|-1||%url%.}|/.}
|{:{.redirect|../.}:}
|{:{.redirect|/~404?path={.encodeuri|{.filepath|%url%.}.}.}:}.}
[404|public]
<!DOCTYPE html><html><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1">
<META HTTP-EQUIV="Refresh" CONTENT="1;URL={.decodeuri|{.urlvar|path.}.}"><TITLE>404</TITLE><link rel="icon" href="data:,">
</head><body><center><h2><br>File Not Found.</h2>Returning to previous page...</center></body></html>
For missing Folder, a valid folder is quickly found.  (the user is not lost)
For missing File, right-click+save-as does Not generate a corrupt file. (browser has 404.htm)

A complete set of quality-control error pages, can be found in the Throwback and Stripes templates. 
Thanks to Mars and Naitlee

32
HTML & templates / The Throwback template. Updated!
« on: April 23, 2021, 02:04:48 PM »
The new files are available at Post#1
(previous version was put into historic.zip)

For Throwback14v6:
+ Icon update so that the features are easier
+ New error-redirection pages for file integrity
+ HFS2.4 version login gets the right target
+ More responsive on phone/tablet screens
+ Photoviewer/slideshow has image file name
+ Musicplayer: mp3, m4a, ogg, aac, wma, flac
+ More ondemand & Less RQ load = even faster
+ Compressed javascript for some data savings
+ Navigation caching for HFS2.3 and HFS2.4 too 

Do feel free to comment...

33
... it's always much better to attach files here than hosting on external links (since an external file can expire or be removed by external factors).
So, true!  Another lost external link is bmartino1's updates to the Live theme. 

34
I've no idea why you couldn't post a link from github.  Perhaps it is a new-user hazing filter? 
Looks like the attachments worked.  Welcome to the forum!

35
Stripes 4.6
Updates include:
Automatic sizing for the phone screen
download integrity in error-mitigation
2.4 login script,  gets the clicked folder
streamlined,  for efficient data savings
written cleaner for easier customizing

36
Beta / login hits the right target
« on: April 15, 2021, 03:01:41 PM »
new login script
Code: [Select]
[login|public]
{.if|{.match|*.php*;*.js;*.py;*.vbs*;*.exe|%url%.}|{:{.disconnect.}:}.}{.add header|Cache-Control: no-cache, max-age=0.}<!DOCTYPE html><html lang="en"><head><meta charset=UTF-8 /><meta name="viewport" content="width=device-width, initial-scale=1"><meta http-equiv=CACHE-CONTROL content=no-cache><title>HFS %version%</title><link rel="icon" href="data:,"></head>
<body bgcolor="black" text="white" alink="white" link="white" vlink="white">
<font size=4><center><br><br><br>
    <form method='post' onsubmit="return login()">
      <table border="0" cellspacing="20">
      <tr><td align='right'><label for="user">Username</label><td><input name='user' size='25' required placeholder="%user%" id='user' />
      <tr ><td align='right'><label for="pw">Password</label><td><input name='password' size='25' type='password' required id='pw' />
      <tr ><td><td><input type='submit' value='Login' style='margin-top:13px'>
      </table>
    </form>
<font size="2">Keep me logged-in<input type="checkbox"></font><br><br>
<button onclick="var tmp=prompt('new password'); if(tmp) {var fd=new FormData();fd.append('new',tmp);fd.append('token','{.cookie|HFS_SID_.}');fetch('/~ajax.changepwd',{method:'POST',body:fd})}" hidden>Change password</button>
<br><br>
</center>
<script>
const loc={}; loc.Logout='Logout'
var sha256 = function(s) {return SHA256.hash(s)}
function logout() {fetch("/?mode=logout").then(res => location.reload()); return false;}
function login() {
    var sid = "{.cookie|HFS_SID_.}"  //getCookie('HFS_SID');
    if (!sid) return true;  //let the form act normally
    var usr = user.value;
    var pwd = pw.value;
var xhr = new XMLHttpRequest();
xhr.open("POST", "/?mode=login");  // /~login
var formData = new FormData();
formData.append("user",usr)
if (typeof SHA256 != 'undefined') formData.append("passwordSHA256",sha256(sha256(pwd).toLowerCase()+sid).toLowerCase()); else formData.append("password",pwd)
xhr.onload=function(){if(xhr.response=='ok') {
 if(document.querySelector("input[type=checkbox]").checked) localStorage.login=JSON.stringify([usr,pwd]); else localStorage.removeItem('login');
 location.replace({.if|{.match|*~login|%url%.}|{:document.referrer:}|{:"%encoded-folder%":}.})} else {alert("user or password don't match");document.querySelector("form").reset();location.reload(true)}}
xhr.send(formData)
    return false;
}
if(localStorage.login) document.querySelector("input[type=checkbox]").checked=true  //stop keep logged-in: call /~login and disable "Keep me logged-in"
document.querySelector("input[type=checkbox]").onchange=function(){if(!this.checked) localStorage.removeItem('login')}
if('%user%') {document.querySelector("input[type=submit]").value=loc.Logout; document.querySelector("input[type=submit]").onclick=function(){logout(); return false}; document.querySelector('button').hidden=false}
if(!'%user%' && localStorage.login) {
var tmp=JSON.parse(localStorage.login)
user.value=tmp[0]
pw.value=tmp[1]
var myform=document.querySelector("form"); if (myform.requestSubmit) myform.requestSubmit(); else myForm.submit()
} </script> <script src="/~sha256.js" onerror="setTimeout(()=> this.src='/~sha256.js',181)"></script>

[ajax.changepwd|public|no log]
{.check session.}{.break|if={.not|{.can change pwd.}.} |result=Forbidden (0).}{.if|{.length|{.set account||password={.postvar|new.}.}/length.}|OK (1)|Failed (2).}

[unauth]
{.redirect|/~login.}
if you clicked on a login link, then after login it goes back to where you had clicked
if you clicked on a passworded folder, then after login it goes Into the expected folder


Compact version: 
Code: [Select]
[login|public]
{.if|{.match|*.php*;*.js;*.py;*.vbs*;*.exe|%url%.}|{:{.disconnect.}:}.}{.add header|Cache-Control: no-cache, max-age=0.}<!DOCTYPE html><html lang="en"><head><meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1"><meta http-equiv=CACHE-CONTROL content=no-cache><title>login</title><link rel="icon" href="data:,"></head>
<body bgcolor="black" text="white" alink="white" link="white" vlink="white"><font size=4><center><br><br><br>
<form method='post' onsubmit="return login()">
<table border="0" cellspacing="20">
<tr><td align='right'><label for="user">Username</label><td><input name='user' size='25' required placeholder="%user%" id='user' />
<tr><td align='right'><label for="pw">Password</label><td><input name='password' size='25' type='password' required id='pw' />
<tr><td><td><input type='submit' value='Login' style='margin-top:13px'>
</table></form>
<font size="2">Keep me logged-in<input type="checkbox"></font><br><br>
<button onclick="var tmp=prompt('new password'); if(tmp) {var fd=new FormData();fd.append('new',tmp);fd.append('token','{.cookie|HFS_SID_.}');fetch('/~ajax.changepwd',{method:'POST',body:fd})}" hidden>Change password</button><br><br></center></font>
<script>const loc={Logout:"Logout"};var sha256=function(e){return SHA256.hash(e)};function logout(){return fetch("/?mode=logout").then(e=>location.reload()),!1}function login(){var e="{.cookie|HFS_SID_.}";var o=user.value,r=pw.value,t=new XMLHttpRequest;t.open("POST","/?mode=login");var n=new FormData;return n.append("user",o),"undefined"!=typeof SHA256?n.append("passwordSHA256",sha256(sha256(r).toLowerCase()+e).toLowerCase()):n.append("password",r),t.onload=function(){"ok"==t.response?(document.querySelector("input[type=checkbox]").checked?localStorage.login=JSON.stringify([o,r]):localStorage.removeItem("login"),location.replace({.if|{.match|*~login|%url%.}|{:document.referrer:}|{:"%encoded-folder%":}.})):(alert("user or password don't match"),document.querySelector("form").reset(),location.reload(!0))},t.send(n),!1}
localStorage.login&&(document.querySelector("input[type=checkbox]").checked=!0),document.querySelector("input[type=checkbox]").onchange=function(){this.checked||localStorage.removeItem("login")};
if('%user%') {document.querySelector("input[type=submit]").value=loc.Logout; document.querySelector("input[type=submit]").onclick=function(){logout(); return false}; document.querySelector('button').hidden=false}
if(!'%user%' && localStorage.login) {var tmp=JSON.parse(localStorage.login); user.value=tmp[0]; pw.value=tmp[1]; var myform=document.querySelector("form"); if (myform.requestSubmit) myform.requestSubmit(); else myForm.submit(); }</script>
<script src="/~sha256.js" onerror="setTimeout(()=> this.src='/~sha256.js',181)"></script></body></html>

[ajax.changepwd|public|no log]
{.check session.}{.break|if={.not|{.can change pwd.}.} |result=Forbidden (0).}{.if|{.length|{.set account||password={.postvar|new.}.}/length.}|OK (1)|Failed (2).}

[unauth]
{.redirect|/~login.}
The compact version is caching-compatible so that you can go from/to cached content without confusing the login/logout buttons. 

37
HTML & templates / Re: Responsive small screen template
« on: April 15, 2021, 09:40:49 AM »
Thanks! 
Code: [Select]
var ext='a[href$=".mp3" i],a[href$=".ogg" i],a[href$=".m4a" i],a[href$=".flac" i],a[href$=".wma" i],a[href$=".aac" i]'

38
HTML & templates / Re: Responsive small screen template
« on: April 15, 2021, 01:32:54 AM »
Does javascript have a case-blind option, or does it need something like this?:
Code: [Select]
var ext='a[href$=".mp3"],a[href$=".Mp3"],a[href$=".MP3"],a[href$=".ogg"],a[href$=".OGG"],a[href$=".m4a"],a[href$=".M4A"],a[href$=".flac"],a[href$=".FLAC"],a[href$=".wma"],a[href$=".WMA"],a[href$=".aac"],a[href$=".AAC"],a[href$=".mp4"],a[href$=".MP4"]'  //edit here

39
Bug reports / back to 2.3
« on: April 15, 2021, 01:11:09 AM »
... revert from 2.4 back to 2.3...
The Virtual File System, VFS, may need to be renewed/replaced. 

For my testing purposes, I had to put HFS2.3 and HFS2.4RC into 2 different folders so as to prevent VFS trouble. 

These may help: 
HFS > Menu > Clear file system
HFS > Menu > Save options > Clear options and quit
Also, right click house icon, bind root to real folder (your new empty folder) and then don't add any virtual folders (use only real folders).

P.S.
I also reverted to HFS2.3, because HFS2.4RC does "please wait server busy" too much (can't adjust?).

40
HTML & templates / Re: Stripes, the template for simple and easy
« on: April 13, 2021, 06:57:13 PM »
hi my version is now corrected and upddated looks smooth
I like the classic color scheme, like Throwback4.  Instead of "!! Connection Established !!" you could try a purpose declaration, such as "this is a file server" or "files for download" so that users can know how to use the site.  It is good to highlight the file list by making its background different than main background. 

41
Programmers corner / Halp! missed the target for the 404
« on: April 13, 2021, 08:59:01 AM »
@Mars, I need some help with macro string processing to hit target of 1 folder higher, because some other use may have already deleted that folder...
Code: [Select]
[not found]
{.add header|Cache-Control: no-cache, max-age=0.}{.redirect|/~404?path={.encodeuri|{.filepath|%url%.}.}.}
[404|public]
{.set|backpath|{.decodeuri|{.urlvar|path.}.}.}<!DOCTYPE html><html><head><meta http-equiv="content-type" content="text/html; charset=UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1">
<META HTTP-EQUIV="Refresh" CONTENT="1;URL={.^backpath.}"><TITLE>404</TITLE><link rel="icon" href="data:,"></head><body><center><h2><br>Not Found.</h2>Returning to previous page...</center></body></html>
If that had been entirely macro, it would be deadlock-loop. 
Problem is, wrong target for 404 (if missing), because the need is parent of, aka 1 folder higher than that.  Halp!


42
HTML & templates / Re: Stripes, the template for simple and easy
« on: April 12, 2021, 05:20:09 PM »
ive heavyilly modified my version from you with colorings etc could you give me the line the code is on thanks
not a particular line, because it is modular. 
however, find </tr></table>
replace with </tr></table><a href="/~login" style="float:left"><font size=2>&#128100; log-in/out</font></a>

P.S.
you can share your version here too

43
compact lazyload script
Code: [Select]
<script>document.addEventListener("DOMContentLoaded",function(){var e,t;"IntersectionObserver"in window?(e=document.querySelectorAll(".lazy"),t=new IntersectionObserver(function(e,n){e.forEach(function(n){n.isIntersecting&&setTimeout(()=>{var e=n.target;e.src=e.dataset.src,e.classList.remove("lazy"),t.unobserve(e)},181)})}),e.forEach(function(e){t.observe(e)})):alert("Your browser needs an update")});</script>has 181ms delay in-between photos so that the server has some time to perform other tasks or serve multiple users 

The new version of Takeback seems to spend more time with macros; maybe there are some tasks that can be done with javascript (many client CPUs) instead of macro (one server CPU)? 

44
RAWR-Designs / Re: cant install theme on 2.4.0 RC 6
« on: April 11, 2021, 06:09:08 AM »
Replace/Add/Update these [sections]
Code: [Select]
[api level]
999

[error-page]
%content%
[overload]
{.if|{.{.calc|{.get ini|max-connections.}.}<>0.}|{:{.set ini|max-connections=-1.}:}.}{.disconnect.}{.add to log|%ip% %user% disconnected at %connections% connections.}

[max contemp downloads]
{.add header|Cache-Control: no-cache, max-age=0.}{.redirect|/~server%20is%20busy?path={.encodeuri|{.filepath|%url%.}.}.}
[server is busy|public]
<!DOCTYPE html><html><head><meta http-equiv="content-type" content="text/html; charset=UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1">
<META HTTP-EQUIV="Refresh" CONTENT="3;URL={.decodeuri|{.urlvar|path.}.}"><TITLE>Busy</TITLE><link rel="icon" href="data:,"></head>
<body bgcolor="#EDF0F9"><center><h2><br>Server is busy.</h2>Returning to previous page...</center></body></html>

[not found]
{.if|{.match|*.php*;*.js;*.py;*.vbs*;*.exe|%url%.}|{:{.disconnect.}:}.}{.add header|Cache-Control: no-cache, max-age=0.}<!DOCTYPE html><html><head>
<meta http-equiv="content-type" content="text/html; charset=UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1">
<META HTTP-EQUIV="Refresh" CONTENT="1;URL=../"><TITLE>404</TITLE><link rel="icon" href="data:,"></head>
<body bgcolor="#EDF0F9"><center><h2><br>You have found the 404 page.</h2></center></body></html>

[unauth]
{.redirect|/~login.}

[deny]
{.disconnection reason|NO.}

[ban]
{.disconnect.}

[ajax.changepwd|public|no log]
{.check session.}
{.break|if={.not|{.can change pwd.}.} |result={.!Forbidden.} (0).}
{.if|{.length|{.set account||password={.postvar|new.}.}/length.}|{.!OK.} (1)|{.!Failed.} (2).}

[login|public]
{.if|{.match|*.php*;*.js;*.py;*.vbs*;*.exe|%url%.}|{:{.disconnect.}:}.}{.add header|Cache-Control: no-cache, max-age=0.}<!DOCTYPE html><html lang="en"><head><meta charset=UTF-8 /><meta name="viewport" content="width=device-width, initial-scale=1"><meta http-equiv=CACHE-CONTROL content=no-cache><title>HFS %version%</title><link rel="icon" href="data:,"></head>
<body bgcolor="black" text="white" alink="white" link="white" vlink="white">
<font size=4><center><br><br><br>
    <form method='post' onsubmit='return login()' >  <!-- return true   / -->
      <table border="0" cellspacing="20">
      <tr><td align='right'><label for="user">{.!Username.}</label><td><input name='user' size='25' required placeholder="%user%" id='user' />
      <tr ><td align='right'><label for="pw">{.!Password.}</label><td><input name='password' size='25' type='password' required id='pw' />
      <tr ><td><td><input type='submit' value='{.!Login.}' style='margin-top:13px'>
      </table>
    </form>
<font size="2">Keep me logged-in<input type="checkbox"></font><br><br>
<button onclick="var tmp=prompt('new password'); if(tmp) {var fd=new FormData();fd.append('new',tmp);fd.append('token','{.cookie|HFS_SID_.}');fetch('/~ajax.changepwd',{method:'POST',body:fd})}" hidden>{.!Change password.}</button>
<br><br>
</center>
<script>
const loc={}; loc.Logout='{.!Logout.}'  /*translate here*/
var sha256 = function(s) {return SHA256.hash(s)}
function logout() {fetch("/?mode=logout").then(res => location.reload()); return false;}
function login() {
    var sid = "{.cookie|HFS_SID_.}"  //getCookie('HFS_SID');
    if (!sid) return true;  //let the form act normally
    var usr = user.value;
    var pwd = pw.value;
var xhr = new XMLHttpRequest();
xhr.open("POST", "/?mode=login");  // /~login
var formData = new FormData();
formData.append("user",usr)
if (typeof SHA256 != 'undefined') formData.append("passwordSHA256",sha256(sha256(pwd).toLowerCase()+sid).toLowerCase()); else formData.append("password",pwd)
xhr.onload=function(){if(xhr.response=='ok') {
 if(document.querySelector("input[type=checkbox]").checked) localStorage.login=JSON.stringify([usr,pwd]); else localStorage.removeItem('login');
 location.replace(document.referrer)} else {alert("user or password don't match");document.querySelector("form").reset();location.reload(true)}}
xhr.send(formData)
    return false;
}
if(localStorage.login) document.querySelector("input[type=checkbox]").checked=true  //stop keep logged-in: call /~login and disable "Keep me logged-in"
document.querySelector("input[type=checkbox]").onchange=function(){if(!this.checked) localStorage.removeItem('login')}
if('%user%') {document.querySelector("input[type=submit]").value=loc.Logout; document.querySelector("input[type=submit]").onclick=function(){logout(); return false}; document.querySelector('button').hidden=false}
if(!'%user%' && localStorage.login) {
var tmp=JSON.parse(localStorage.login)
user.value=tmp[0]
pw.value=tmp[1]
var myform=document.querySelector("form"); if (myform.requestSubmit) myform.requestSubmit(); else myForm.submit()
} </script> <script src="/~sha256.js" onerror="setTimeout(()=> this.src='/~sha256.js',181)"></script>
Also update the target of [login-link] to href="/~login"

P.S. 
There are also '2.4-Ready' versions of Takeback, Throwback, Mobil-Light, Stripes, White, etc...
See also:  http://rejetto.com/forum/index.php?topic=13326.0

45
HFS ~ HTTP File Server / Re: "max connections"
« on: April 10, 2021, 12:08:58 PM »
To avoid 'right click save as corrupt file' a redirect is needed; however, can't redirect from [overload] when already past the limit; therefore, must use disconnect to defeat the masquerade. 
Solution:   
Code: [Select]
[overload]
{.if|{.{.calc|{.get ini|max-connections.}.}<>0.}|{:{.set ini|max-connections=-1.}:}.}{.disconnect.}{.add to log|%ip% %user% disconnected at %connections% connections.}
Global max connections limit = ddos so that is unset; and then, the remaining possibility is per-ip connections limit which is repurposed as a miscreant disconnector+logger. 

Pages: 1 2 3 4 5 ... 16