Feed of "readeck/readeck" https://codeberg.org/readeck/readeck Readeck is a simple web application that lets you save the precious readable content of web pages you like and want to keep forever. Mon, 13 Apr 2026 22:27:55 +0200 anarcat commented on issue readeck/readeck#629 https://codeberg.org/readeck/readeck/issues/629#issuecomment-13071162 Add ability to bulk edit properties of multiple bookmarked items <p dir="auto">this feels like a duplicate of <a href="/readeck/readeck/issues/5" class="ref-issue" rel="nofollow">#5</a></p> this feels like a duplicate of #5

]]>
anarcat 122562612: https://codeberg.org/readeck/readeck/issues/629#issuecomment-13071162 Mon, 13 Apr 2026 16:02:26 +0200
hickey commented on pull request readeck/readeck#1182 https://codeberg.org/readeck/readeck/pulls/1182#issuecomment-13043013 WIP: Add OIDC authentication to Readeck <p dir="auto">Sorry, maybe standard was the wrong word to use. I was not using standard in a sense that go-oidc is part of the core Go lang modules or an x module. I was referring to that go-oidc would be the go-to module for implementing an OIDC client. I know that there are a few others like Goth which was interesting as it &#34;supported&#34; a lot of OIDC endpoints. Probably just has pre-configured settings for most of the endpoints, but I was not sure it would actually add any real value.</p> <p dir="auto">I do agree that OIDC is not a terribly complicated standard, but with any standard there are always little gotchas that are not apparent. I too am not a security expert and don&#39;t want to put something out there that people think is a secure piece of code and have it compromised because of something I never thought would be a problem.</p> Sorry, maybe standard was the wrong word to use. I was not using standard in a sense that go-oidc is part of the core Go lang modules or an x module. I was referring to that go-oidc would be the go-to module for implementing an OIDC client. I know that there are a few others like Goth which was interesting as it "supported" a lot of OIDC endpoints. Probably just has pre-configured settings for most of the endpoints, but I was not sure it would actually add any real value.

I do agree that OIDC is not a terribly complicated standard, but with any standard there are always little gotchas that are not apparent. I too am not a security expert and don't want to put something out there that people think is a secure piece of code and have it compromised because of something I never thought would be a problem.

]]>
hickey 122267829: https://codeberg.org/readeck/readeck/pulls/1182#issuecomment-13043013 Sun, 12 Apr 2026 21:57:51 +0200
hickey commented on pull request readeck/readeck#1182 https://codeberg.org/readeck/readeck/pulls/1182#issuecomment-13034067 WIP: Add OIDC authentication to Readeck <p dir="auto">If I understand what you are saying here (that you want to eliminate the go-oidc module and reimplement the module in native Go code) then I have to say that is a non-start for me. I am not looking to build another go-oidc module that probably will have errors in it and miss edge cases. The go-oidc module takes into account the differences between v1 and v2 of the OIDC specification. I am sure that there are other things done in the module that may accommodate specific OIDC servers or servers that are not (pre-v1) fully v1 compliant (but hopefully they are not in use any more).</p> <p dir="auto">Writing security code is not really a trivial matter as you probably already know and making a requirement that the standard OIDC module can not be used in favor of reimplementing it is just lunacy to me. But if that is your intent, then we can go ahead and close this PR and I will keep the branch for myself and merge it will future versions of Readeck for my use.</p> If I understand what you are saying here (that you want to eliminate the go-oidc module and reimplement the module in native Go code) then I have to say that is a non-start for me. I am not looking to build another go-oidc module that probably will have errors in it and miss edge cases. The go-oidc module takes into account the differences between v1 and v2 of the OIDC specification. I am sure that there are other things done in the module that may accommodate specific OIDC servers or servers that are not (pre-v1) fully v1 compliant (but hopefully they are not in use any more).

Writing security code is not really a trivial matter as you probably already know and making a requirement that the standard OIDC module can not be used in favor of reimplementing it is just lunacy to me. But if that is your intent, then we can go ahead and close this PR and I will keep the branch for myself and merge it will future versions of Readeck for my use.

]]>
hickey 122179995: https://codeberg.org/readeck/readeck/pulls/1182#issuecomment-13034067 Sun, 12 Apr 2026 18:20:29 +0200
hickey commented on pull request readeck/readeck#1182 https://codeberg.org/readeck/readeck/pulls/1182#issuecomment-13033734 WIP: Add OIDC authentication to Readeck <p dir="auto">See below for why the state needs to be stored in the session to validate the origin of the authentication request and the access token will probably be used to renew the token when it expires. It may also be necessary to store the expiration time of the access token, but I have not determined that yet.</p> See below for why the state needs to be stored in the session to validate the origin of the authentication request and the access token will probably be used to renew the token when it expires. It may also be necessary to store the expiration time of the access token, but I have not determined that yet.

]]>
hickey 122173572: https://codeberg.org/readeck/readeck/pulls/1182#issuecomment-13033734 Sun, 12 Apr 2026 18:06:05 +0200
hickey commented on pull request readeck/readeck#1182 https://codeberg.org/readeck/readeck/pulls/1182#issuecomment-13033626 WIP: Add OIDC authentication to Readeck <p dir="auto">I am not sure I understand why you say that this is a non-starter. The HTTP request is not calling to the Readeck instance itself but to the OIDC authentication server to retrieve the configuration for the OIDC application settings.</p> <p dir="auto">This will probably be pulled out anyways as it appears that when the <code>NewProvisioner()</code> function in the go-oidc module retrieves the JSON document stored on the authentication server to configure the client.</p> I am not sure I understand why you say that this is a non-starter. The HTTP request is not calling to the Readeck instance itself but to the OIDC authentication server to retrieve the configuration for the OIDC application settings.

This will probably be pulled out anyways as it appears that when the NewProvisioner() function in the go-oidc module retrieves the JSON document stored on the authentication server to configure the client.

]]>
hickey 122172714: https://codeberg.org/readeck/readeck/pulls/1182#issuecomment-13033626 Sun, 12 Apr 2026 18:03:16 +0200
hickey commented on pull request readeck/readeck#1182 https://codeberg.org/readeck/readeck/pulls/1182#issuecomment-13033491 WIP: Add OIDC authentication to Readeck <p dir="auto">One of my first comments described the flow from the user&#39;s standpoint which is pretty simple as far as the user interface. For the backend flow it is a bit more in depth and I will to my best to describe it as I understand it.</p> <p dir="auto">Once the OIDC authentication flow is initiated by the user pressing the OIDC login button, a random string is generated and sent to the OIDC authentication server. This is usually referred to as the state in the OIDC flow and is really used to validate that the authentication request was initiated from the application is really just a CSRF token. The application upon receiving a login request, will perform an HTTP redirect (GET) to the authentication server with a <code>state</code>, <code>client_id</code>, <code>scope</code>, <code>response_type</code> and <code>request_uri</code> parameters.</p> <p dir="auto">The <code>client_id</code> is generated on the authentication server to identify which application is requesting authentication. This is a static token that is stored in the application&#39;s configuration. The <code>scope</code> tells the authentication server what claims are requested by the application in the authentication response. This is commonly set to &#39;openid profile email&#39;. openid is require and the profile requests items such as username and UID and of course email requests the user&#39;s email address. <code>response_type</code> is set to &#39;code&#39; to (I believe) request an access token in the response. Finally the <code>redirect_uri</code> is the URL that the authentication server needs to send the response.</p> <p dir="auto">The user will then authenticate to the OIDC authentication server if necessary and the authentication server will return to the application using the <code>redirect_uri</code> which will be called with the <code>state</code> and <code>code</code> parameters. Again the <code>state</code> is used to validate that the request originated from the application so the returned state value needs to be compared to the stored state value when the authentication request was initiated. The <code>code</code> (which depending upon the OIDC implementation could be a string or a JWT) is then exchanged for the access and ID tokens. This is done by calling the OIDC token endpoint with the <code>code</code> value. The response will be a JSON document that contains these tokens and a few other items such as expiration time for the tokens.</p> <p dir="auto">The ID token is used to authenticate the user and should be used to validate the user. The access token is used for authorization and provides information as to what the user has access to. In my case I am using Authentik and both the ID and access tokens are very similar, but that may be because I don&#39;t have a lot of settings in Authentik that would provide different authorizations.</p> <p dir="auto">The payload for the ID token asserts the following claims:</p> <pre class="code-block"><code class="chroma language-json display"><span class="p">{</span> <span class="nt">&#34;iss&#34;</span><span class="p">:</span> <span class="s2">&#34;https://auth.wt0f.com/application/o/readeck/&#34;</span><span class="p">,</span> <span class="nt">&#34;sub&#34;</span><span class="p">:</span> <span class="s2">&#34;hickey&#34;</span><span class="p">,</span> <span class="nt">&#34;aud&#34;</span><span class="p">:</span> <span class="s2">&#34;H9uYxz2H6czUt08O0gZroxIAAUYj5hy0lgaM2IRg&#34;</span><span class="p">,</span> <span class="nt">&#34;exp&#34;</span><span class="p">:</span> <span class="mi">1775680621</span><span class="p">,</span> <span class="nt">&#34;iat&#34;</span><span class="p">:</span> <span class="mi">1775680321</span><span class="p">,</span> <span class="nt">&#34;auth_time&#34;</span><span class="p">:</span> <span class="mi">1775666408</span><span class="p">,</span> <span class="nt">&#34;acr&#34;</span><span class="p">:</span> <span class="s2">&#34;goauthentik.io/providers/oauth2/default&#34;</span><span class="p">,</span> <span class="nt">&#34;amr&#34;</span><span class="p">:</span> <span class="p">[</span> <span class="s2">&#34;pwd&#34;</span> <span class="p">],</span> <span class="nt">&#34;sid&#34;</span><span class="p">:</span> <span class="s2">&#34;d582cf9de4038d38e8dd095b1d892b83efa6fab7ced7b9e004f58b5d1ffbc6c3&#34;</span><span class="p">,</span> <span class="nt">&#34;jti&#34;</span><span class="p">:</span> <span class="s2">&#34;FFG2mtCp0Py1wVdKT8SUIt294yqZ9jAzePXEYkOK&#34;</span><span class="p">,</span> <span class="nt">&#34;email&#34;</span><span class="p">:</span> <span class="s2">&#34;hickey@kinetic-compute.com&#34;</span><span class="p">,</span> <span class="nt">&#34;email_verified&#34;</span><span class="p">:</span> <span class="kc">false</span><span class="p">,</span> <span class="nt">&#34;name&#34;</span><span class="p">:</span> <span class="s2">&#34;Gerard Hickey&#34;</span><span class="p">,</span> <span class="nt">&#34;given_name&#34;</span><span class="p">:</span> <span class="s2">&#34;Gerard Hickey&#34;</span><span class="p">,</span> <span class="nt">&#34;preferred_username&#34;</span><span class="p">:</span> <span class="s2">&#34;hickey&#34;</span><span class="p">,</span> <span class="nt">&#34;nickname&#34;</span><span class="p">:</span> <span class="s2">&#34;hickey&#34;</span><span class="p">,</span> <span class="nt">&#34;groups&#34;</span><span class="p">:</span> <span class="p">[</span> <span class="s2">&#34;authentik Admins&#34;</span><span class="p">,</span> <span class="s2">&#34;NextCloud Admins&#34;</span><span class="p">,</span> <span class="s2">&#34;Grafana Admins&#34;</span><span class="p">,</span> <span class="s2">&#34;Proxmox-Admins&#34;</span><span class="p">,</span> <span class="s2">&#34;Authentik Admin Tools&#34;</span><span class="p">,</span> <span class="s2">&#34;Authentik Backend Services&#34;</span> <span class="p">]</span> <span class="p">}</span> </code></pre><p dir="auto">The claims in the access token is as follows:</p> <pre class="code-block"><code class="chroma language-json display"><span class="p">{</span> <span class="nt">&#34;iss&#34;</span><span class="p">:</span> <span class="s2">&#34;https://auth.wt0f.com/application/o/readeck/&#34;</span><span class="p">,</span> <span class="nt">&#34;sub&#34;</span><span class="p">:</span> <span class="s2">&#34;hickey&#34;</span><span class="p">,</span> <span class="nt">&#34;aud&#34;</span><span class="p">:</span> <span class="s2">&#34;H9uYxz2H6czUt08O0gZroxIAAUYj5hy0lgaM2IRg&#34;</span><span class="p">,</span> <span class="nt">&#34;exp&#34;</span><span class="p">:</span> <span class="mi">1775667590</span><span class="p">,</span> <span class="nt">&#34;iat&#34;</span><span class="p">:</span> <span class="mi">1775667290</span><span class="p">,</span> <span class="nt">&#34;auth_time&#34;</span><span class="p">:</span> <span class="mi">1775666408</span><span class="p">,</span> <span class="nt">&#34;acr&#34;</span><span class="p">:</span> <span class="s2">&#34;goauthentik.io/providers/oauth2/default&#34;</span><span class="p">,</span> <span class="nt">&#34;amr&#34;</span><span class="p">:</span> <span class="p">[</span> <span class="s2">&#34;pwd&#34;</span> <span class="p">],</span> <span class="nt">&#34;sid&#34;</span><span class="p">:</span> <span class="s2">&#34;d582cf9de4038d38e8dd095b1d892b83efa6fab7ced7b9e004f58b5d1ffbc6c3&#34;</span><span class="p">,</span> <span class="nt">&#34;jti&#34;</span><span class="p">:</span> <span class="s2">&#34;mGOpPVJBVBXyz5DTQvyEct54NOcHXX1OFyw398YR&#34;</span><span class="p">,</span> <span class="nt">&#34;email&#34;</span><span class="p">:</span> <span class="s2">&#34;hickey@kinetic-compute.com&#34;</span><span class="p">,</span> <span class="nt">&#34;email_verified&#34;</span><span class="p">:</span> <span class="kc">false</span><span class="p">,</span> <span class="nt">&#34;name&#34;</span><span class="p">:</span> <span class="s2">&#34;Gerard Hickey&#34;</span><span class="p">,</span> <span class="nt">&#34;given_name&#34;</span><span class="p">:</span> <span class="s2">&#34;Gerard Hickey&#34;</span><span class="p">,</span> <span class="nt">&#34;preferred_username&#34;</span><span class="p">:</span> <span class="s2">&#34;hickey&#34;</span><span class="p">,</span> <span class="nt">&#34;nickname&#34;</span><span class="p">:</span> <span class="s2">&#34;hickey&#34;</span><span class="p">,</span> <span class="nt">&#34;groups&#34;</span><span class="p">:</span> <span class="p">[</span> <span class="s2">&#34;authentik Admins&#34;</span><span class="p">,</span> <span class="s2">&#34;NextCloud Admins&#34;</span><span class="p">,</span> <span class="s2">&#34;Grafana Admins&#34;</span><span class="p">,</span> <span class="s2">&#34;Proxmox-Admins&#34;</span><span class="p">,</span> <span class="s2">&#34;Authentik Admin Tools&#34;</span><span class="p">,</span> <span class="s2">&#34;Authentik Backend Services&#34;</span> <span class="p">],</span> <span class="nt">&#34;azp&#34;</span><span class="p">:</span> <span class="s2">&#34;H9uYxz2H6czUt08O0gZroxIAAUYj5hy0lgaM2IRg&#34;</span><span class="p">,</span> <span class="nt">&#34;uid&#34;</span><span class="p">:</span> <span class="s2">&#34;bADM3vh0ws6dp2s5f8fb46fh8i2tawMGToExAL3T&#34;</span><span class="p">,</span> <span class="nt">&#34;scope&#34;</span><span class="p">:</span> <span class="s2">&#34;profile email openid&#34;</span> <span class="p">}</span> </code></pre><p dir="auto">As one can see, both of these tokens are very similar but they are representing different needs for the application. Both JWTs are signed by the private key of the authorization server and gets verified by retrieving the public key from the authorization server.</p> <p dir="auto">At this point the application can continue with the authenticated user as if the user had logged in with another method. At some point in the future the access token will expire and a new access token will need to be retrieved from the authorization server. This aspect I don&#39;t have as much visibility into yet. There are references to a <code>refresh_token</code> that is included in the response that provides the access and ID tokens, but I am not receiving this from my Authentik server. It could be that Authentik does not provide a <code>refresh_token</code> or it is a matter of the configuration I have in the Authentik for the application. I am not sure which. Once I have the user being created/loaded I will be able to experiment and learn what needs to be done to generate new access tokens.</p> One of my first comments described the flow from the user's standpoint which is pretty simple as far as the user interface. For the backend flow it is a bit more in depth and I will to my best to describe it as I understand it.

Once the OIDC authentication flow is initiated by the user pressing the OIDC login button, a random string is generated and sent to the OIDC authentication server. This is usually referred to as the state in the OIDC flow and is really used to validate that the authentication request was initiated from the application is really just a CSRF token. The application upon receiving a login request, will perform an HTTP redirect (GET) to the authentication server with a state, client_id, scope, response_type and request_uri parameters.

The client_id is generated on the authentication server to identify which application is requesting authentication. This is a static token that is stored in the application's configuration. The scope tells the authentication server what claims are requested by the application in the authentication response. This is commonly set to 'openid profile email'. openid is require and the profile requests items such as username and UID and of course email requests the user's email address. response_type is set to 'code' to (I believe) request an access token in the response. Finally the redirect_uri is the URL that the authentication server needs to send the response.

The user will then authenticate to the OIDC authentication server if necessary and the authentication server will return to the application using the redirect_uri which will be called with the state and code parameters. Again the state is used to validate that the request originated from the application so the returned state value needs to be compared to the stored state value when the authentication request was initiated. The code (which depending upon the OIDC implementation could be a string or a JWT) is then exchanged for the access and ID tokens. This is done by calling the OIDC token endpoint with the code value. The response will be a JSON document that contains these tokens and a few other items such as expiration time for the tokens.

The ID token is used to authenticate the user and should be used to validate the user. The access token is used for authorization and provides information as to what the user has access to. In my case I am using Authentik and both the ID and access tokens are very similar, but that may be because I don't have a lot of settings in Authentik that would provide different authorizations.

The payload for the ID token asserts the following claims:

{
  "iss": "https://auth.wt0f.com/application/o/readeck/",
  "sub": "hickey",
  "aud": "H9uYxz2H6czUt08O0gZroxIAAUYj5hy0lgaM2IRg",
  "exp": 1775680621,
  "iat": 1775680321,
  "auth_time": 1775666408,
  "acr": "goauthentik.io/providers/oauth2/default",
  "amr": [
    "pwd"
  ],
  "sid": "d582cf9de4038d38e8dd095b1d892b83efa6fab7ced7b9e004f58b5d1ffbc6c3",
  "jti": "FFG2mtCp0Py1wVdKT8SUIt294yqZ9jAzePXEYkOK",
  "email": "hickey@kinetic-compute.com",
  "email_verified": false,
  "name": "Gerard Hickey",
  "given_name": "Gerard Hickey",
  "preferred_username": "hickey",
  "nickname": "hickey",
  "groups": [
    "authentik Admins",
    "NextCloud Admins",
    "Grafana Admins",
    "Proxmox-Admins",
    "Authentik Admin Tools",
    "Authentik Backend Services"
  ]
}

The claims in the access token is as follows:

{
  "iss": "https://auth.wt0f.com/application/o/readeck/",
  "sub": "hickey",
  "aud": "H9uYxz2H6czUt08O0gZroxIAAUYj5hy0lgaM2IRg",
  "exp": 1775667590,
  "iat": 1775667290,
  "auth_time": 1775666408,
  "acr": "goauthentik.io/providers/oauth2/default",
  "amr": [
    "pwd"
  ],
  "sid": "d582cf9de4038d38e8dd095b1d892b83efa6fab7ced7b9e004f58b5d1ffbc6c3",
  "jti": "mGOpPVJBVBXyz5DTQvyEct54NOcHXX1OFyw398YR",
  "email": "hickey@kinetic-compute.com",
  "email_verified": false,
  "name": "Gerard Hickey",
  "given_name": "Gerard Hickey",
  "preferred_username": "hickey",
  "nickname": "hickey",
  "groups": [
    "authentik Admins",
    "NextCloud Admins",
    "Grafana Admins",
    "Proxmox-Admins",
    "Authentik Admin Tools",
    "Authentik Backend Services"
  ],
  "azp": "H9uYxz2H6czUt08O0gZroxIAAUYj5hy0lgaM2IRg",
  "uid": "bADM3vh0ws6dp2s5f8fb46fh8i2tawMGToExAL3T",
  "scope": "profile email openid"
}

As one can see, both of these tokens are very similar but they are representing different needs for the application. Both JWTs are signed by the private key of the authorization server and gets verified by retrieving the public key from the authorization server.

At this point the application can continue with the authenticated user as if the user had logged in with another method. At some point in the future the access token will expire and a new access token will need to be retrieved from the authorization server. This aspect I don't have as much visibility into yet. There are references to a refresh_token that is included in the response that provides the access and ID tokens, but I am not receiving this from my Authentik server. It could be that Authentik does not provide a refresh_token or it is a matter of the configuration I have in the Authentik for the application. I am not sure which. Once I have the user being created/loaded I will be able to experiment and learn what needs to be done to generate new access tokens.

]]>
hickey 122170533: https://codeberg.org/readeck/readeck/pulls/1182#issuecomment-13033491 Sun, 12 Apr 2026 17:56:56 +0200
ghost_of_cerberus commented on pull request readeck/readeck#1163 https://codeberg.org/readeck/readeck/pulls/1163#issuecomment-13023957 Extend username charset to allow '.' <p dir="auto">No worries, <a href="/olivier" class="mention" rel="nofollow">@olivier</a>. The intended solution appears to be much more robust. Looking forward to testing it out. :)</p> No worries, @olivier. The intended solution appears to be much more robust. Looking forward to testing it out. :)

]]>
ghost_of_cerberus 122093121: https://codeberg.org/readeck/readeck/pulls/1163#issuecomment-13023957 Sun, 12 Apr 2026 13:59:18 +0200
mislav pushed to html-refresh-directive at readeck/readeck https://codeberg.org/readeck/readeck/commit/b167631d2ab897a0dc0b212aac78e8317b968e4d <a href="https://codeberg.org/readeck/readeck/commit/b167631d2ab897a0dc0b212aac78e8317b968e4d">b167631d2ab897a0dc0b212aac78e8317b968e4d</a> Simplify tinymeta b167631d2ab897a0dc0b212aac78e8317b968e4d Simplify tinymeta]]> mislav 121761045: https://codeberg.org/readeck/readeck/commit/b167631d2ab897a0dc0b212aac78e8317b968e4d Sat, 11 Apr 2026 17:33:23 +0200 mislav created pull request readeck/readeck#1185 https://codeberg.org/readeck/readeck/pulls/1185 1185#WIP: support HTML Refresh header# Summary

This extends Drop.Load() with support for HTML Refresh directive specified either via HTTP response header or via <meta> tag.

Fixes #1179

TODO:

  • Is Drop.Load() the correct place to implement this?
  • Should we set the HTTP Referer header when following this type of redirect? (The spec suggests we should.)
  • Set maximum redirect limit to prevent infinite redirect loops
  • Clean up the extension of the tinymeta package

Did you write it yourself?

I didn't use any AI tool to produce this contribution.

Did you add tests?

I added tests to my contribution

Did you run the tests?

The tests finished successfully

]]>
mislav 121723941: https://codeberg.org/readeck/readeck/pulls/1185 Sat, 11 Apr 2026 15:39:20 +0200
mislav pushed to html-refresh-directive at readeck/readeck https://codeberg.org/readeck/readeck/commit/0b66aae149e10e8ad88de73b96948421da20f044 <a href="https://codeberg.org/readeck/readeck/commit/0b66aae149e10e8ad88de73b96948421da20f044">0b66aae149e10e8ad88de73b96948421da20f044</a> WIP support HTML Refresh header 0b66aae149e10e8ad88de73b96948421da20f044 WIP support HTML Refresh header]]> mislav 121721907: https://codeberg.org/readeck/readeck/commit/0b66aae149e10e8ad88de73b96948421da20f044 Sat, 11 Apr 2026 15:33:40 +0200 mislav created branch html-refresh-directive in readeck/readeck https://codeberg.org/readeck/readeck/src/branch/html-refresh-directive mislav 121721883: https://codeberg.org/readeck/readeck/src/branch/html-refresh-directive Sat, 11 Apr 2026 15:33:40 +0200 fabiante commented on issue readeck/readeck#1152 https://codeberg.org/readeck/readeck/issues/1152#issuecomment-12979854 Custom favicon <p dir="auto">I agree with you that even this seemingly small detail is already something that needs care long-term and will increase complexity. My initial response shows that pretty well.</p> I agree with you that even this seemingly small detail is already something that needs care long-term and will increase complexity. My initial response shows that pretty well.

]]>
fabiante 121639818: https://codeberg.org/readeck/readeck/issues/1152#issuecomment-12979854 Sat, 11 Apr 2026 10:20:10 +0200
fabiante commented on issue readeck/readeck#1152 https://codeberg.org/readeck/readeck/issues/1152#issuecomment-12979431 Custom favicon <p dir="auto">I would like to implement this. I have already changed the favicons locally, but that&#39;s just playing around.</p> I would like to implement this. I have already changed the favicons locally, but that's just playing around.

]]>
fabiante 121635006: https://codeberg.org/readeck/readeck/issues/1152#issuecomment-12979431 Sat, 11 Apr 2026 10:06:20 +0200
fabiante commented on issue readeck/readeck#399 https://codeberg.org/readeck/readeck/issues/399#issuecomment-12977631 Set link expiration time <p dir="auto">The <a href="https://readeck.org/en/docs/configuration#bookmarks-section" rel="nofollow">current configuration option (<code>public_share_ttl</code>)</a> allows to change the value of the shared link &#34;globally&#34;.</p> The current configuration option (public_share_ttl) allows to change the value of the shared link "globally".

]]>
fabiante 121620405: https://codeberg.org/readeck/readeck/issues/399#issuecomment-12977631 Sat, 11 Apr 2026 08:56:47 +0200
mislav commented on issue readeck/readeck#1181 https://codeberg.org/readeck/readeck/issues/1181#issuecomment-12949203 Browser Bookmarklet <p dir="auto">Hi, thanks for the detailed feature request. Agreed that Readeck could in theory make the bookmarklet experience better; for example, take a look at the thoughts I shared on the same topic on our community forum: <a href="https://community.readeck.org/d/65-bookmarklet/5" rel="nofollow">https://community.readeck.org/d/65-bookmarklet/5</a></p> <p dir="auto">However, since nearly every browser out there is able to install the Readeck browser extension, which offers a much better and complete experience of sending web pages to Readeck than a bookmarklet ever could, I&#39;m wondering whether there is even a use-case for a bookmarklet over the browser extension? What do you think?</p> Hi, thanks for the detailed feature request. Agreed that Readeck could in theory make the bookmarklet experience better; for example, take a look at the thoughts I shared on the same topic on our community forum: https://community.readeck.org/d/65-bookmarklet/5

However, since nearly every browser out there is able to install the Readeck browser extension, which offers a much better and complete experience of sending web pages to Readeck than a bookmarklet ever could, I'm wondering whether there is even a use-case for a bookmarklet over the browser extension? What do you think?

]]>
mislav 121313340: https://codeberg.org/readeck/readeck/issues/1181#issuecomment-12949203 Fri, 10 Apr 2026 15:29:24 +0200
mislav commented on issue readeck/readeck#1179 https://codeberg.org/readeck/readeck/issues/1179#issuecomment-12914163 Link not working: Substack app share links <p dir="auto"><a href="/olivier" class="mention" rel="nofollow">@olivier</a> Yes: <a href="https://developer.mozilla.org/en-US/docs/Web/HTML/Reference/Elements/meta/http-equiv" rel="nofollow">https://developer.mozilla.org/en-US/docs/Web/HTML/Reference/Elements/meta/http-equiv</a></p> @olivier Yes: https://developer.mozilla.org/en-US/docs/Web/HTML/Reference/Elements/meta/http-equiv

]]>
mislav 120855954: https://codeberg.org/readeck/readeck/issues/1179#issuecomment-12914163 Thu, 09 Apr 2026 13:51:24 +0200
apq commented on issue readeck/readeck#1171 https://codeberg.org/readeck/readeck/issues/1171#issuecomment-12898464 Outdated title for YouTube video <p dir="auto">Same issue happened again, but not with Youtube this time.</p> Same issue happened again, but not with Youtube this time.

]]>
apq 120659592: https://codeberg.org/readeck/readeck/issues/1171#issuecomment-12898464 Thu, 09 Apr 2026 00:13:20 +0200
Minoru commented on issue readeck/readeck#1172 https://codeberg.org/readeck/readeck/issues/1172#issuecomment-12887382 Better interface for automated initial setup (idempotent `readeck user`) <p dir="auto">Cool, thanks! I&#39;ll play with it once it&#39;s released.</p> Cool, thanks! I'll play with it once it's released.

]]>
Minoru 120500049: https://codeberg.org/readeck/readeck/issues/1172#issuecomment-12887382 Wed, 08 Apr 2026 17:59:30 +0200
fabiante commented on pull request readeck/readeck#1144 https://codeberg.org/readeck/readeck/pulls/1144#issuecomment-12884442 pkg/superbus new serialization format <p dir="auto">Hey, Cool change!</p> Hey, Cool change!

]]>
fabiante 120456720: https://codeberg.org/readeck/readeck/pulls/1144#issuecomment-12884442 Wed, 08 Apr 2026 16:15:36 +0200
Pontoporeia commented on pull request readeck/readeck#1183 https://codeberg.org/readeck/readeck/pulls/1183#issuecomment-12878640 WIP:pdf-support <p dir="auto"><a href="/olivier" class="mention" rel="nofollow">@olivier</a>, do you prefer pdfs as which html element:</p> @olivier, do you prefer pdfs as which html element:

]]>
Pontoporeia 120373035: https://codeberg.org/readeck/readeck/pulls/1183#issuecomment-12878640 Wed, 08 Apr 2026 12:31:54 +0200
Pontoporeia created pull request readeck/readeck#1183 https://codeberg.org/readeck/readeck/pulls/1183 1183#WIP:pdf-support# Summary

Support saving pdfs, and displaying them in bookmarks.

Did you write it yourself?

I didn't use any AI tool to produce this contribution.

Did you add tests?

I added tests to my contribution

Did you run the tests?

I didn't run the tests

]]>
Pontoporeia 120371373: https://codeberg.org/readeck/readeck/pulls/1183 Wed, 08 Apr 2026 12:26:57 +0200
mindplay commented on issue readeck/readeck#112 https://codeberg.org/readeck/readeck/issues/112#issuecomment-12872007 ios/android app, web clipper or bookmarklet <p dir="auto">Sometimes that means they read the code, sometimes it means they don&#39;t <span class="emoji" aria-label="smirking face" data-alias="smirk">😏</span></p> Sometimes that means they read the code, sometimes it means they don't 😏

]]>
mindplay 120298398: https://codeberg.org/readeck/readeck/issues/112#issuecomment-12872007 Wed, 08 Apr 2026 07:42:28 +0200
DodoLeDev commented on issue readeck/readeck#112 https://codeberg.org/readeck/readeck/issues/112#issuecomment-12863616 ios/android app, web clipper or bookmarklet <p dir="auto"><a href="/mindplay" class="mention" rel="nofollow">@mindplay</a></p> @mindplay

]]>
DodoLeDev 120195207: https://codeberg.org/readeck/readeck/issues/112#issuecomment-12863616 Tue, 07 Apr 2026 23:22:03 +0200
hickey commented on pull request readeck/readeck#1182 https://codeberg.org/readeck/readeck/pulls/1182#issuecomment-12748359 WIP: Add OIDC authentication to Readeck <p dir="auto">This allows the &#39;configs&#39; structure to be accessed by the template so that the name of the OIDC connection is displayed on the button. I will probably add a helper function to return the connection name so that the entire <code>configs</code> structure is not accessible from the templates. This will also aid in reducing the surface area and not expose any secrets in the <code>configs</code> structure.</p> This allows the 'configs' structure to be accessed by the template so that the name of the OIDC connection is displayed on the button. I will probably add a helper function to return the connection name so that the entire configs structure is not accessible from the templates. This will also aid in reducing the surface area and not expose any secrets in the configs structure.

]]>
hickey 119826660: https://codeberg.org/readeck/readeck/pulls/1182#issuecomment-12748359 Tue, 07 Apr 2026 00:53:01 +0200
hickey commented on pull request readeck/readeck#1182 https://codeberg.org/readeck/readeck/pulls/1182#issuecomment-12748278 WIP: Add OIDC authentication to Readeck <p dir="auto">Removing the required attributes here allows the OIDC button to submit the form. If the username and password are blank when the regular login button is pressed, an error message is produced and displayed to the user.</p> Removing the required attributes here allows the OIDC button to submit the form. If the username and password are blank when the regular login button is pressed, an error message is produced and displayed to the user.

]]>
hickey 119825022: https://codeberg.org/readeck/readeck/pulls/1182#issuecomment-12748278 Tue, 07 Apr 2026 00:48:48 +0200
hickey commented on pull request readeck/readeck#1182 https://codeberg.org/readeck/readeck/pulls/1182#issuecomment-12748230 WIP: Add OIDC authentication to Readeck <p dir="auto">I am not currently sure that this needs to be done. Upon further research, the <code>NewProvider</code> call below does reach out and retrieve the OIDC configuration automatically. I am considering pulling this code and then checking for the necessary claims when the authentication server returns control to Readeck.</p> I am not currently sure that this needs to be done. Upon further research, the NewProvider call below does reach out and retrieve the OIDC configuration automatically. I am considering pulling this code and then checking for the necessary claims when the authentication server returns control to Readeck.

]]>
hickey 119823978: https://codeberg.org/readeck/readeck/pulls/1182#issuecomment-12748230 Tue, 07 Apr 2026 00:45:55 +0200
hickey commented on pull request readeck/readeck#1182 https://codeberg.org/readeck/readeck/pulls/1182#issuecomment-12748152 WIP: Add OIDC authentication to Readeck <p dir="auto">I suspect that as I get to understand the auth <code>Provider</code> this may get absorbed into the <code>Provider</code> interface.</p> I suspect that as I get to understand the auth Provider this may get absorbed into the Provider interface.

]]>
hickey 119823438: https://codeberg.org/readeck/readeck/pulls/1182#issuecomment-12748152 Tue, 07 Apr 2026 00:41:33 +0200
hickey commented on pull request readeck/readeck#1182 https://codeberg.org/readeck/readeck/pulls/1182#issuecomment-12748104 WIP: Add OIDC authentication to Readeck <p dir="auto">The values added to the buttons here allows the <code>login</code> function to determine which button was pressed.</p> The values added to the buttons here allows the login function to determine which button was pressed.

]]>
hickey 119823066: https://codeberg.org/readeck/readeck/pulls/1182#issuecomment-12748104 Tue, 07 Apr 2026 00:39:28 +0200
hickey commented on pull request readeck/readeck#1182 https://codeberg.org/readeck/readeck/pulls/1182#issuecomment-12748044 WIP: Add OIDC authentication to Readeck <p dir="auto">A note or two about the OIDC auth flow and how it is currently integrated into Readeck.</p> A note or two about the OIDC auth flow and how it is currently integrated into Readeck.

]]>
hickey 119822646: https://codeberg.org/readeck/readeck/pulls/1182#issuecomment-12748044 Tue, 07 Apr 2026 00:37:05 +0200
hickey created pull request readeck/readeck#1182 https://codeberg.org/readeck/readeck/pulls/1182 1182#WIP: Add OIDC authentication to Readeck# Summary

This code is an attempt to add the OIDC authentication flow to Readeck to allow external authentication with an OIDC provider. The code contained here in has been developed using an Authentik server and the running code is hosted at https://rd.wt0f.com/. I am happy to add an account on my Authentik server for developers that wish to test or investigate this code. Please leave a comment in this PR requesting an account to be setup.

I have made an effort to make sure that this code confirms to OIDC Core 1.0 specification. This is a new area of knowledge for me (hence why I decided to work on it) and something I was wanting in Readeck.

@mislav, it is my understanding that you have also done some work toward adding OIDC authentication to Readeck, so I welcome any comments or thoughts that you have.

Did you write it yourself?

I didn't use any AI tool to produce this contribution.

Did you add tests?

No response

Did you run the tests?

I didn't run the tests

]]>
hickey 119809224: https://codeberg.org/readeck/readeck/pulls/1182 Tue, 07 Apr 2026 00:04:03 +0200