#hangar-dev
1 messages · Page 15 of 1
smh
urg I suck
yea, wel, u luv me
So much spam...
ssssh
Dear MiniDigger,
I would like to enquire as to when Hangar is expected to be released, if you could get back to me that would be much appreciated
Yours Sincerely Peaches
p.s. Hangar Wen?
.bh
is getting out the ban hammer! ▬▬▬▬▬▬▬▋ Ò╭╮Ó
Wanna borrow it mini?
.mini
Send him beer or money to buy beer and he probably speed up.
By that defenition you should be carefully to not send too much beer
He's german
They have a built in self regulating mechanism
except on that one week which they just spend drunk
Well, how else can you update paper then?
Multiple shifts. The European shift is around 33-50% beer driven.
opening ore in IDE now, lets pray IJ knows it
I can create posts and stuff already
kek am literally blind
lmao
oh you meant the templates line not the entire method?
shh I also can't read
def projectTitle(project: Project): String = project.name + project.description.fold("")(d => s" - $d")
not that this is paricular readable
project.name + " - " + project.description?
machine readable
quick, call machine maker
ie if the description is empty, don't add the -
yeah
hello, what is hangar?
It is the ultimate Paper fork
Read the channel description?
jk, it is a fork of Ore, which seeks to be another site to obtain plugins from
the channel topic* but ye
project.description.fold("")(d => s" - $d")
is equivalent to
StringBuilder result = new StringBuilder("");
for (d : project.description) {
result.append(" - " + d);
}
result.toString();
'fold' is a variation on 'reduce' (as you know from the java Stream api)
fold takes two arguments, a 'zero' value and a function that given an accumulator value and a value from the source list creates the new accumulator value. In the end the accumulator is returned.
though I don't know the exact type of 'project.description'. It might be a different overload of fold.
anyway - the author couldve just used
project.description.mkString(" - ")
'mkString' works much like 'String.join' from Java, but for scala collections instead of arrays.
Oh it's actually a loop, interesting
I didn't try to google, I just guessed
Description is just a string
then it's definitely a weird overload, probably some extension method that is imported from somewhere.
i think this is the correct meaning too then.
are you sure description is not an Option[String]?
cause then it would work, I got this from the Scala repl: scala scala> Option("Hello,World!").fold("")(d => s" - $d") val res0: String = " - Hello,World!"
(and when the description is None then fold returns in the empty string, because that was the supplied 'zero' value)
started setting up a hangarauth frontend in nuxt, cause I can't seem to get anything else done
g2g for now but pushed the progress
got the first few pages done layout wise, missing settings page and the email flow I think
no backend yet
maybe I can do that later today
Oh yeah, also found out why it for so quiet dependency related, I disabled renovate and dependabot looked in the wrong place
That makes sense
filesize has a lot of updates for what I thought was a relatively simple thing
the latter one I think
they fixed it in 4.0.3 by removing the dep
so nuxt needs to update
nuxt already pulled it in
Maybe for their vue3 branch?
Btw, we gonna update or nah... before, it was fine cause there wasn’t a ton of vue. But now there is
nuxt 3 is done?
yeah why wouldn't we?
its in dev branch
no progress ont he swagger one tho, lmao
just dismissed it
I haven't been checking on Hanger lately, how much progress has been done? Is there a roadmap of sorts? Just curious :)
roadmap = list of todos in code
😆
Roadmap is open issues on GitHub
felt this one, there's a lot of them in my own code iirc 🤣
you can buy individual lines of code
@pallid yoke is there any reason as to why hangarauth is not fully rebranded yet? 👀
it's being re-written to a v2 rn
so that'll be the rebranded one
right now, its almost an exact copy of spongeauth
It's a fork, that doesn't sound so bad
ah okay, so i shouldn't bother doing stuff there
you can contribute to the v2 branch
it exists on that repo
should be its own repo in the future, but for now
there should probably be a project for stuff that hasn't been transferred yet
to v2? its like almost everything at this point
fair enough
mini just did a few frontend pages but thats it
needs the whole spring project setup and whatnot
joy
I plan to look at stuff again this weekend
But i have been feeling horrible lately, need to find a way back
mmh, how do we handle csrf in hangar? struggling to think of a way to get it to work for auth
oh kek its just disabled
mfw I forget a @Controller annotation
Makes a pretty big difference I suppose 😛
Yeah, we don’t handle it currently. It can be implemented I think.
But somehow, nuxt has to get that token. Every request to the api will change the token right?
what is hangar?
checked the topic?
Our way better version of spigot resources
I think for auth I can just use cookie based csrf, since auth will have static html pages
but that can wait
Auth will? I thought you were doing nuxt there as well
Oooo ok nice
what is the difference?
Well, they are way different. But when paper hard forks, spigot won’t allow plugins on their site if they aren’t compatible with spigot.
So paper needs it’s own place for authors to upload plugins
when will it hard fork? and what is the reason for hard fork?
When, is not answerable. What, is because it makes updating way easier, can possibly do snapshots, can make breaking changes that md_5 is unwilling to make.
Most servers now use paper over spigot
And paper’s market share is always growing.
Recommend a read: https://matthewmiller.dev/blog/paper-hard-fork/
@pallid yoke where is the site that has the stats on that
Oo didn’t know there was a blog.
@stiff token https://madelinemiller.dev/blog/paper-hard-fork 😛
its preferred to use the new domain even tho it redirects
I used first thing from Google, sorry that I used one from the old domain.
I know, didn't remember the new one. Should get a command for it?
https://kennytv.eu/secretgraph/ is better than mine https://minidigger.github.io/paperstats/#1.16.5
So for auth, we’re gonna nuxt generate, and have those html files served by spring controllers?
How’s that gonna work with developing?
Good question
I got stuff somewhere around that
I didn't get spring to properly serve my views so I rage quit yesterday
It sounds like we need to kinda have two sets of controllers, one for actually serving the html, the other is the api for actually doing stuff
Can have nuxt generate into the resources folder I suppose
he let it expire
yeah i wouldve thought it wouldve been reeleased by now
I thought he was gonna get it back
not be put up for auction lmao
someone eles probably bought it before he could
rip
it's being held by the registrar looking at it
Does someone own paperspigot.io
Should put up a whole PaperSpigot site on it
yeah two bids for $99
who wouldve thought you being an asshole for scalping also applies to domain names...
probably just scrape the internet looking for domains linked to a lot and scoop them up when they expire
nothing new here
Surprised that’s available
it's not, some service is hogging it
I feel like you could’ve made sooo much money if you got in early on domain names
Pretty much, yea
you still can when new .tlds drop
registrars try to cash in on it a bit now too
When Google allows registration for .meme that shit gonna be a cash fountain for scalpers
But, generally they don't wanna deal with bidding on individual names too much, so, generally scalpers cash in there too
I’m just waiting for google to forget to renew their google.com
That’s my plan for success in this world
I think somebody purchased another google domain in the past little while
I read a headline a while ago saying for a while you could register google owned domains on google domains for a while
i wonder how much discord paid for discord.com
https://www.theguardian.com/technology/2021/apr/27/argentinian-buys-googles-domain-name-for-2-pounds
Designer living in Buenos Aires says he snapped up google.com.ar after noticing it available in registry
nice
Even so, Kuroña hasn’t been able to keep the domain name he briefly held. It was transferred back to Google’s control shortly after he registered it – with no refund of the 270 peso fee.
wtf
who is nic
NIC is basically a bunch of companies or whatever
I thought ICANN was the head honcho of domain stuff
A registry operator, sometimes called a network information center (NIC)
Yea, they are
ARIN deals with IPs and ICANN deal with the root, i think
Down to the individual registrars
it'd be hard to define "actual content"
good luck turning "no domain squatting" into legalese that people can't abuse
yeah exactly
that would probably kill 95+% of sites on the internet
something that isn't a parking page really
is https://sulu.me a parking page?
cause nothing on the homepage, but stuff elsewhere. Do I get to keep my domain?
nothin there so yeah
No, it's just filled with all your knowledge
smh
well if there's active subdomains then yeah
so then how does the registrarr know that?
But, now you're in the territory of registrars acting as port scanners
you mean icann, who'd be handling this
it's not a solvable problem in the current way things works
per my wish
Google Domains doesn't support the .MEME ending
doesnt support their own tld
ironic?
I’m pretty sure google buys any domains you search too
And then tries to sell it to you for higher than it was lol
now that…. Might be market manipulation that’s illegal. Probably in the EU, maybe the US
Heard of other registrars supposedly doing that, but not heard any reports that Google does it
Tell me them, I would like them to buy a.doctor
https://hangar.benndorf.dev/ staging instance
It's not done yet
is that, like, outdated?
coz, that looks...
I don't remember the layout being that bad
#ItShows ❤️
It's literally just the default style shoved together so we can test the new backend
who is benndorf
Am Martin Benndorf, lol
nice to meet you
it shows, there's literally a PWA install button in the browser
that most likely does nothing of value, lmao
Where? I’ve never seen it.
Heh, I didnt bid on the domain and now its just parked cause nobody bid on it 😄
this is really fun to see
what happened to your domain?
gone, reduced to ashes
definitely
What are you referring to?
The domain name minidigger.me is being parked on Park.io. Contact the domain owner to make an offer right now...
dont need to click it, just see the embed lol
makes offer
how did it get away from you mini?
in b4 mini missed his invitation to become CEO of Minecraft
s m h
sadly happened to me too, had to wait from 2017->2020 until they stopped parking it
scummy business practice
That same thing happend to my old Minecraft server domain back in 2013
buy 9 years at once, ez pz
Just buy 1000 years, never pay again
for the low price of $20k
that is a pretty low price considering inflation is a thing
🥵
theoretically we have everything needed for discourse now
but, I need to figure out this job processor stuff
Is hangar aiming to be web only? Or will there be integrations into the server? Eg package manager of sorts and/or automatic updates on restart if configured to do so
I doubt there are plans to do anything bar having the web interface and api.
But I wouldn't be surprised if someone made a plugin for it.
That would be pretty cool. Looking at the to-do/completed lists, Hangar as web only will be a massive improvement on the alternatives that's for sure
Does that mean hangar will host and allow/support direct downloads via the API/other means ? I know spigots resources have some anti autodl restrictions
Yes. Spigot does have CF in front of that api endpoint unfortunately. As far as I'm aware, hangar will have a nice api accessible from scripts.
can't wait for hangar to have to deal with ddos attacks 👀
also spigot doesn't even expose downloads via the api? so the correct statement would be: "spigot doesn't have a download api"
It does have downloads api. I can get you a direct url to the file. And I used to be able to download from spigot with their api until CF started working more on anti-bot detection.
It's not public/documented, but it's still an api which is used by the website.
That's like the same with many Twitter libraries - can't do everything through public api so you need to reverse engineer it. But it's still an api.
internal api isn't really api in this sense tho
but we getting sidetracked
yes, paper will not have deep hangar integration as of current plans (altho there are ideas to add a hangar.yml to jars, so that uploading is easier)
and yes, hangar will provide you with all apis necessary to implement your own plugin manager
in fact, most of that is there already, at least the schema
ignore the authentication stuff for now, I think those docs are outdated
no clue why most of staging is bork rn
Caused by: java.lang.IllegalArgumentException: Instance factory 'public io.papermc.hangar.model.api.project.Project(java.time.OffsetDateTime,java.lang.String,io.papermc.hangar.model.api.project.ProjectNamespace,io.papermc.hangar.model.api.project.ProjectStats,io.papermc.hangar.model.common.projects.Category,java.lang.String,java.time.OffsetDateTime,io.papermc.hangar.model.common.projects.Visibility,io.papermc.hangar.model.api.project.UserActions,io.papermc.hangar.model.api.project.ProjectSettings,java.lang.Long,java.lang.Long,java.util.List)' parameter '[topicId, postId]' has no matching columns in the result set. Verify that the Java compiler is configured to emit parameter names, that your result set has the columns expected, annotate the parameter names explicitly with @ColumnName, or annotate nullable parameters as @Nullable
heh I broke it I guess
@stiff token that's not official API. that's the endpoint used for the website to allow the browser to download resources
abusing website endpoints in automated programs is frowned upon (and even forbidden in the TOS)
Having filters at every section should be enough to make anyone switch. Trying to sift through plugin search results as a new-ish admin, to find the most suitable plugin, based on player requests is a pain in the rear right now. Can't wait for various filters/sorts in hangar.
yeah discovery is important
for both devs and users
we hope to get a bunch of feedback on that once more ppl play with it
auto-suggesting keywords based on the description would be pretty rad 👀
Yeah I'll be happy to provide feedback when it's released. Another sorely missed filter is the 'supported MC version' in your search results as my players want to always run the latest content. Adding to that 'verfied working in version X by server admins' or something similar would be useful for those older plugins only supported to 1.12 but work fine on 1.16
a review system where users provide the used server version would be interesting 👀
Phoenix616 will replace us all.
reviews are out of scope rn
but I could see a voting style "hey I tested on this version and it seems fine, or its bork" style up and down voting to reach a "community consensus" on that being cool
Yeah that's what I was getting at, or perhaps attaching that vote to their review as well as/instead of
As long as I can tick a box that says give me 1.16 supported search results/browse category - but also give me 1.16 unsupported but verified as working by admins/votes that would be awesome
If proper reviewing were to be implemented, perhaps it should be something similar to how steam handles it.
Yeah, ultimately that's what we kinda need to do, which is why it's out of scope for now
aayy it works
also started to do a bit of the job processing but need to look more into that
It's Monday my dudes
Property: hangar.jobs.check-interval
Value: P1M
Origin: class path resource [application.yml] - 159:21
Reason: failed to convert java.lang.String to @org.springframework.boot.convert.DurationUnit java.time.Duration
??
oh its PT1M
but P1D
or P1DT1M
ok guys
its "guess what this scala code does" time!
val fibers = ZIO.foreachPar_(0 until math.max(1, math.min(awaitingJobs, maxConnections - 3))) { _ =>
JobsProcessor.fiber.sandbox
}
awaiting jobs is fetched from the db, number of not started jobs
max connections a param, by default 32
oh wait am stupid
I think I read that first max as min
its early
"we now return to your normal scheduled program"
I think this channel developed into my own private rubber duck
Not so private if thousands of people can see it.
how much error handling do you want?
yes
me likey
I mean, no clue why it didn't find the project, but at least error handling worked 😄
urg
visibility
this is where I give up and do a lunch break
but job processing itself is done I think
just wanted to say hello so martin doesn't have to feel lonely in this channel :)
also that's a lot of catch statements
This may be annoying to ask but do you have a goal date set for Hangar? Just a date you hope Hangar would be ready for a beta?
Ah. So your going with the "it's ready when I'm happy with it" approach?
I looked earlier, last few big things are forum stuff (which I worked on today and am mostly done with), api keys for public api, and download api (internal and public)
And then there are a bunch of new features on the issue tracker we need to look at I guess
But i would say it's pretty close to a beta, if you ignore design stuff
👍
I plan on doing a like a proper roadmap after this weekend or smth, to better organize the last few things, prioritize etc
Then it might be easier to help out
Cause there are some really simple tasks ppl could pick up, like adding meta tags or twitter/discord etc
No point in doing meta tags for pages that require a login
So it’s just users, projects, versions
Well yes, it would fetch the error page I guess?
Or do some re-direct to login?
We don’t want an error embed to show up.
Nothing is probably fine
But yeah, homepage, users, projects, versions is fine
And for the others some default maybe, idk
hangar staging is bork because ???
Caused by: java.lang.IllegalStateException: Failed to introspect Class [io.papermc.hangar.service.internal.discourse.DiscourseApi] from ClassLoader [org.springframework.boot.loader.LaunchedURLClassLoader@7cd84586]
at org.springframework.util.ReflectionUtils.getDeclaredMethods(ReflectionUtils.java:481) ~[spring-core-5.3.6.jar!/:5.3.6]
at org.springframework.util.ReflectionUtils.doWithLocalMethods(ReflectionUtils.java:321) ~[spring-core-5.3.6.jar!/:5.3.6]
at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.determineCandidateConstructors(AutowiredAnnotationBeanPostProcessor.java:267) ~[spring-beans-5.3.6.jar!/:5.3.6]
... 41 common frames omitted
Caused by: java.lang.NoClassDefFoundError: org/springframework/boot/configurationprocessor/json/JSONException
at java.base/java.lang.Class.getDeclaredMethods0(Native Method) ~[na:na]
at java.base/java.lang.Class.privateGetDeclaredMethods(Class.java:3334) ~[na:na]
at java.base/java.lang.Class.getDeclaredMethods(Class.java:2446) ~[na:na]
at org.springframework.util.ReflectionUtils.getDeclaredMethods(ReflectionUtils.java:463) ~[spring-core-5.3.6.jar!/:5.3.6]
... 43 common frames omitted
Caused by: java.lang.ClassNotFoundException: org.springframework.boot.configurationprocessor.json.JSONException
at java.base/java.net.URLClassLoader.findClass(URLClassLoader.java:433) ~[na:na]
at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:586) ~[na:na]
at org.springframework.boot.loader.LaunchedURLClassLoader.loadClass(LaunchedURLClassLoader.java:151) ~[app.jar:0.0.1-SNAPSHOT]
at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:519) ~[na:na]
... 47 common frames omitted
????
works locally
mabye its a class I wasn't supposed to use?
it seems like thats shaded json simple
ill try to use our own json simple
"// Note: this class was written without inspecting the non-free org.json source code."
mmmh
seems like their own thing
"This is to be expected I am afraid. The configuration processor is an annotation processor and is only meant to be used by the build (to generate configuration metadata). It's not a module for which you should have a dependency on whatsoever"
kekw
spring doesnt use org.json cause of the licence https://github.com/stleary/JSON-java/blob/master/LICENSE
"The Software shall be used for Good, not Evil." is non free apparently
I think we don't violate that licence so ill just use that 😄
well, it does violate the motto of "you have the freedom to do whatever you want" by disallowing you to do evil
yeah I get that
its not enforceable anyways
yes, external downloads are supported, but I think we want to restrict that per rules to direct download links, else the user experience is shit
I can't debug this dum discourse error
urg
Encountered error when executing Discourse request
Job: 5 UPDATE_DISCOURSE_PROJECT_TOPIC {projectId=5}
Type: unknown
Message: Unknown discourse error, 403 Forbidden: [{"errors":["You are not permitted to view the requested resource."],"error_type":"invalid_access"}]
its an api token with full perms...
if I change the username to admin it works, strange https://i.imgur.com/AFLlZFM.png
but I want a token that can post as a user
which my token should do?!
yes
tho thats one of the last things we need to implement, as its kinda complicated
as hangar collects way more meta data, in order to properly link dependencies for example
but yes, we want to provide a complete friction less experience, I want to be able to create a hangar release via a github action when I push a tag to my github repo
"Message: Unknown discourse error, 422 Unprocessable Entity: [{"action":"create_post","errors":["Title has already been used"]}]" of fuck of discourse
kek even deleting the topic doesn't help, lmao
"422 Unprocessable Entity: [{"action":"create_post","errors":["Body is too similar to what you recently posted"]}]"
and its picky 😄
Message: Unknown discourse error, 429 Too Many Requests: [{"errors":["You’ve reached the maximum number of topics a new user can create on their first day. Please wait 23 hours before trying again."],"error_type":"rate_limit","extras":{"wait_seconds":83963}}]
😄
at least I can test my rate limiting that way 😄
discourse really wants to prevent you from using it huh
I mean, its pretty good at spam prevention
its just sad that that also applies to an admin key, lmao
eZ
automatically retries tomorrow, cause the response told me how long to wait
ok lmao thats actually my fault https://i.imgur.com/3944cx3.png
I think am done for now https://i.imgur.com/rKvyxPg.png
ugh, totally forget what my username and password was for the discourse instance I have setup
minimum 15 characters?
lol
@pallid yoke , anything I need to know to setup discourse to get it to work with hangar
No, didn't do anything special other than defining an all user api key
And relaxing some settings re title similarities or smth
should we be using docker for discourse? to help with development?
Yeah I do that
wait, am I just not seeing it? like I meant should we add a service for discourse so it requires no additional setup
I just git cloned some repo or smth and run that, but didn't commit that folder
But if you can set it up in compose easily, go ahead
I remember it being painful
yeah, I suck at docker stuff so idk
Discourse has an official docker image
Yeah I know they are different @random badger, just wanted to connect them cause they can be implemented together. Mobile so searching for it would have been painful, thanks for connecting them ^^
👍
k, no clue how to get this discourse stuff working. What did you clone? this? https://github.com/discourse/discourse.git
cant figure out how to change the port cause it defaults to 3000 and that's the frontend
And then I had to create a definition file in some folder or smth
I think there was a standlone template that included a DB or smth
But that thing is hella confusing
And vastly overkill
k, just gonna turn it off and ignore it 😅
oh, well looks like the discourse isEnabled config doesnt do anything
not sure you need the EnableScheduleing and EnableAutoConfiguration annotations on JobService since its all part of the same context right?
Didn't I move them?
Oh fuck I didn't commit that
I did a huge cleanup and deleted a bunch of shit, moved that stuff from job service to a job task next to the db update task do we have all scheduling in one place
Then wanted to look at api keys so I can delete that code too but got called in to work cause shit hit the fan
I can't sleep anyways, gimme a minute I'll push really quick
I think it was compile and run clean
I was gonna look at api keys tomorrow, but if you want to look thats fine too
I think that plus upload/download api are some of the last big ticket items
then we can look into cleanup, your task with the transactional, the caching, the permissions, etc
yeah... been really putting off doing uploads/downloads
give everything a lookover, add the last small things for mvp, and then look into getting a proper beta setup
there a reason the services in JobService need @ Lazy ? I dont see circular deps
^
I don't think thats worth it to resolve
yeah, thats big
when you've got time, if you could write up steps to setup discourse for local dev for the README, that'd probably be good too
well, am here now, lets see
I think I just created a paper.yml in containers
https://paste.gg/p/anonymous/06d8f282f72f4159a25c1b2bbb7d1b22 this being the content
mailserver doesn't matter, admins can activate users manually
ayyy, staging is fixed
for some reason I commented this out in launcher https://i.imgur.com/l679swc.png
then its just ./launcher start apepr or smth I think
but honestly, fuck all that, I can look into adding it to our dev compose, you use that, right?
yeah
well you say ignore the mail server, but you have to confirm the first account so
ok, yeah, tried to get it to use mailhog with no luck
man, I almost want to just never use model IDs in internal api routes
I think it would make this illegal name thing easier
or... what if we never put specific info in the url path at all?
so like project id, or author name, or version id, or whatever could never conflict with anything because it was a query paramter or a body parameter, or in the headers or whatever
I looked around for a second to see if there was a testing tool to find all possible route conflicts but didn’t see anything. I’m not sure that I believe that, we certainly aren’t the first people to need something like that
I did keep it, cause I kinda wanted to communicate to the author the status of the thread creation or smth, but couldn't think of anything nice
And for the routes, Vue router should list all frontend routes in the dev tools, no?
IJ can create a list of backend routes too, but those aren't as bad cause they only get proxied, right?
Yeah, that does first list of usernames should be all frontend conflicts
IJs list of routes is really ugly tho
Can have it display empty, if the user can edit project settings to add a linked topic
I forgot how much nicer compared to ore the public api (impl/auth) is now
JWTs are magic
Oh shoot, no that looks nice
I’m running hangar via docker tho, so I don’t get that
I have the spring tab with the mvc sub tab that shows routes
But that looks nice
@pallid yoke can't really do this it looks like https://github.com/PaperMC/Hangar/commit/3e1d040c3e668d9ce80e2a9739137bda9e0c3ad4#diff-1c5cf0f337b15440fadef89bbad1fcd4ab9f51598567386bbe97708a6c935020
it tries to parse the string "10m" into a long
need to do the bean way and convert to Millis on the Duration object
The official iso Duration format.
Is stupid
wait, it displays a warning? where
It is perfectly fine.
P1MT3H5M3S
For reference: https://www.digi.com/resources/documentation/digidocs/90001437-13/reference/r_iso_8601_duration_format.htm
I dont see any warning in IJ
It’d rather not have to put PT10M in the config or whatever, 10m looks way nicer
I totally agree
Not sure why spring uses two different duration parsers for the same config
Yeah, my thought was have a download page, it requests download info, if not confirmed, shows a confirmation, if confirmed, redirects to download or smth
No need to have a /download, /jar, and /confirm page
Yeah no page at all, was thinking popup for confirm?
Yeah, that works.
I don’t see any reason where the user should want to download a portion of what was uploaded. Should just the the whole thing every time
Idrk what the point of the /jar endpoint was on ore
this the prob the feature that took the longest to implement
Yeah, because without beer mini isn't as efficient as with beer.
well i meant that making this show up sometimes took long but that's also right
I'm not saying that mini is a german machine fueled by alcoholism, but, last time we took his beer away he did start misfiring
i mean, whatever get's the job done, right?
It literally was one of the first things I did, back when I forked ore, lmao
Or even before when just configuring ore actually
It was a priority to implement
Also, I love the irony that almost everything is hangar is done and ready to use, but downloading isn't
Which is clearly not an important feature whatsoever
just make people upload it on dropbox
Can upload Plugins to hangar, but cannot download them. 😂
i mean dropbox does have the dl=1 you can append to an url
just make redirect from hangar url and call it an api
so should i make a pr?
The idea I think was to use b2
whats that
s3 but backblaze, basically
oh cloud storage thing
Hangar will support both internal and external downloads, that's not the issue
The issue is getting the jar or download url to the user, that's just not implemented ^^
Do I have to donate my Amazon S3 account now?
Demon did the calc for b2 and it was fine
B2+Cloudflare 👀
Yep
@random badger about download confirmations:
I think its trivial to make the download button (both on main page for promoted and for version) have a model with a check, thats easy.
but those buttons also have a copy url button, which I would say is for usage in wget? having confirmation there would break wget, so that should just use public api, right? (public api has no confirmation, right?)
Yes that makes sense
And yes, no confirmations on public api
I forget actually, if it’ll redirect you to external url, or just error if the version has no file
I think it should error. Should be on the application to check if the version has a version to download
Yeah, I think if the version has an external link, it should 404 or 400 of whatever.
mmh, redirect would be a nice qol feature?
I don’t think so tho, because that just makes it more complicated
Cause it can either redirect or return a file?
That just seems weird
I implemented api downloads but I forget what I did
throw new HangarApiException("Couldn't find a file for that version")
Oh, ok perfect
will external downloads be required to serve a file directly?
ill add http status 404?
Btw, pure api downloads don’t need i18n. Stuff that’s never used on frontend
No sulu
A link to wherever you want
ok
Doge...
magic
put leaf in charge of all that is how
its not set in stone if and how we will enable this or use this
I could for example see the safety check only be used on obfuscated shit, or shit where the anti virus shit flagged something
that sounds hella complicated to implement right tbh
we will see
hopefully we can just automate most reviewing
so that reviewers only look at flagged stuff, either flagged by the community, or flagged by our automated systems
I heard the spigot anti malware guy (which I always forget the name, optic smth) did rewrite his stuff, so hopefully we can just hook into that
yeah get rid of that
oh I am
I'd like to add support for uploading a zip of versions, for different platforms maybe
so maybe then we can go back and add downloads for specific jars
based on where you click the download button
Caused by: org.postgresql.util.PSQLException: ERROR: duplicate key value violates unique constraint "project_version_download_warnings_address_key"
Detail: Key (address, version_id)=(127.0.0.1, 4) already exists.
uuuh
I think that constraint needs to go
cause you know, I might wanna download it multiple times, lol
other than that, it works!
now to make sure that recommended works
Or add the created_at to the composition?
this Jake Potrebic dude did 😄
well, doesn't matter, am not sure if we need a constraint there at all
adding created_at makes the constraint pretty useless
adding download_id to it might work
Idk I don't wanna figure that one out rn
otherwise am done I think
I just deleted all old files \o/
54 todos in code and 26 issues that are currently targeted at MVP, not too bad
Oh wait, no you need that
You only have to confirm it once
No need to confirm it multiple times
oh I see
Was thinking that was for downloads, not warnings
lemme fix the logic then
we gotta make sure hangar is setup to handle reverse proxies ip wise btw
ah we already do read x-forwarded-for
Thought in one of the later Spring Boot versions
https://docs.spring.io/spring-framework/docs/current/javadoc-api/org/springframework/http/server/ServletServerHttpRequest.html#getRemoteAddress--
automaticallly returns x-forwarded-for when present.
Need to look into again.
dont think so
its very much implementation detail of whatever webserver you use
iirc
1024 commits to hangar \o/
Yeah only for the variable REMOTE_HOST
https://docs.oracle.com/javaee/6/api/javax/servlet/ServletRequest.html#getRemoteAddr()
it uses that internally
but that does say that it will return the proxy host?
it will return the client, or if a proxy was there, then the proxy
Yeah, Read it wrong. Sorry my bad.
sad
should prolly figure out why it does a refresh when there is no refresh token
but I am not touching that code at 22:30 after a long day
well... we've a bit of an issue with the whole downloading thing
it doesnt send the JWT with the request
so if its hidden cause its new, or smth, no one can download it
we aren't putting the JWT in the cookies, just the refresh token
oh right, we made it so you can just use a ?t query param to send it that way
ok, that'll work
well, firefox blocked the popup
no idea how that stuff works, but that'll be annoying
So what I’m thinking for uploading… a hangar.yml that basically can override all the scanned values.
So you can specify version, supported platforms, everything
And if one is found, that’s what’s used, not trying to find a plugin.yml, or velocity.json
:/
Since it's a user interaction it's allowed on chrome, is that different on firefox? Else we can do a meta refresh, loosing the current page then, but I guess that's fine?
Maybe I should look into how other sites handle that or smth, maybe we can make the confirm button be a real link or smth
That, but let's not require any format, like support json and yml for the start and be able to expand if needed
Using the same data strcuture
There a handy library for that? I mean, I’d rather not have to write multiple deserializers
man, for some reason eslint/prettier stuff is so confusing to me, modules, plugins, extensions
Did you actually check that the deps you merged compile? 🙈
Pretty sure I left them open because they broke the pipeline, had breaking changes we need to look at
yeah, I fixed the issues and force pushed back to the branch and merged
:+1:
Just wanted to complain that those force pushes didn't show up in discord but they did so I blame that am still in bed
right now, I'm trying to figure out why intellij isnt using the node configured by NVM
its using like version 10 with is not too old for lint-staged, so its failing to run the pre-commit checks
IJ has a switcher somewhere
and the PATH is all wrong, I just had it spit out the path var and its like, almost empty
missing all the stuff I have added to it
it only sees the node at /usr/bin/node
What exact action you doing?
just using intellij's commit
and it runs the pre-commit hook, and that fails
because its only using 10.19 and needs 12.13
Do you require node 10 for anything else?
Else I would just nuke that and hopefully save some trouble
Ideally that step would use the project node but God knows what IJ is doing for that
well, then it wouldnt be able to find any node installation
I could update it, but I want to know whats up
Isn't node 12.13 outdated already?
Yes, 12 was last LTS
What exception are you ignoring here?
I made reswaaally bad experiences with ignoring exceptions like that
Number parsing
It was probably lazy of me, but I couldn’t find a nice “canParseIntoLong” or equivalent to use
Should just catch number format exception or smth then
nah, Ill just move the full try/catch for that specific thing to the supports method
or that
its just that I have grown to be reaaally careful with swallowing exceptions
yeah, its not that smart, also it kinda encouraged using exceptions as control flow which I know is discouraged
that I don't even care about, the job/discourse stuff does that. throws a ratelimit exception deep down so top level and schedule the job for later
@fluid stratus you said you would help me with IntelliJ Academy
I'm on my PC now
This is what bothers me
#paper-dev @main lava
Should I delete my post?
It's fine, deleting stuff sucks cause it causes ghost unreads :)
I found the "Postpone" button and clicked on it
Nice, the seo plugin was a good idea cause stuff gets pretty repetitive
Ooo very nice
Does discourse handle the discussion pages stuff?
mmmh, that page doesn't have a description, should it use the description of the project?
or "MiniDigger released this version on April 5, 2021"
and yes, discourse integration is done
For specific versions I would say release but for regular page do project description
oh https://hangar.benndorf.dev/avatar/MiniDigger?size=120x120 fails, thats why there is no image
that description for the version is fallback
so like, I can generate something that makes more sense if somebody suggests something 😄
ah yes this was smort too https://i.imgur.com/cJGWfcv.png
no, we don't have any policies set in stone, and that hasn't really been discussed internally yet
If there is a resource report option, I'll use that on that kind of resource.
"We reserve the right to remove plugins that break the mojang ToS, eula or commercial usage guidelines"
aka get fucked
😄
idk, we will figure smth out

Can you test this stuff locally with google’s tools? Or do you have to deploy
Oh nice
yes
TS did infer the type for the array wrong and is now blaming me?
Someone was complaining about it being slow. Glare?
Said it was 5 seconds between page loads
on staging?!
Yeah I think so
idk how much cloudflare caches
but its hosted in germany so latency might affect stuff?
it really varries, sometimes it seems decently fast (it seemed meh here) but sometimes it'll be painfully slow
wow can't attach video
ok there
maybe it's my discord client acting up, won't let me play videos in the app
yeah I bet thats latency
it seems pretty much fine there, but sometimes it'll go crazy slow
probably yeah
your video looks great
"Refused to load the script 'https://static.cloudflareinsights.com/beacon.min.js' because it violates the following Content Security Policy directive: "script-src 'self' 'unsafe-inline' 'unsafe-eval'". Note that 'script-src-elem' was not explicitly set, so 'script-src' is used as a fallback"
git fucked cloudflare
holy
this could be a cause for slow pages
bad cdns
We wanna include those ourselves?
maybe, ye
modern mode = letting the server serve es6 modules to browsers that support it
I think those modules also have less polyfillys and shit
LMFAO
even tho server was really slow with initial response for some reason, its wwwaay faster now
So… I’ve got a custom instantiation strategy for the jdbi interfaces, but I can’t seem to figure out how to get spring to use it
Does it? Haven't noticed a different loading bar
Code should be exactly the same, just the packaging is different
Yeah, when I ran yarn dev, there’s a 3rd blue loading bar
Client, Modern, and Server
Yeah makes sense
And server decides what to throw at you
Nuxt doesn't have a way to turn off legacy
There's an open issue for that
Virtually everyone supports modern anyways
Work refuses to drop ie11 it's so annoying
Am gonna break it on "accident" when I move to bootstrap 5 and see how bad the backlash is
But we got extra stylesheets just for ie
Well like, when I used to do a bunch of stuff for Gamepedia wikis, I asked why they still support older IE versions, and if you have many millions of visitors, even a tiny chunk is a lot of ad revenue
IE is like 2% or us iirc
But I bet that most of that is internally
Cause some ppl here actually use ie11, some of our apps require it
But we rolled out edge to everyone earlier as default
With a maintianed "Enterprise" mode list, aka urls that require ie 11, so that should eat into the share
The future of Internet Explorer (“IE”) on Windows 10 is in Microsoft Edge. What does this mean for commercial organizations, IT admins, developers, and end users? Microsoft Edge brings you a faster, more secure, and more modern web experience than Internet Explorer. Also, Microsoft Edge with Interne...
and this belongs here because?
we were talking about IE earlier
earlier
5 days ago
Errr, did smth fail?
Oh, does that happen if you do too many quick commits?
I feel like it should just cancel the previous actions if there’s a new commit
Yeah I have been meaning to look at that
But yes if docker step fails with "out of order update" it's because it ran too fast
I saw that the pipeline broke but then I got a call at work and forgot
Before I could look into it
Ah, it's a new features
A workflow is a configurable automated process made up of one or more jobs. You must create a YAML file to define your workflow configuration.
That seems like it’ll just wait until previous is done?
It’d be better to just cancel the previous right? Why waste build time?
There's an option to do that
concurrency:
group: ${{ github.head_ref }}
cancel-in-progress: true
Not sure if head ref is the right variable
Should be the branch I guess
Oh yeah ok.
I don't think we need such harsh concurrency limits on build
That would be ewww with dependency PRs for example
Or wait, GitHub ref catches that, right?
I think it should. on a PR I would think that references the branch the PR is coming from
I didnt check that tho
Yeah it's fine
Huh
Guess we have to implement a language switcher after all
Hey, nice. Translations
Chinease ppl are really active with this, really cool
yeah, the CCP didn't block hangar yet 👀
Should the language just be tied directly to the user language?
I think that is sent over as part of auth flow
But that’s all getting replaced anyways so idk
Is there any want currently for more translations? Could contribute one if wanted.
I mean, I’d wait for now
Frontend isn’t totally done yet
I don’t think many msgs will change, but there will be new ones
Okay
I would say so, yes
I guess there has to be a switcher still for non logged in users
Forgot about those people
Meh
Yeah I guess
Maybe in the footer or smth
And if you logged in, that will change your whole profile language
I was thinking it’d just change your language for the session with a note to change it across all paper sites somewhere else
Or that, yeah, like, have it a modal with a flag button as activator, modal has drop-down with supporter langs, a note on how to contirbutor translations and a note/checkbox? about changing it in your profile
Let's hope we got smth to pull flags from, lmao
Seems easy enough, can just hot link for smaller js size
ok, what is happening when I try to serve the frontend
log just gets absolutely spammed with sass deprecation warnings
disable the deprecation warnings /s
That's what happens when we only use GitHub to merge stuff and don't test locally 😂
I got a holiday tomorrow and Friday off too, and weather is slated to get worse again (we had the first glimpse of summer here! So no pc), so hopefully I can look at hangar stuff then until 1.17 comes out
a plugin hosting site like dev bukkit and spigot's resource section, yes
Ah, that's why I got an unread here, somebody deleted their message again!
smh
Trying to run hangar so I can try to do smth and I can't run the spring app. I have no clue why this happens. Running IJ on windows, project is running in WSL. JDK is WSL. Project imports just fine, but won't run. I can get docker db and frontend up just not backend. 
If you want, there should be a docker setup somewhere to run hangar in docker for dev too
I don't run IJ in WSL for hangar, only for paper
IJ is on windows, just maven and that shit is in WSL
And IJ uses windows jdk?
IJ itself is running on Windows JDK yes
But the project is in WSL, running on WSL JDK
intellij made wsl worse when they started officially supporting it

in 2020.3 it autodetected projects perfectly then in 2021.1 when they "supported" wsl you have to spoonfeed it everything

You don't need WSL for hangar, only for docker
And that is sperate WSL instance anyways
Problems you (only) have with Windows.
what can you do if there is no LSW
there's wine
that will not work with most windows stuff that aren't games
run a vm
if you have that many windows specific workloads you might as well dual boot
because vm just isn't an amazing experience
imo
i just ditched vms after running servers on them for 3 years , i have to say its night and day
I dont see a way to disable sass deprecation warnings,
and vuetify updated to move to supported stuff, but chartist hasnt been updated in a while
Does chartist use sass?
yes
can fork and fix deprecation issues
it hasnt been updated in 2 years
otherwise, I think we are gonna have to revert the sass upgrade, and not update that any more
How many warnings we talking about?
I mean, it throws the log into a big mess
like, look at some recent build logs for the frontend, they are 1000s of lines long
now, thats with vuetify which fixed theirs
Was more talking about the work involved to fix it
Or if it's easier to switch to smth supported again
oh, it can be done with a find and replace
just cant use / for division anymore
gotta use math.div
k, I just downgraded sass for now
can figure out what we want to do later
What is hangar even lol
It's going to be a plugin repository for paper
so like spigot's resources sections, but better and paper
interesting
Ohhh like spigotmc.org
That sounds cool I have experience with spring boot
But I'm rlly bad with js and html and css
Sounds exciting I cannot wait
😳
Paper's api is so much better
so you could say it’s a hangar for plugins? 
3 questions:
Will it support premium plugins?
Where you hosting it 😳?
Will there be a download counter lol?
- no, see pins
- idk
- I think so, not sure
i'm not the best person to answer this stuff lol
but someone else will probably come by later
you are gonna be allowed to charge for support and stuff though, and it will track donations just not charge for downloads
I see
Also
Will it allow plugins that also work with spigot and not only paper? I assume yes
yes
And does it store the plugins server side or do you have to provide an external download link
it will, but I think you can also provide your own link
Pog
wat is hangar
see last 30 second conversation
Inb4 Spartans gonna be BlackListed
oki
So what is hangar?
scroll up, but basically a plugin repository
you guys need a bot that auto-responds to these 😄
Or maybe just a #hangar-info channel where the pins can be all in one message.
Because nobody ever checks pins 
there is no such command
Check the pins
Ok thanks!
No worries ^_^
What is hangar?
See the channel topic
Mfw every announcement that mentions hangar fails to describe it in the announcement
