Sunday, September 03, 2023
apps@conference.yunohost.org
September
Mon Tue Wed Thu Fri Sat Sun
        1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
 
             

[00:58:54] <Solrac> Are there alternatives to the VPS for testng? I figured I could use the lxc or virtualbox for it, besides dev
[03:16:41] <Yunohost Git/Infra notifications> App yourls goes down from level 8 to 6 in job [#18264](https://ci-apps.yunohost.org/ci/job/18264)
[07:27:01] <lapineige> > <selfhoster1312> ça doit dire un truc comme:
> > 2023/09/02 22:10:17 [error] 23253#23253: *78938 open() "/var/www/my_webapp/www/forbidden.html" failed (13: Permission denied), client: 127.0.0.1, server: domain.tld, request: "GET /login/forbidden.html HTTP/2.0", host: "domain.tld"

`[error] 202844#202844: *52124 directory index of "/var/www/flask/static/" is forbidden`
[07:36:48] <lapineige> > <@Alekswag:matrix.org> https://github.com/YunoHost/apps/blob/app-store/store/nginx.conf.example#L5

Thanks a lot !

So by adding:
```
location /yunohost-app-generator/static {
alias /var/www/flask/static/;
}
```
The css file can be loaded if I access its url.
And it works in the html page… only if I put the URL and not `/static/stylesheet.css` 🤔
[07:36:53] <lapineige> problem solved for now, thanks a lot !
[07:40:15] <selfhoster1312> oh yes there was /static/ in the URL you told me i had forgotten :)
[07:40:17] <selfhoster1312> nice
[07:44:08] <selfhoster1312> Solrac, yes any kind of VM/container based on debian will do the trick :)
[07:48:27] <selfhoster1312> personally i use this script to setup the base yunohost: https://0x0.st/Hpvq.sh
where /usr/sbin/yunohost_install.sh is https://raw.githubusercontent.com/selfhoster1312/install_script/main/bullseye
[07:49:13] <selfhoster1312> ^ that's based on bullseye so far because yunohost does not support bookworm yet
[09:53:04] <tituspijean> > <@lsolrac:matrix.org> Are there alternatives to the VPS for testng? I figured I could use the lxc or virtualbox for it, besides dev

You can install the Yunorunner app, it installs LXD to manage CI VMs.
[09:53:34] <tituspijean> I personally run it on my VPS, but I don't see why it wouldn't work on other devices.
[10:12:17] <Yunohost Git/Infra notifications> [apps] @alexAubin pushed 1 commit to app-store: appstore: small refactoring, proper cache/refresh mechanism for catalog and wishlist ([56e6f43e](https://github.com/YunoHost/apps/commit/56e6f43e41ef8e8a1e9674a43f730bf5eb0e6832))
[13:58:45] <Aleks (he/him/il/lui)> lapineige: followup of the discussion on support room : https://dash.yunohost.org/appsobservatory/unlisted
[13:58:47] <Rosbeef Andino 🐧> is config_panel script call all fields setters one buy one, even if there is no change in a field?

my case is that i have 3 fields in the conf panel which modify the same configuration section. i need to create setters but to simplify me i want to apply the value of the three fields with only one of the three setter.
[13:59:33] <lapineige> > <@Alekswag:matrix.org> lapineige: followup of the discussion on support room : https://dash.yunohost.org/appsobservatory/unlisted

yes I was thinking about migrating it here, but didn't dare to do it. Thanks a lot
[13:59:53] <Aleks (he/him/il/lui)> > <@Alekswag:matrix.org> lapineige: followup of the discussion on support room : https://dash.yunohost.org/appsobservatory/unlisted

(and even then I think these days the code skips super-old repos)
[14:00:45] <lapineige> oh, I see that Stylo (https://github.com/YunoHost-Apps/stylo_ynh) is unlisted too 🤔
[14:01:12] <lapineige> > <@Alekswag:matrix.org> (and even then I think these days the code skips super-old repos)

(maybe that's not a big deal then, as they probably need a full rewrite)
[14:56:18] <anubister> https://codeberg.org/ynh-apps : are you considering to move to codeberg instead of Github in the future? 🙂
[15:17:46] <Aleks (he/him/il/lui)> before 2040 yes
[15:18:53] <Yunohost Git/Infra notifications> App pihole stays at level 3 in job [#18272](https://ci-apps.yunohost.org/ci/job/18272)
[15:22:04] <anubister> > before 2040 yes
😁️
[15:35:37] <lapineige> hopefully we will have federation until that point
[15:57:56] <lapineige> > I have good news : I've finished the final step that was required to generate the app files and download it (creating and downloading the actual zip file).
> I should be able to put a demo online during this week-end 🙂 (if I can master Yunost flask app ^^)

I'm done, it's ready 🙂
[16:12:36] <lapineige> https://aria.im/_matrix/media/v1/download/matrix.lapineige.fr/LLjYxjskRVxMretExFscrPqL
[16:42:37] <Solrac> > <@titus:pijean.ovh> You can install the Yunorunner app, it installs LXD to manage CI VMs.

Wait in a _an_ LXC? Or on Prod? 🤔
[16:45:20] <selfhoster1312> LXC uses user namespaces so you can do LXC in LXC, docker in LXC... Solrac :)
[16:46:34] <Solrac> as a newbie who hasnt done virtualization at the cli level, outside of qemu and has only used virt manager and virtualbox, this is a bit fascinating even tho it shouldnt be
[16:46:59] <selfhoster1312> well that's because LXC is not exactly virtualization, it's containers... it reuses the host kernel
[16:47:35] <Solrac> yeah
[16:51:34] <Thomas> I’ve some issues setting up mails for FitTrackee, does anyone has a clue about what I’m missing?
my branch: https://github.com/YunoHost-Apps/fittrackee_ynh/tree/email

the different logs: https://github.com/SamR1/FitTrackee/issues/412
[17:01:57] <lapineige> oh no, it's not ☹️
For some reason, a GET request to `domain.tdl/path` works, but a POST (submitting the form) don't ☹️ (*while in the code both GET and POST are handled in the same page)
Any idea? :(
[17:02:06] <lapineige> oh no, it's not ☹️
For some reason, a GET request to `domain.tdl/path` works, but a POST (submitting the form) don't ☹️ (*while in the code both GET and POST are handled in the same page*)
Any idea? :(
[17:02:26] <selfhoster1312> Thomas, do you see anything in the /var/log/mail* logs?
[17:02:53] <selfhoster1312> lapineige, o_o what "don't" work ? 500? 404? timeout?
[17:04:03] <lapineige> it redirects to Yunohost portal (the one with the apps)
[17:04:40] <selfhoster1312> sounds like the route is unknown to nginx/ssowat? see anything in ssowat.log?
otherwise post your nginx config :)
[17:04:49] <selfhoster1312> (and the *precise* URL you used, a slash can change everything)
[17:04:53] <lapineige> in the end, I'm going to say it requires a full domain and that's all I think 😅
[17:06:15] <lapineige> URL : `domain.tld/yunohost-app-generator/`.
Nothing in flask logs, except access where I see no POST request
[17:07:06] <selfhoster1312> i swear that's not the URL you used, please copy paste to avoid typos like yesterday where "static" went missing :P
[17:07:29] <lapineige> ssowat.log is empty
[17:08:10] <lapineige> > <selfhoster1312> i swear that's not the URL you used, please copy paste to avoid typos like yesterday where "static" went missing :P

copy pasted from the browser, except the domain that is a personal testing one that I prefer not do disclose
[17:08:36] <selfhoster1312> ok so you use both /yunohost-app-generator/ (with a trailing slash) a GET/POST ?
[17:08:38] <lapineige> So yes, there is a final /
[17:09:36] <selfhoster1312> what do you see in the browser "network" tab (f12 in firefox) ? what does the web server reply to your POST request (most likely 302)
[17:09:36] <lapineige> I don't know that.
I load the page (GET) with the /. Then I click on submit button. It is supposed to send a POST to that same page
[17:10:00] <selfhoster1312> ... and the browser tools would tell you which page it actually sent it to, and what it sent :)
[17:10:29] <selfhoster1312> https://firefox-source-docs.mozilla.org/devtools-user/network_monitor/
[17:10:38] <lapineige> in nginx conf, there is a final slash in both `/yunohost-app-generator/` and `/yunohost-app-generator/static` locations
[17:11:36] <selfhoster1312> it could be a typo in the action="" URL for example
[17:12:04] <selfhoster1312> like if you do action="yunohost-app-generator/" it will take you to /yunohost-app-generator/yunohost-app-generator/ (for example)
[17:12:35] <lapineige> > <selfhoster1312> what do you see in the browser "network" tab (f12 in firefox) ? what does the web server reply to your POST request (most likely 302)

nothing
[17:12:48] <selfhoster1312> once you open it you need to do your thing again :)
[17:13:01] <selfhoster1312> (it does not keep track of what happened before)
[17:13:21] <lapineige> > <selfhoster1312> ... and the browser tools would tell you which page it actually sent it to, and what it sent :)

oh yes, here it says POST to `/`
[17:13:44] <selfhoster1312> :)
[17:14:05] <lapineige> there is no such button, it's generated by flask
[17:14:19] <lapineige> there is no such action, it's a buttun generated by flask
[17:14:20] <selfhoster1312> what do you mean oO
[17:15:16] <lapineige> there is no such action, it's a button generated by flask
[17:15:16] <selfhoster1312> that's in the HTML action="whatever"
[17:15:16] <lapineige> That is the code to add the "submit" button : `{{ main_form.submit(class="btn btn-primary btn-sm") }}`
[17:15:20] <lapineige> Flask handles the html generation
[17:15:39] <lapineige> oh you mean I could inspect the webpage code 🤔
[17:15:50] <selfhoster1312> hmmmm i'm no expert but in HTML the action is defined on <form> not <input type="submit"> :) :)
[17:16:02] <selfhoster1312> so maybe the route is not well defined in your form settings???
[17:16:12] <selfhoster1312> or maybe flask is supposed to take care of that too idk, but yes you should read the actual HTML :)
[17:16:23] <lapineige> oooooooooooh you're right !
[17:16:33] <lapineige> here it is, action="/"
[17:16:38] <lapineige> thanks, problem solved !
[17:16:43] <selfhoster1312> hehe everything suddenly makes sense
[17:16:57] <selfhoster1312> but if i remember correctly, you can use an empty action to mean the URL itself
[17:17:05] <selfhoster1312> so that you don't have to change a setting depending on where the app is installed
[17:17:08] <selfhoster1312> (since you only have one route)
[17:18:13] <lapineige> great !
[17:18:31] <selfhoster1312> i'm actually *really not sure* about that anymore :)
[17:19:36] <lapineige> (holy ****, why did I listen to you Aleks (he/him/il/lui), I should never have messed with that html/js stuff 😂)
[17:20:13] <selfhoster1312> html is great, just don't do the JS part :D
[17:23:24] <lapineige> > <selfhoster1312> i'm actually *really not sure* about that anymore :)

Well, it works 🙂
[17:24:42] <Aleks (he/him/il/lui)> > (holy ****, why did I listen to you Aleks (he/him/il/lui), I should never have messed with that html/js stuff 😂)

Wut ? :D What did i say ? :D
[17:27:08] <lapineige> That the next time I follow your advice to make a webapp, well, I won't 😂
(I naively thought I wouldn't have to do real html/js stuff 😆 - I hate it as you saw)
[17:31:48] <lapineige> Ok then I have another issue: I made it so that if you click on "download the archive", it does an AJAX request to /download\_zip, and download the result.
But… it doesn't work.
Is that a path I should enable in NGINX ? How ?
NB: there is no actual /download_zip html page, it's all made on Flask side, returning a value
[17:32:38] <Thomas> > <selfhoster1312> Thomas, do you see anything in the /var/log/mail* logs?

With port 587:
```
postfix/submission/smtpd[1906817]: Anonymous TLS connection established from localhost[::1] to domain.nohost.me: TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (3072 bits) server-digest SHA256
sep 03 19:26:26 postfix/submission/smtpd[1906817]: warning: localhost[::1]: SASL PLAIN authentication failed:
```

Nothing with port 25
[17:33:51] <Thomas> It seems it’s an authentification issue? I’ve set the mail_pwd so I don’t know what I have to do
[17:54:38] <lapineige> > Ok then I have another issue: I made it so that if you click on "download the archive", it does an AJAX request to /download\_zip, and download the result.
> But… it doesn't work.
> Is that a path I should enable in NGINX ? How ?
> NB: there is no actual /download_zip html page, it's all made on Flask side, returning a value

For what I can see, the python function is never called, and the GET on /download_zip doesn't get any response apparently (0B, no HTML error code)
[17:57:19] <lapineige> I see online that I mean need to enable CORS (cross-origin) requests by changing the flask code.
But… it works on my local machine without it 🤔
[17:59:19] <lapineige> I see online that I mean need to enable CORS (cross-origin) requests by changing the flask code (as in https://flask-cors.readthedocs.io/en/latest/).
But… it works on my local machine without it 🤔
[18:05:05] <selfhoster1312> Thomas, maybe the mail server disables PLAIN authentication? you could try with another mail client to be sure :)
[18:05:25] <selfhoster1312> lapineige, /download_zip or /yunohost-app-generator/download_zip? :P
[18:05:39] <lapineige> `/yunohost-app-generator/download_zip` yes
[18:05:58] <lapineige> The whole thing is that without `/yunohost-app-generator/` path, everything works well
[18:07:11] <selfhoster1312> then it's probably your flask route that's misconfigured?
[18:07:34] <selfhoster1312> i mean does your flask app have an actual idea that it's in a subdirectory? (base URL)
[18:08:32] <lapineige> I don't know how to know that
[18:08:43] <lapineige> I've put `@app.route('/yunohost-app-generator/download_zip')`
[18:08:57] <lapineige> for that particular function
[18:09:46] <selfhoster1312> and you're sure the function doesn't get called? not that it crashes? :)
[18:09:52] <selfhoster1312> by the way:
https://stackoverflow.com/questions/18967441/add-a-prefix-to-all-flask-routes
[18:10:18] <selfhoster1312> (so this should use the __PATH__ or whatever it's called from yunohost config template for your app)
[18:11:51] <lapineige> > <selfhoster1312> and you're sure the function doesn't get called? not that it crashes? :)

I don't see any flask log, and in Firefox network tool, there is no error code next to the get method. And 0B transferred
[18:12:53] <lapineige> > <selfhoster1312> (so this should use the __PATH__ or whatever it's called from yunohost config template for your app)

you're talking about the URL prefix ?
[18:15:50] <lapineige> thanks a lot, I would never I've found that myself… so much complexity for so little archivement 😅
[18:33:13] <selfhoster1312> yes that's what i meant, well sry i don't know about flask and since you don't publish full logs/configs and actual URLs it's a bit hard to figure out the mystery :D :D :D
[18:33:50] <selfhoster1312> but next time you are around Paris feel free to drop by and i'll be happy to help more in person ;)
[18:40:37] <lapineige> I hope it'll be done sooner than that 😂 😅
[18:42:08] <lapineige> I mean I can't simply change all urls to use '/yunohost-app-generator/mywebpage' instead of '/mywebpage' ?
[18:45:09] <lapineige> actually I can't figure out how to use this. The simple solutions don't work, other requires a lot of extra code simply to add a prefix in all URLs, as in ↓. I don't see the point
[18:48:07] <lapineige> Aleks (he/him/il/lui): can you remind me what you meant about the wsgi:app bureaucracy or something like that ? I wonder if that's the issue
[18:48:44] <lapineige> (oh never mind I found it, doesn't seem to matter)
[18:53:56] <lapineige> Well you know what I'm giving up, I simply use a whole domain for it and that's it, so I can publish it quickly. Someone else will fix this one day if needed…
[19:01:19] <lapineige> Hum wait… I wonder if the site root thing, from the settings_local.py file, might be my thing : https://github.com/lapineige/flask_ynh/blob/rewrite/conf/settings.py
Is it supposed to be in /var/www/flask/app, but I've put it in /var/www/flask. Could that be the issue ?
[19:12:19] <Aleks (he/him/il/lui)> and yes the SITE_ROOT setting + corresponding place where it's used in the python code is supposed to be about having your app in a site root that is not `/`
[19:12:27] <lapineige> > are you using the url_for(...) helper consistently everywhere

No, it doesn't work with the subpath (I mean domain.tld/sub-path)
[19:12:31] <Aleks (he/him/il/lui)> it's hard to say anything without having the exact code that doesnt work under the eyes ... naively I would ask ... are you using the `url_for(...)` helper consistently everywhere
[19:13:01] <Aleks (he/him/il/lui)> 😬
[19:13:16] <Aleks (he/him/il/lui)> then it's either outrageous, or you're not using the site root or url_for thingy properly 😅
[19:13:37] <lapineige> I never said I was skilled with these stuff 😅
[19:13:54] <lapineige> > <@Alekswag:matrix.org> then it's either outrageous, or you're not using the site root or url_for thingy properly 😅

I don't know anything about the site root ^^
[19:14:36] <lapineige> the url_for thing works well to give me /static/stylesheet.css for instance. But it seems unaware I need `/sub-path/static/stylesheet.css` instead
[19:14:56] <Aleks (he/him/il/lui)> hmokay
[19:15:02] <Aleks (he/him/il/lui)> will try to reproduce the issue manually ...
[19:16:49] <lapineige> basically I installed the flask template app in domain.tld/sub-path, and then moved everything from /var/www/flask/app folder to /var/www/flask (in an attempt to simplify thing on first try, because I didn't know how to setup such a server…). Also I removed manage.py and wgsi.py, and replaced it by my only python script (and changed systemd service accordingly)
[19:20:55] <Aleks (he/him/il/lui)> sounds good yes
[19:21:13] <lapineige> tried to keep it simple…
[19:21:28] <lapineige> but then I'm unsure it actually uses settings.py
[19:24:15] <Aleks (he/him/il/lui)> not sure how any of this does relates to the SITE_ROOT thingy ... i just tried it and `url_for` does returns URL which are consistent with the site root i defined in the blueprint
[19:25:36] <Aleks (he/him/il/lui)> i.e. if I have a route `/bar` and defined the site root to be `/foo/`, `url_for()` does return `/foo/bar`
[19:29:20] <lapineige> oh yes, I'm not using a blueprint, but a simple "app"
[19:29:42] <lapineige> I didn't find how to manage the CSRF token with a blueprint, so I've given up using them
[19:30:49] <lapineige> > not sure how any of this does relates to the SITE_ROOT thingy

I wonder what's its purpose anyway, I see nowhere in the configuration of gunicorn where it could be used
[19:32:19] <Aleks (he/him/il/lui)> hmyup, blueprint are weird, but my understanding is that it's the canonical way of exposing routes to a different site root ... but maybe flask evolve since then, i didnt really check
[19:32:20] <Aleks (he/him/il/lui)> SITE_ROOT is used here : https://github.com/lapineige/flask_ynh/blob/rewrite/sources/app/app.py#L6
[19:32:40] <lapineige> oh yeah, I didn't catch that one
[19:32:55] <lapineige> so I don't care about the setting as long as I define mine in the code, great
[19:33:26] <lapineige> > <@Alekswag:matrix.org> hmyup, blueprint are weird, but my understanding is that it's the canonical way of exposing routes to a different site root ... but maybe flask evolve since then, i didnt really check

I understood it as app being the simple, basic stuff, and blueprint the more complex and versatile one
[19:34:15] <Aleks (he/him/il/lui)> but clearly the blueprint mechanism seem super bureaucratic just to achieve this
[19:34:17] <lapineige> but well… every tutorial tells me to do `app.config['SECRET_KEY'] = 'your_secret_key'`, and no tutorial explains how to do that with blueprints… and then my forms no longer work
[19:34:46] <lapineige> > <@Alekswag:matrix.org> but clearly the blueprint mechanism seem super bureaucratic just to achieve this

that was also my reason to avoid it. Like I couldn't define the prefix in the app function… why…
[19:35:27] <lapineige> > but well… every tutorial tells me to do `app.config['SECRET_KEY'] = 'your_secret_key'`, and no tutorial explains how to do that with blueprints… and then my forms no longer work

So I've given up because I couldn't find the way, and that feature being documented nowhere led me to think it was a bad idea…
[19:35:52] <lapineige> (I don't understand why something so fundamental, because no form will work without it, has no documentation…)
[19:37:44] <lapineige> Sooo… I've great news : I changed my website to use the root of the domain. Form is working… but the AJAX request on the download endpoint /download_zip is still failing 😭
[19:38:28] <lapineige> This is exhausting… 😕
[19:39:17] <Aleks (he/him/il/lui)> yup, software development is work 😅
[19:39:30] <Aleks (he/him/il/lui)> self-taught software development* 😅
[19:41:14] <lapineige> I'm not sure I'll continue this project, I spent too much time and mental health trying to figure out computer non-sense (with no damned tutorial to explain it) instead of actual work. I don't see the point.
*(by the way, thanks for the great help here, I wouldn't have done it without it 💜)*
[19:41:33] <lapineige> where would it be best to drop the code ?
[19:42:40] <Aleks (he/him/il/lui)> not sure, naively I'd say a PR in the `apps` repo maybe, inside the `tools` folder ?
[19:42:54] <lapineige> > <@Alekswag:matrix.org> self-taught software development* 😅

I've seen easier stuff to learn ^^ (and I mean software development stuff)
[19:44:20] <lapineige> (well, this finally convinced me never to do any web developement…)
[19:44:48] <lapineige> (I knew it ^^)
[19:45:17] <lapineige> next time I'll make a locally-running software, not one more insane web app 😂
[19:47:42] <Aleks (he/him/il/lui)> tbf if this is your first real "dynamic" web project, you're essentially learning HTML forms + backend framework + bits related to actual app deployment like gunicorn/systemd/nginx etc, it's essentially like learning 2 programming language at once
[19:48:01] <Aleks (he/him/il/lui)> or like learning networking, email and sysadmin all at onc
[19:48:57] <Aleks (he/him/il/lui)> i went multiple time crazy trying to understand what the fuck is going on with postfix's conf parameters and their FAQ assuming you have 3 PhD in computer science
[19:50:47] <Aleks (he/him/il/lui)> though i'd definitely choose debugging postfix over having anything to do with the french administration
[19:52:11] <lapineige> > <@Alekswag:matrix.org> tbf if this is your first real "dynamic" web project, you're essentially learning HTML forms + backend framework + bits related to actual app deployment like gunicorn/systemd/nginx etc, it's essentially like learning 2 programming language at once

not to mention nginx and maybe a bit of web security settings stuff 😕
[19:52:24] <lapineige> > <@Alekswag:matrix.org> or like learning networking, email and sysadmin all at onc

you mean 2 of the most insane thing on earth ? 😄
[19:53:05] <lapineige> > <@Alekswag:matrix.org> though i'd definitely choose debugging postfix over having anything to do with the french administration

at least french administration is more manageable than any network thing 😂
[19:56:27] <lapineige> > <@Alekswag:matrix.org> i went multiple time crazy trying to understand what the fuck is going on with postfix's conf parameters and their FAQ assuming you have 3 PhD in computer science

Well this feel like I need a PhD in necromancy (for the undocumented, unexplained stuff) and black magic just to write a damned basic form…
[19:57:19] <Aleks (he/him/il/lui)> hmmm i'm thinking your form may not really qualify as "basic" 😅
[19:58:47] <lapineige> What's so special with a few fields, and a button that show something or download some content when you click on it 😅
[19:59:57] <lapineige> I'm not making a complex web app, it's basically a few fields where the input is injected in a template and the template sent back to be shown/downloaded… doesn't seem very advanced ^^
[20:00:07] <Aleks (he/him/il/lui)> typically anything to do with "uploading files" or "downloading files" is hell
[20:01:15] <lapineige> (and it works on my computer… it's infuriating that there's not way to deploy it anywhere else…)
[20:01:47] <lapineige> Aleks (he/him/il/lui): you forgot the "development" emoji
[20:01:51] <lapineige> yeah, that's what I was saying, web development…
[20:31:28] <lapineige> So… as I'm a little stubborn, I took one last look…
In nginx access log, I see this:

> 03/Sep/2023:22:28:59 +0200\] "-" 000 0 "-" "-"

When I click on the button that should trigger the AJAX request to `/download_as_zip`.
If I try to go to /download\_as\_zip?someparameter=value, to see if it's working… I have this `"GET /download_as_zip?app=2 HTTP/2.0" 404 207 "-" "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:109.0) Gecko/20100101 Firefox/117.0"` (and a 404 not found btw)
[20:54:34] <selfhoster1312> so lapineige probably your javascrpit is broken?
[21:11:21] <lapineige> I console.log the request used, seems good
[21:12:32] <lapineige> I even check if xhr.status === 200, and it the case
[21:15:23] <lapineige> Uh, I tried to console.log the xhr.send(), because who knows…
`Uncaught DOMException: XMLHttpRequest.send: XMLHttpRequest must not be sending.`
[21:32:51] <Yunohost Git/Infra notifications> [nextcloud_ynh] @TheTrveAnthony opened [issue #601](https://github.com/YunoHost-Apps/nextcloud_ynh/issues/601): Cannot update due to back up fail
[21:59:45] <lapineige> You know what's funny ?
The XHR code works perfectly well on my computer. Not on the webserver. If I try to reduce the XHR to the most simple form (only one argument, not the whole list), it works… a bit. I have the warning showned, while still getting a 404 in the end.
[22:00:08] <lapineige> Schrödinger black magic