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
It works:
Code: [Select]
[+]
{.if|{.!=|%ip%|127.0.0.1.}|{:{.disconnect.}:}.}

32
Programmers corner / Re: Template/events for QOS or traffic shaping.
« on: April 28, 2021, 02:23:15 PM »
@Mars
For QOS purpose, I had few questions...

Are there some per ip-specific measurements?
How to make global variable apply to only 1 ip? 

something like these:?
connections_this_ip
active_downloads_this_ip
set or get #^flag_this_ip

Some templates have extra features (such as thumbnails) that are not good in high-load conditions.  It is good to make a bypass macro to temporarily streamline the template (without extras) to lighten the load.  If global measure is used for traffic shaping, then 1 miscreant affects everyone (this is anti-QOS); so, for QOS function, it may be better if feature-bypass macro targeted the specific overdoing IP address. 
I don't know; but, if the per-ip measures are available, then I could test it. 

33
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

34
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...

35
... 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. 

36
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!

37
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

38
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. 

39
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]'

40
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

41
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?).

42
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. 

43
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!


44
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

45
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)? 

Pages: 1 2 3 4 5 ... 16