decentralized and customizable links page on top of atproto

add favicons

+2 -2
Makefile
··· 1 1 .PHONY: debug 2 2 debug: 3 - flask --app 'src.main' run --debug -h '0.0.0.0' -p 8080 3 + uv run -- flask --app 'src.main' run --debug -h '0.0.0.0' -p 8080 4 4 5 5 .PHONY: run 6 6 run: 7 - gunicorn --bind ':$(PORT)' 'src.main:app' 7 + uv run -- gunicorn --bind ':$(PORT)' 'src.main:app'
+7 -2
src/oauth.py
··· 190 190 "token_endpoint_auth_method": "private_key_jwt", 191 191 "token_endpoint_auth_signing_alg": "ES256", 192 192 "jwks_uri": f"https://{host}{jwks_endpoint}", 193 + # optional 194 + "client_name": "ligo.at", 195 + "client_uri": f"https://{host}", 196 + "logo_uri": f"https://{host}{url_for('static', filename='favicon-48.png')}", 197 + "tos_uri": f"https://{host}{url_for('page_terms')}", 193 198 } 194 199 ) 195 200 ··· 223 228 def get_auth_request(session: SessionMixin) -> OAuthAuthRequest | None: 224 229 try: 225 230 return OAuthAuthRequest(**session["oauth_auth_request"]) 226 - except TypeError as exception: 231 + except (KeyError, TypeError) as exception: 227 232 current_app.logger.debug("unable to load oauth_auth_request") 228 233 current_app.logger.debug(exception) 229 234 return None ··· 232 237 def get_auth_session(session: SessionMixin) -> OAuthSession | None: 233 238 try: 234 239 return OAuthSession(**session["oauth_auth_session"]) 235 - except TypeError as exception: 240 + except (KeyError, TypeError) as exception: 236 241 current_app.logger.debug("unable to load oauth_auth_session") 237 242 current_app.logger.debug(exception) 238 243 return None
src/static/favicon-16.png

This is a binary file and will not be displayed.

src/static/favicon-32.png

This is a binary file and will not be displayed.

src/static/favicon-48.png

This is a binary file and will not be displayed.

+3
src/templates/editor.html
··· 6 6 <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1" /> 7 7 <link rel="stylesheet" href="{{ url_for('static', filename='inter.css') }}" /> 8 8 <link rel="stylesheet" href="{{ url_for('static', filename='style.css') }}" /> 9 + <link rel="icon" type="image/png" sizes="16x16" href="{{ url_for('static', filename='favicon-16.png') }}" /> 10 + <link rel="icon" type="image/png" sizes="32x32" href="{{ url_for('static', filename='favicon-32.png') }}" /> 11 + <link rel="icon" type="image/png" sizes="48x48" href="{{ url_for('static', filename='favicon-48.png') }}" /> 9 12 <script defer src="{{ url_for('static', filename='alpine.sort.3.15.0.min.js') }}"></script> 10 13 <script defer src="{{ url_for('static', filename='alpine.3.15.0.min.js') }}"></script> 11 14 </head>
+3
src/templates/index.html
··· 6 6 <meta name="viewport" content="width=device-width, initial-scale=1" /> 7 7 <link rel="stylesheet" href="{{ url_for('static', filename='inter.css') }}" /> 8 8 <link rel="stylesheet" href="{{ url_for('static', filename='style.css') }}" /> 9 + <link rel="icon" type="image/png" sizes="16x16" href="{{ url_for('static', filename='favicon-16.png') }}" /> 10 + <link rel="icon" type="image/png" sizes="32x32" href="{{ url_for('static', filename='favicon-32.png') }}" /> 11 + <link rel="icon" type="image/png" sizes="48x48" href="{{ url_for('static', filename='favicon-48.png') }}" /> 9 12 </head> 10 13 <body> 11 14 <div class="wrapper home">
+3
src/templates/login.html
··· 6 6 <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1" /> 7 7 <link rel="stylesheet" href="{{ url_for('static', filename='inter.css') }}" /> 8 8 <link rel="stylesheet" href="{{ url_for('static', filename='style.css') }}" /> 9 + <link rel="icon" type="image/png" sizes="16x16" href="{{ url_for('static', filename='favicon-16.png') }}" /> 10 + <link rel="icon" type="image/png" sizes="32x32" href="{{ url_for('static', filename='favicon-32.png') }}" /> 11 + <link rel="icon" type="image/png" sizes="48x48" href="{{ url_for('static', filename='favicon-48.png') }}" /> 9 12 </head> 10 13 <body> 11 14 <div class="wrapper login">
+3
src/templates/profile.html
··· 7 7 <base target="_blank" /> 8 8 <link rel="stylesheet" href="{{ url_for('static', filename='inter.css') }}" /> 9 9 <link rel="stylesheet" href="{{ url_for('static', filename='style.css') }}" /> 10 + <link rel="icon" type="image/png" sizes="16x16" href="{{ url_for('static', filename='favicon-16.png') }}" /> 11 + <link rel="icon" type="image/png" sizes="32x32" href="{{ url_for('static', filename='favicon-32.png') }}" /> 12 + <link rel="icon" type="image/png" sizes="48x48" href="{{ url_for('static', filename='favicon-48.png') }}" /> 10 13 </head> 11 14 <body> 12 15 <div class="wrapper profile">