Browse Source

Add new Anubis mascot (#204)

* Add new Anubis mascot

Signed-off-by: Xe Iaso <me@xeiaso.net>

* web: add artist credit to footer

Signed-off-by: Xe Iaso <me@xeiaso.net>

---------

Signed-off-by: Xe Iaso <me@xeiaso.net>
Xe Iaso 2 tháng trước cách đây
mục cha
commit
b14aa6a0c3

+ 1 - 0
docs/docs/CHANGELOG.md

@@ -11,6 +11,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
 
 ## [Unreleased]
 
+- The placeholder Anubis mascot has been replaced with a design by [CELPHASE](https://bsky.app/profile/celphase.bsky.social).
 - Allow iMessage's link preview fetcher through Anubis by default.
 - Added a periodic cleanup routine for the decaymap that removes expired entries, ensuring stale data is properly pruned.
 - Added a no-store Cache-Control header to the challenge page

+ 1 - 1
docs/docusaurus.config.ts

@@ -76,7 +76,7 @@ const config: Config = {
       title: 'Anubis',
       logo: {
         alt: 'A happy jackal woman with brown hair and red eyes',
-        src: 'img/happy.webp',
+        src: 'img/favicon.webp',
       },
       items: [
         {

BIN
docs/static/img/android-chrome-512x512.png


BIN
docs/static/img/favicon.ico


BIN
docs/static/img/favicon.webp


BIN
docs/static/img/happy.webp


+ 4 - 4
web/index.templ

@@ -66,6 +66,7 @@ templ base(title string, body templ.Component) {
 	href="https://techaro.lol"
 >Techaro</a>. Made with ❤️ in 🇨🇦.
 						</p>
+						<p>Mascot design by <a href="https://bsky.app/profile/celphase.bsky.social">CELPHASE</a>.</p>
 					</center>
 				</footer>
 			</main>
@@ -114,7 +115,7 @@ templ errorPage(message string) {
 		<img
 			id="image"
 			style="width:100%;max-width:256px;"
-			src={ "/.within.website/x/cmd/anubis/static/img/sad.webp?cacheBuster=" + anubis.Version }
+			src={ "/.within.website/x/cmd/anubis/static/img/reject.webp?cacheBuster=" + anubis.Version }
 		/>
 		<p>{ message }.</p>
 		<button onClick="window.location.reload();">Try again</button>
@@ -137,8 +138,7 @@ templ bench() {
 					<th style="width:4rem">Iters B</th>
 				</tr>
 			</thead>
-			<tbody id="results" style="padding-top:0.25rem;display:grid;grid-template-columns:subgrid;grid-auto-rows:min-content;grid-column:1/-1;row-gap:0.25rem;overflow-y:auto;font-variant-numeric:tabular-nums">
-			</tbody>
+			<tbody id="results" style="padding-top:0.25rem;display:grid;grid-template-columns:subgrid;grid-auto-rows:min-content;grid-column:1/-1;row-gap:0.25rem;overflow-y:auto;font-variant-numeric:tabular-nums"></tbody>
 		</table>
 		<div class="centered-div">
 			<img
@@ -167,7 +167,7 @@ templ bench() {
 		<div style="margin-top:0.25rem;display:flex;justify-content:end">
 			<label for="compare-select" style="margin-right:0.5rem">Compare:</label>
 			<select id="compare-select" name="compare">
-			  <option value="NONE">-</option>
+				<option value="NONE">-</option>
 			</select>
 		</div>
 	</form>

+ 7 - 7
web/index_templ.go

@@ -89,7 +89,7 @@ func base(title string, body templ.Component) templ.Component {
 		if templ_7745c5c3_Err != nil {
 			return templ_7745c5c3_Err
 		}
-		templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 6, "<footer><center><p>Protected by <a href=\"https://github.com/TecharoHQ/anubis\">Anubis</a> from <a href=\"https://techaro.lol\">Techaro</a>. Made with ❤️ in 🇨🇦.</p></center></footer></main></body></html>")
+		templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 6, "<footer><center><p>Protected by <a href=\"https://github.com/TecharoHQ/anubis\">Anubis</a> from <a href=\"https://techaro.lol\">Techaro</a>. Made with ❤️ in 🇨🇦.</p><p>Mascot design by <a href=\"https://bsky.app/profile/celphase.bsky.social\">CELPHASE</a>.</p></center></footer></main></body></html>")
 		if templ_7745c5c3_Err != nil {
 			return templ_7745c5c3_Err
 		}
@@ -126,7 +126,7 @@ func index() templ.Component {
 		templ_7745c5c3_Var6, templ_7745c5c3_Err = templ.JoinStringErrs("/.within.website/x/cmd/anubis/static/img/pensive.webp?cacheBuster=" +
 			anubis.Version)
 		if templ_7745c5c3_Err != nil {
-			return templ.Error{Err: templ_7745c5c3_Err, FileName: `index.templ`, Line: 82, Col: 18}
+			return templ.Error{Err: templ_7745c5c3_Err, FileName: `index.templ`, Line: 83, Col: 18}
 		}
 		_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var6))
 		if templ_7745c5c3_Err != nil {
@@ -140,7 +140,7 @@ func index() templ.Component {
 		templ_7745c5c3_Var7, templ_7745c5c3_Err = templ.JoinStringErrs("/.within.website/x/cmd/anubis/static/img/happy.webp?cacheBuster=" +
 			anubis.Version)
 		if templ_7745c5c3_Err != nil {
-			return templ.Error{Err: templ_7745c5c3_Err, FileName: `index.templ`, Line: 88, Col: 18}
+			return templ.Error{Err: templ_7745c5c3_Err, FileName: `index.templ`, Line: 89, Col: 18}
 		}
 		_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var7))
 		if templ_7745c5c3_Err != nil {
@@ -153,7 +153,7 @@ func index() templ.Component {
 		var templ_7745c5c3_Var8 string
 		templ_7745c5c3_Var8, templ_7745c5c3_Err = templ.JoinStringErrs("/.within.website/x/cmd/anubis/static/js/main.mjs?cacheBuster=" + anubis.Version)
 		if templ_7745c5c3_Err != nil {
-			return templ.Error{Err: templ_7745c5c3_Err, FileName: `index.templ`, Line: 91, Col: 116}
+			return templ.Error{Err: templ_7745c5c3_Err, FileName: `index.templ`, Line: 92, Col: 116}
 		}
 		_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var8))
 		if templ_7745c5c3_Err != nil {
@@ -193,9 +193,9 @@ func errorPage(message string) templ.Component {
 			return templ_7745c5c3_Err
 		}
 		var templ_7745c5c3_Var10 string
-		templ_7745c5c3_Var10, templ_7745c5c3_Err = templ.JoinStringErrs("/.within.website/x/cmd/anubis/static/img/sad.webp?cacheBuster=" + anubis.Version)
+		templ_7745c5c3_Var10, templ_7745c5c3_Err = templ.JoinStringErrs("/.within.website/x/cmd/anubis/static/img/reject.webp?cacheBuster=" + anubis.Version)
 		if templ_7745c5c3_Err != nil {
-			return templ.Error{Err: templ_7745c5c3_Err, FileName: `index.templ`, Line: 117, Col: 90}
+			return templ.Error{Err: templ_7745c5c3_Err, FileName: `index.templ`, Line: 118, Col: 93}
 		}
 		_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var10))
 		if templ_7745c5c3_Err != nil {
@@ -208,7 +208,7 @@ func errorPage(message string) templ.Component {
 		var templ_7745c5c3_Var11 string
 		templ_7745c5c3_Var11, templ_7745c5c3_Err = templ.JoinStringErrs(message)
 		if templ_7745c5c3_Err != nil {
-			return templ.Error{Err: templ_7745c5c3_Err, FileName: `index.templ`, Line: 119, Col: 14}
+			return templ.Error{Err: templ_7745c5c3_Err, FileName: `index.templ`, Line: 120, Col: 14}
 		}
 		_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var11))
 		if templ_7745c5c3_Err != nil {

+ 14 - 14
web/js/main.mjs

@@ -91,7 +91,7 @@ function showContinueBar(hash, nonce, t0, t1) {
       }
     });
   }
-  
+
   const ohNoes = ({ titleMsg, statusMsg, imageSrc }) => {
     title.innerHTML = titleMsg;
     status.innerHTML = statusMsg;
@@ -103,7 +103,7 @@ function showContinueBar(hash, nonce, t0, t1) {
     ohNoes({
       titleMsg: "Your context is not secure!",
       statusMsg: `Try connecting over HTTPS or let the admin know to set up HTTPS. For more information, see <a href="https://developer.mozilla.org/en-US/docs/Web/Security/Secure_Contexts#when_is_a_context_considered_secure">MDN</a>.`,
-      imageSrc: imageURL("sad", anubisVersion),
+      imageSrc: imageURL("reject", anubisVersion),
     });
     return;
   }
@@ -116,7 +116,7 @@ function showContinueBar(hash, nonce, t0, t1) {
   // if (!videoWorks) {
   //   title.innerHTML = "Oh no!";
   //   status.innerHTML = "Checks failed. Please check your browser's settings and try again.";
-  //   image.src = imageURL("sad");
+  //   image.src = imageURL("reject");
   //   progress.style.display = "none";
   //   return;
   // }
@@ -128,7 +128,7 @@ function showContinueBar(hash, nonce, t0, t1) {
       ohNoes({
         titleMsg: `Missing feature ${name}`,
         statusMsg: msg,
-        imageSrc: imageURL("sad", anubisVersion),
+        imageSrc: imageURL("reject", anubisVersion),
       });
     }
   }
@@ -142,7 +142,7 @@ function showContinueBar(hash, nonce, t0, t1) {
       ohNoes({
         titleMsg: "Internal error!",
         statusMsg: `Failed to fetch challenge config: ${err.message}`,
-        imageSrc: imageURL("sad", anubisVersion),
+        imageSrc: imageURL("reject", anubisVersion),
       });
       throw err;
     });
@@ -152,14 +152,14 @@ function showContinueBar(hash, nonce, t0, t1) {
     ohNoes({
       titleMsg: "Challenge error!",
       statusMsg: `Failed to resolve check algorithm. You may want to reload the page.`,
-      imageSrc: imageURL("sad", anubisVersion),
+      imageSrc: imageURL("reject", anubisVersion),
     });
     return;
   }
 
   status.innerHTML = `Calculating...<br/>Difficulty: ${rules.report_as}, `;
   progress.style.display = "inline-block";
-  
+
   // the whole text, including "Speed:", as a single node, because some browsers
   // (Firefox mobile) present screen readers with each node as a separate piece
   // of text.
@@ -188,7 +188,7 @@ function showContinueBar(hash, nonce, t0, t1) {
         // apply a polynomial ease-out function to move faster in the beginning
         // and then slow down as things get increasingly unlikely. quadratic felt
         // the best in testing, but this may need adjustment in the future.
-        
+
         const probability = Math.pow(1 - likelihood, iters);
         const distance = (1 - Math.pow(probability, 2)) * 100;
         progress["aria-valuenow"] = distance;
@@ -215,7 +215,7 @@ function showContinueBar(hash, nonce, t0, t1) {
 
     if (userReadDetails) {
       const container = document.getElementById("progress");
-    
+
       // Style progress bar as a continue button
       container.style.display = "flex";
       container.style.alignItems = "center";
@@ -231,7 +231,7 @@ function showContinueBar(hash, nonce, t0, t1) {
       container.style.width = "min(20rem, 90%)";
       container.style.margin = "1rem auto 2rem";
       container.innerHTML = "I've finished reading, continue →";
-    
+
       function onDetailsExpand() {
         const redir = window.location.href;
         window.location.replace(
@@ -243,10 +243,10 @@ function showContinueBar(hash, nonce, t0, t1) {
           }),
         );
       }
-    
+
       container.onclick = onDetailsExpand;
       setTimeout(onDetailsExpand, 30000);
-    
+
     } else {
       setTimeout(() => {
         const redir = window.location.href;
@@ -260,12 +260,12 @@ function showContinueBar(hash, nonce, t0, t1) {
         );
       }, 250);
     }
-    
+
   } catch (err) {
     ohNoes({
       titleMsg: "Calculation error!",
       statusMsg: `Failed to calculate challenge: ${err.message}`,
-      imageSrc: imageURL("sad", anubisVersion),
+      imageSrc: imageURL("reject", anubisVersion),
     });
   }
 })();

BIN
web/static/img/happy.webp


BIN
web/static/img/pensive.webp


BIN
web/static/img/reject.webp


BIN
web/static/img/sad.webp