Solid Smartphone App - Running solid from Termux - Solid: Server Error

Hi,

I am developing a mobile app browser for Solid and trying to use a pod that is hosted locally using termux (Android command line prompt). My cloud pods work fine but when I try with the local one (localhost), I am able to get to the stage of logged in and listing. But, when i try to write a file to the Pod, it throws the following error. I even tried it with the browser based apps and still the same. Any solution?


solid:ACL could not fetch owner doc NamedNode { termType: ‘NamedNode’, classOrder: 5, value: ‘mailto:mano@gmail.com’ } Only HTTP(S) protocols are supported +11ms solid:ACL error processing owner results +26ms solid:ACL accessDenied: checking access to https://localhost:8443/Mano.jpg by null and origin <https://otto-aa.github.io> +0ms solid:ACL 1 default authentications about https://localhost:8443/ in https://localhost:8443/.acl +0ms solid:ACL Checking auth https://localhost:8443/.acl#owner with agent null +1ms solid:ACL Agent or group: Fail: not public and not logged on. +0ms solid:ACL The agent/group check fails +0ms solid:ACL Check failed: User Unauthorized +0ms solid:ACL accessDenied: modeURIorReasons: [“User Unauthorized”] +0ms solid:ACL checking http://www.w3.org/ns/auth/acl#Write +0ms solid:ACL MODE REQUIRED NOT ALLOWED: http://www.w3.org/ns/auth/acl#Write Denying with User Unauthorized +0ms solid:ACL Write access denied to (none): undefined - request to https://localhost:8443/.well-known/openid-configuration failed, reason: self signed certificate +0ms solid:server Error page because of: FetchError: request to https://localhost:8443/.well-known/openid-configuration failed, reason: self signed certificate at ClientRequest. (/data/data/com.termux/files/home/localhost/node_modules/node-fetch/lib/index.js:1461:11) at ClientRequest.emit (events.js:315:20) at TLSSocket.socketErrorListener (_http_client.js:469:9) at TLSSocket.emit (events.js:315:20) at emitErrorNT (internal/streams/destroy.js:106:8) at emitErrorCloseNT (internal/streams/destroy.js:74:3) at processTicksAndRejections (internal/process/task_queues.js:80:21) { type: ‘system’, errno: ‘DEPTH_ZERO_SELF_SIGNED_CERT’, code: ‘DEPTH_ZERO_SELF_SIGNED_CERT’ } +5m


1 Like

What file is the named node { termType: ‘NamedNode’, classOrder: 5, value: ‘mailto:mano@gmail.com’ } supposed to write to? You say this works in the cloud - what resources is produced?

I looked at your error message more completely and notice that it mentions node-fetch. This means that you are using an unauthenticated fetch, rather than an authenticated one. This can happen if there is confusion about what fetcher to use … can you show us the code the does the fetching?

Thanks for the reply Jeffz. Basically, this is what I have done.

  1. I have Setup a solid server using termux in my android phone. I used self-signed certificates for the setup.
  2. The service was running in https://localhost:8443/
  3. I have used https://otto-aa.github.io/ and https://ohmypod.netlify.app/ to check whether I am able to write files to the pod.
  4. The login worked fine but when I tried to write a file to it, I got the following errors. I even tried to edit the .acl file to clear the authentication error, but its still the same.

What i meant by cloud pod is, i used a normal pod from solid community with the above two websites and the write function is working fine. But when i tried to do the same with my local host pod, i am getting this error in the UI - Error: SFCFethError500 https://localhost:8443/public/test.txt - An internal server error occurred. The server error log is below,

I have formated the above error -

solid:ACL accessDenied: checking access to https://localhost:8443/Mano.jpg by null and origin <https://otto-aa.github.io>
solid:ACL 1 default authentications about https://localhost:8443/ in https://localhost:8443/.acl
solid:ACL Checking auth https://localhost:8443/.acl#owner with agent null
solid:ACL Agent or group: Fail: not public and not logged on.
solid:ACL The agent/group check fails
solid:ACL Check failed: User Unauthorized
solid:ACL accessDenied: modeURIorReasons: [“User Unauthorized”] +0ms solid:ACL checking http://www.w3.org/ns/auth/acl#Write
solid:ACL MODE REQUIRED NOT ALLOWED: http://www.w3.org/ns/auth/acl#Write Denying with User Unauthorized +0ms
solid:ACL Write access denied to (none): undefined - request to https://localhost:8443/.well-known/openid-configuration failed, reason: self signed certificate +0ms

What authtentication package are you using to login? What version of NSS is your local install? When you say “the login went fine” - how do you know that other than it didn’t throw an error?

Ah yes, I just checked the log again by running the server from the beginning and there are errors. Please find the images below.

  1. Starting the server with npx solid start command. (The moment it starts, it throws some errors. )

  1. But still, the server runs at the localhost.

7.

hi on the “Welcome to the Solid Prototype”, it seems that your are logged at ‘https://localhot:8443/profile/card#me
so there is no username , shouldn’t it be https://your_name.localhot:8443/profile/card#me
?

Hi,

I think it’s bcz Its actually a single user configuration and thats why there is no username.

@jeffz is there a way to specify which fetcher to use?

Also, I wanted to ask you this, is it possible to do an authenticated write to a solid pod without the popup using CDN? Like how we do in node where we have a config variable which has the username and password and when the appropriate function is called, a file is written/created in the solid pod. Similarly, can we do the same using CDN without the popup?

If it is possible, my idea is to directly get the username and password from the user via a from in the mobile app and just write it to the local solid pod.

With Solid-File-Client, you can pass in a fetcher in the call to new :

const fileClient = new SolidFileClient(fetcher);  
// where fetcher is a library that has a fetch() and optionally also a login() method e.g. solid-client-authn-browser

Also, I wanted to ask you this, is it possible to do an authenticated write to a solid pod without the popup using CDN? Like how we do in node

If you are running in a combination node/windows environment like electron, you can use the nodejs login via solid-node-client. In a straight windows environment, things are moving away from solid-auth-client to Inrupt’s solid-client-authn-browser which has no popups. Also, there are now at least four Solid servers and NSS is the only one that accepts a name/password from the command line. The newer ESS and CSS servers do not and will never accept a command-line login flow without first getting a cookie via a browser.

Is your code somewhere I can look? I’d be glad to see if I can help figure the fetcher situation out.