Logbot

#sandstorm
AUTO⬇
  • 01:49:32 synchrone well well
  • 01:49:51 synchrone let's see if that Radicale 1.1.1+v7 gets everything fixed :)
  • 01:51:03 synchrone v6 was packaged incorrectly, I had a dirty working tree
  • 01:51:38 synchrone (iOS still misbehaves on setting up the URL, but seems to work if you insist)
  • 04:13:27 synchrone damn iOS
  • 04:14:05 synchrone in the end it turned out to do unauthenticated OPTIONS request to the calendar url
  • 04:14:13 synchrone which is pretty much a deal breaker
  • 04:14:37 synchrone since answering to that request requires launching the grain
  • 04:16:06 synchrone unless sandstorm dives into implementing even more WebDAV than it already does, making some DAV: capabilities configurable from capnp file
  • 04:21:03 asheesh oh fascinating
  • 04:21:18 asheesh cc: @kentonv
  • 04:55:13 kentonv synchrone: what is it hoping to see in the OPTIONS request? "Dav: 1"?
  • 04:58:43 kentonv proposal #1: We always return DAV: 1 on unauthenticated OPTIONS requests.
  • 05:00:02 kentonv proposal #2: We extend API key creation (e.g. via offer templates) with the ability to specify certain OPTIONS headers that should be returned unauthenticated. We could even let you specify static responses to certain routes, which would solve mnutt__'s problem with ownCloud wanting to hit /status.php unauthenticated.
  • 05:01:02 kentonv in proposal #2, these responses would be specified statically at token creation time and would not require spinning up the app for unauthenticated requests.
  • 05:01:10 kentonv synchrone: thoughts?
  • 05:03:30 phildini +1 for unauthenticated API options. would unlock a bunch of interesting things.
  • 05:03:59 phildini (note that I meant options not OPTIONS, since I think there are legitimate uses for having un-authed endpoints in webapps)
  • 05:18:04 asheesh i,i "the problem is that static publishing is a singleton!"
  • 05:25:23 mnutt__ asheesh: I had exactly the same thought the other day "I want to publish one of my shared sub-directories as a photo album. wait, that means I can only publish _one_ from the whole shared directory"
  • 05:28:47 zarvox asheesh: mnutt__: you may find https://github.com/sandstorm-io/sandstorm/pull/1442 interesting, especially web-publishing.capnp
  • 05:29:17 mnutt__ ah cool
  • 05:29:58 mnutt__ I later decided that meant I should be splitting up my grains more, though I have a vague wish for better grain management
  • 05:31:00 zarvox agreed on the "better grain management" - I'm curious to know which low-hanging fruit would be the most valuable for you
  • 05:31:38 zarvox for me it'd probably be "(batch) deletion from the grain list"
  • 05:41:45 synchrone kentonv: №2 seems to let more apps in
  • 05:42:48 synchrone and to asheesh's point about static publishing (not sure if it's even in the context of un-authed responses): token-based static responses would be not-so-static I guess
  • 05:45:13 asheesh IMHO to me, un-authed responses to the "API subdomain" sound to me like the "API subdomain" wants to delegate some of its actions to (effectively) static publishing.
  • 05:46:09 synchrone ...we're trying to fit the unfittable in that authenticated-api-client-only world
  • 05:46:50 asheesh BTW, does anyone feel like testing Apache2 + Sandstorm web sockets reverse proxying?
  • 05:47:11 asheesh ...Maybe I will ask a friend elsewhere, too.
  • 05:47:34 synchrone maybe subdomain could be used for grain routing, enabled for anonymous requests only?
  • 05:48:58 * synchrone tries to relax them security-minded rules :)
  • 05:49:51 kentonv no, to start up the grain you need to have a key. This will become a hard rule when we have fine-grained encryption.
  • 05:50:01 kentonv a hostname is not a key.
  • 05:50:08 kentonv only the token is
  • 05:52:56 kentonv so if the host is going to serve anything app-specific without requiring a key, that stuff needs to be specified statically in advance at a time when the grain is running
  • 05:53:45 synchrone how much data could an app associate with the token?
  • 05:54:09 synchrone like, some people would probably like to "publish a single file" using that mechanism
  • 05:54:25 synchrone not just plug a weird client, like i do
  • 05:54:59 synchrone certainly would be nice to specify full blown route and response headers + body
  • 05:55:01 kentonv the implementation I had in mind for solving the API problems would be designed for maybe a few hundred bytes of data, not for serving whole files.
  • 05:55:12 synchrone without proxy.js getting up my app-specific business
  • 05:55:23 kentonv for serving whole files or web sites, you want to use static web publishing
  • 05:56:19 synchrone compiling that C++ sucks though. I am already dreaming about reading that static publishing ID from a virtual file somewhere inside my grain
  • 05:57:24 kentonv cap'n proto bindings exist in several languages, and I'm also open to adding some sort of endpoint on sandstorm-http-bridge if you don't have Cap'n Proto bindings available.
  • 05:59:40 larjona this page: https://github.com/sandstorm-io/sandstorm/wiki/Speaker-Kit-Lightning-Talk could use a bit more dogfooding (some links to google docs there...)
  • 05:59:44 synchrone can I do things similar to "window.parent.postMessage({renderTemplate: ", just on the backend?
  • 06:00:43 kentonv synchrone: more or less, if you are working in a language with cap'n proto bindings.
  • 06:01:27 synchrone maybe window.parent.postMessage({staticEndpoint: { method: /GET|POST/, url: /^\/api/, headers: [{'DAV': '1,2,3, calendar-access'}], 'body': null}}) ?
  • 06:01:47 synchrone s/url/route
  • 06:02:06 synchrone feels weird to do that in JS
  • 06:02:17 synchrone from the user's browser
  • 06:02:58 synchrone oh, and add requireAuth: false to it
  • 06:04:12 kentonv synchrone: the current web publishing API is actually "put your site in /var/www, then make one RPC to Sandstorm to tell it that it's there and determine the hostname to display to the user"
  • 06:04:29 kentonv the future API is proposed in https://github.com/sandstorm-io/sandstorm/pull/1442
  • 06:05:11 kentonv or more specifically https://github.com/sandstorm-io/sandstorm/blob/pseudo-driver-protocols/src/sandstorm/web-publishing.capnp
  • 06:08:13 synchrone ...too smart to fit any usecase
  • 06:08:34 synchrone why not expose headers?
  • 06:09:46 kentonv synchrone: if I can serve arbitrary headers from a resource in your domain, I can brick your domain
  • 06:10:27 synchrone with some filtering the way XHR disallows you based on a blacklist?
  • 06:10:30 kentonv namely, I can pin your domain certificate to something broken and now user's browsers will refuse to load your domain until the HSTS timeout
  • 06:10:38 kentonv that's basically what we do
  • 06:10:47 kentonv we expose specific features
  • 06:10:50 synchrone I see a whitelist there
  • 06:11:29 kentonv many features correspond to specific headers, but instead of expressing them in terms of HTTP headers, we have a Cap'n Proto structure which represents the content in a logical way
  • 06:11:51 synchrone generally whitelisting is good, but won't we have a situation similar to UA whitelist?
  • 06:12:10 synchrone i need a feature - i can't fit it in capnp - i end up here, bothering you :)
  • 06:12:37 kentonv there are fewer protocol features than there are apps, so this is less of a problem
  • 06:14:19 kentonv in web-session.capnp we added a header whitelist thing where you could specify arbitrary header names but they'd be filtered to a whitelist... but it immediately introduced a security problem. In retrospect I think we probably shouldn't have added it.
  • 06:14:31 kentonv luckily the security problem currently isn't exploitable for other reasons
  • 06:15:32 kentonv specifically, we applied the whitelist filter at proxy.js but not again in sandstorm-http-bridge, which means that if a malicious party is able to call the app's WebSession API directly (something we intend to allow eventually), they can inject arbitrary headers, which among other things would allow them to spoof user authentication.
  • 06:16:16 kentonv had we instead written a struct which had a bunch of string fields corresponding to headers we wanted to pass through -- instead of a list of key-value pairs -- this wouldn't have happened.
  • 06:18:45 synchrone so the plan is to express every standardized header and it's potentially quite complex values as capnp structs?
  • 06:20:54 kentonv synchrone: yes
  • 06:21:41 synchrone ambitious. I like it :)
  • 06:21:55 kentonv it turns out that quite a lot of HTTP headers are transport details, not content details. Almost all of them are irrelevant to WebSession.
  • 06:22:15 kentonv what's left is not too complicated. We have it mostly covered today.
  • 06:22:33 kentonv We need to add range requests and better cache control at some point.
  • 06:22:34 synchrone which makes sense for content transfer protocol right?
  • 06:22:54 synchrone range totally makes sense for publishing
  • 06:23:01 kentonv yeah
  • 06:23:24 kentonv ah but for publishing, Sandstorm will take care of ranges
  • 06:23:30 kentonv there's no need for the app to think about it
  • 06:23:37 kentonv because the app isn't serving the content in real-time
  • 06:24:37 kentonv for static web publishing, even fewer parts of the HTTP protocol really matter. It's pretty bunch down to Content-Type, Content-Encoding, Content-Language, and then the bytes.
  • 06:25:30 synchrone i doubt Accept-Language is your best choice of a mechanism
  • 06:25:39 synchrone that needs to be left for the app
  • 06:26:12 kentonv sure but what the app will do is place different lanugages at different paths
  • 06:26:17 kentonv presumably
  • 06:26:33 kentonv (again, we're talking about static sites here, not dynamic UIs)
  • 06:27:43 synchrone and then some user with ru-RU, en-US, ua-RU, en in his browser will come with a link he got after switching the app to Ukranian and see the russian text
  • 06:28:01 synchrone because the first language matches better
  • 06:28:41 synchrone and he was just using russian OS\browser for whatever reason
  • 06:28:52 synchrone so the app will need to control which entity links it serves
  • 06:29:18 synchrone which ends up in /<alpha2> in your urls
  • 06:30:38 synchrone I mean the HTTP's original Accept-Language idea is awesome, but switching languages via cookies always overrules that
  • 06:31:02 asheesh FWIW, Sandstorm could pseudo-standize that perhaps (-:
  • 06:31:22 synchrone god, so many websites doing an awful job at language selection
  • 06:31:39 synchrone i am a russian, in germany, with browser prioritized to english
  • 06:31:45 asheesh The app could use JS to set a cookie called 'pseudo-accept-language: en-US' and then Sandstorm static publishing could treat that as overriding the Accept-Language header.
  • 06:31:53 synchrone i've seen some stuff in 3 langs at the same page... e.g in Google play store
  • 06:31:57 asheesh : D
  • 06:32:09 asheesh I "look forward" to us adding i18n to Sandstorm instelf.
  • 06:32:18 synchrone gon' be hard
  • 06:32:21 synchrone :D
  • 06:33:02 synchrone usually people understand all the languages the poor software detects for them
  • 06:33:12 synchrone ..but I don't know German, for example
  • 06:33:34 synchrone some websites abuse GeoIP too much
  • 06:33:47 synchrone the ads are the worst
  • 06:34:26 synchrone ok, getting back to my original topic: I need static unauthenticated endpoints in my API
  • 06:34:35 synchrone what do I do/
  • 06:35:39 kentonv what specifically does the OPTIONS request need to return?
  • 06:35:45 kentonv in your case
  • 06:36:05 dwrensha i,i what if instead of AdBlock, we had AdGreek?
  • 06:38:25 synchrone in my case OPTIONS response body is empty
  • 06:38:49 synchrone so just the headers, namely DAV:
  • 06:38:59 synchrone this is what iOS wants to see
  • 06:41:06 kentonv is there any important header other than DAV:?
  • 06:42:37 synchrone not in this case
  • 06:42:56 kentonv ok, cool
  • 07:41:26 kentonv dwrensha: I think we should fix https://github.com/sandstorm-io/sandstorm/issues/1581 ASAP.
  • 07:51:37 mrdomino kentonv: just invited you. i got a report from another invitee that a not-expected email from their github was used, that they don't normally use
  • 07:51:41 mrdomino (to c.wholezero.org that is)
  • 07:53:47 kentonv mrdomino: yeah we need to select email addresses better
  • 07:53:54 mrdomino ok cool, that's known
  • 07:55:04 kentonv dwrensha: github tells us which address is "primary". We should really respect that. Maybe it's as easy as re-ordering the address to be first?
  • 11:14:43 mnutt__ I don't _think_ it would hurt anything to have sandstorm unauthenticated OPTIONS send Dav: 1 header always, but I'd be willing to test it.
  • 13:22:43 e` Â/window 19
  • 14:43:15 asheesh Great seeing people at the meetup today!
  • 14:53:13 ocdtrekkie So, if I have an old Sandstorm local install I used for all my dev'ing of things, and I tried updating an app on it, and it no longer runs. (The app runs correctly still outside Sandstorm, and the grain does load most of the way in Sandstorm, it just can't load the saved sqlite data, I'm guessing.)
  • 14:53:21 ocdtrekkie I'm kinda confused where to start troubleshooting it.
  • 15:18:21 ocdtrekkie I took my previous version app code, and it does the same thing now.
  • 17:37:53 synchrone mnutt__: except iOS would be complaining about Ca(rd|l)DAV address being invalid
  • 17:38:45 synchrone it would of course work, but the user would have to insist on saving that configuration
  • 17:40:22 synchrone ..which is a bad UX. Even worse than having to somehow copy the url and token to device (potentially giving them up to Apple\Google via email or some IM in the process of sending to one's self), since there's no way a human being can type all those chars
  • 17:53:09 synchrone also: could you guys add <meta> support to appstore? https://nas.syn.im/index.php/apps/files_sharing/publicpreview?y=5000&x=6000&a=true&scalingup=0&t=PyIp6xAJaabZU7l
  • 17:53:10 synchrone Would be super nice to feature every app from it's capnp short description + logo
  • 22:08:21 Tryum hi there !
  • 22:08:40 dwrensha Tryum: hi!
  • 22:10:31 Tryum I'm so sad there's no irc client on sandstorm.io ! Fortunately, I have an always on irssi sleeping somewhere ;)
  • 22:13:51 dwrensha Tryum: I think a lot of us are excited about the possibility of having IRC on Sandstorm.
  • 22:14:40 Tryum Is there a wiki page or something about apps being ported, or at least a wanted list ?
  • 22:14:49 dwrensha For and IRC app to access the outside world, it will need to go through the Powerbox. See https://sandstorm.io/how-it-works#powerbox
  • 22:15:09 dwrensha ... and we've recently been making significant progress on the Powerbox.
  • 22:15:57 dwrensha We have a wanted list here: https://sandstorm.io/vote
  • 22:16:31 Tryum nice !
  • 22:17:01 Tryum I'm still a young user of sandstorm.io... installed it hours ago, but it's so nice !
  • 22:17:53 Tryum I'm managing a server with friends, and having less and less time dedicated to it, sandstorm.io is the holy grail for me ;)
  • 22:21:47 Tryum Is it possible to make short links like sandstorm.io/vote on my own instance ?
  • 22:32:34 dwrensha I think the sandstorm.io/vote redirect is being served by nginx, running in front of Sandstorm.
  • 22:33:00 dwrensha Sandstorm itself currently doesn't have a shortlink feature.
  • 22:37:25 Tryum Ok so I guess I can replicate this on my server by finding the nginx config file in /opt/sandstorm
  • 22:38:05 dwrensha Sandstorm doesn't ship with an nginx server.
  • 22:38:58 dwrensha https://docs.sandstorm.io/en/latest/administering/reverse-proxy/
  • 22:41:43 Tryum ok thanks
  • 23:08:25 canuky MongoDB question ... I have a few handles in my admin/users table that I don't recognize and I would like to look them up ... correct query is- db.users.find({"profile.handle": <handle>}) ?
  • 23:19:19 dwrensha canuky: that should work, unless the handles aren't filled in yet
  • 23:19:57 dwrensha (the field get filled in when the user confirms their profile on first login)
  • 23:20:39 canuky Ah ha ... I have a few people listed as 'Guest' that used passwordless email login .. hoping to find their email so I can reach out to them
  • 23:21:54 canuky handle is listed in the table, just not sure how to find their associate email domain
  • 23:22:20 canuky listed in the user/admin dashboard table, that is
  • 23:22:39 juicef I wonder about the Ghost app. It seems like it's been abandoned since it's lags several major app updates behind. Is there an idea of how much update lag there's gonna be with Ghost specifically, or apps in general?
  • 23:24:20 dwrensha canuky: I filled https://github.com/sandstorm-io/sandstorm/issues/1586 for you.
  • 23:24:45 canuky Right on - thnx
  • 23:25:31 dwrensha juicef: Agreed that the Ghost app could use some love.
  • 23:26:42 dwrensha juicef: the big blocker is that upstream redid their authentication logic a while back
  • 23:27:53 dwrensha ... so there are some major changes to be made in the Sandstorm port, and jparyani hasn't had time to figure them out.
  • 23:29:54 dwrensha juicef: the ideal is that upstream authors will be responsible for maintaining their Sandstorm packages
  • 23:30:18 dwrensha this is already the case for rocket.chat, wekan, and ethercalc
  • 23:39:20 juicef dwrensha: I agree, I reckoned that was the thought up ideal solution. How's the Ghost team on this issue? Resource scarcity or competing business logic interfering perhaps?
  • 23:41:42 dwrensha I don't know whether we have ever contacted the Ghost upstream people.
  • 23:52:46 juicef dwrensha: I feel that for certain apps with their own infrastructure up and running (WP and WP.com) (Ghost and Ghost.org) an extra effort is going to be needed to have those apps freshly available on SS.
  • 23:53:47 juicef Seems now that the smallest, less known apps are the perfect fit for SS. But alot of people need the big ones as well.

Date: