Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
# <img src="assets/basecamp-badge.svg" height="28" alt="Basecamp"> Basecamp CLI
# <img src="assets/bc5-snowglobe.png" height="28" alt="Basecamp"> Basecamp CLI

`basecamp` is the official command-line interface for Basecamp. Manage projects, todos, messages, and more from your terminal or through AI agents.

Expand Down
4 changes: 0 additions & 4 deletions assets/basecamp-badge.svg

This file was deleted.

Binary file added assets/bc5-snowglobe.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
1 change: 1 addition & 0 deletions internal/auth/basecamp_logo.html
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
<img width="69" src="data:image/png;base64,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" />
12 changes: 9 additions & 3 deletions internal/auth/callback.go
Original file line number Diff line number Diff line change
Expand Up @@ -13,17 +13,23 @@ import (
"time"
)

//go:embed callback.html callback_success.html callback_error.html callback_denied.html callback_invalid.html callback_exchange_failed.html
//go:embed callback.html basecamp_logo.html callback_success.html callback_error.html callback_denied.html callback_invalid.html callback_exchange_failed.html
var callbackFS embed.FS

var callbackTmpl = template.Must(template.ParseFS(callbackFS, "callback.html"))

type callbackData struct{ Content string }

func renderCallback(filename string) string {
content, _ := callbackFS.ReadFile(filename)
// Parse the content page alongside the shared logo partial so its
// {{template "basecamp_logo.html"}} reference resolves, then wrap the
// result in the outer shell.
contentTmpl := template.Must(template.ParseFS(callbackFS, filename, "basecamp_logo.html"))
var content bytes.Buffer
_ = contentTmpl.ExecuteTemplate(&content, filename, nil)

var buf bytes.Buffer
_ = callbackTmpl.Execute(&buf, callbackData{Content: string(content)})
_ = callbackTmpl.Execute(&buf, callbackData{Content: content.String()})
return buf.String()
Comment on lines +29 to 33
}

Expand Down
2 changes: 1 addition & 1 deletion internal/auth/callback.html
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@

body {
align-items: center;
background: #f6f2ef;
background: #f5faf6;
color: #333;
display: flex;
font-family: -apple-system, system-ui, BlinkMacSystemFont, "Segoe UI", Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol";
Expand Down
5 changes: 1 addition & 4 deletions internal/auth/callback_denied.html
Original file line number Diff line number Diff line change
@@ -1,8 +1,5 @@
<div class="logo">
<svg width="69" height="69" viewBox="0 0 69 69" fill="none" xmlns="http://www.w3.org/2000/svg">
<circle cx="34.07" cy="34.07" r="34.07" fill="#FFE200"/>
<path d="M34.26 51.82C27.2241 51.9201 20.4903 48.9654 15.8 43.72C15.3147 43.1745 15.1652 42.4079 15.41 41.72C16.67 38.31 20.08 30.4 24.46 30.37C26.71 30.37 28.31 32.11 29.64 33.51C30.0795 33.997 30.5506 34.4547 31.05 34.88C32.05 33.88 34.05 30.53 35.63 27.17C36.0967 26.1648 37.2898 25.7283 38.295 26.195C39.3002 26.6617 39.7367 27.8548 39.27 28.86C34.54 39 32 39 31.2 39C29.35 39 28.02 37.59 26.73 36.22C26.15 35.61 24.95 34.34 24.48 34.34V34.34C23.48 34.51 21.22 38.04 19.62 41.91C23.4848 45.8006 28.7775 47.9336 34.26 47.81C42.19 47.81 48.11 45.66 50.66 41.87C49.78 31.81 44.24 18.15 34.26 18.15C25.82 18.15 19.46 24.03 15.36 35.63C14.9927 36.6738 13.8488 37.2223 12.805 36.855C11.7612 36.4877 11.2127 35.3438 11.58 34.3C16.31 20.93 23.94 14.15 34.26 14.15C47.75 14.15 53.96 31.38 54.71 42.24C54.7368 42.6341 54.6464 43.0273 54.45 43.37C51.31 48.82 44.14 51.82 34.26 51.82Z" fill="#1D2D35"/>
</svg>
{{template "basecamp_logo.html"}}
<div class="badge badge-warning">
<svg fill="none" viewBox="0 0 24 24" stroke="#fff" stroke-width="3">
<path stroke-linecap="round" stroke-linejoin="round" d="M12 6v6m0 4h.01"/>
Expand Down
5 changes: 1 addition & 4 deletions internal/auth/callback_error.html
Original file line number Diff line number Diff line change
@@ -1,8 +1,5 @@
<div class="logo">
<svg width="69" height="69" viewBox="0 0 69 69" fill="none" xmlns="http://www.w3.org/2000/svg">
<circle cx="34.07" cy="34.07" r="34.07" fill="#FFE200"/>
<path d="M34.26 51.82C27.2241 51.9201 20.4903 48.9654 15.8 43.72C15.3147 43.1745 15.1652 42.4079 15.41 41.72C16.67 38.31 20.08 30.4 24.46 30.37C26.71 30.37 28.31 32.11 29.64 33.51C30.0795 33.997 30.5506 34.4547 31.05 34.88C32.05 33.88 34.05 30.53 35.63 27.17C36.0967 26.1648 37.2898 25.7283 38.295 26.195C39.3002 26.6617 39.7367 27.8548 39.27 28.86C34.54 39 32 39 31.2 39C29.35 39 28.02 37.59 26.73 36.22C26.15 35.61 24.95 34.34 24.48 34.34V34.34C23.48 34.51 21.22 38.04 19.62 41.91C23.4848 45.8006 28.7775 47.9336 34.26 47.81C42.19 47.81 48.11 45.66 50.66 41.87C49.78 31.81 44.24 18.15 34.26 18.15C25.82 18.15 19.46 24.03 15.36 35.63C14.9927 36.6738 13.8488 37.2223 12.805 36.855C11.7612 36.4877 11.2127 35.3438 11.58 34.3C16.31 20.93 23.94 14.15 34.26 14.15C47.75 14.15 53.96 31.38 54.71 42.24C54.7368 42.6341 54.6464 43.0273 54.45 43.37C51.31 48.82 44.14 51.82 34.26 51.82Z" fill="#1D2D35"/>
</svg>
{{template "basecamp_logo.html"}}
<div class="badge badge-error">
<svg fill="none" viewBox="0 0 24 24" stroke="#fff" stroke-width="3">
<path stroke-linecap="round" stroke-linejoin="round" d="M6 18L18 6M6 6l12 12"/>
Expand Down
5 changes: 1 addition & 4 deletions internal/auth/callback_exchange_failed.html
Original file line number Diff line number Diff line change
@@ -1,8 +1,5 @@
<div class="logo">
<svg width="69" height="69" viewBox="0 0 69 69" fill="none" xmlns="http://www.w3.org/2000/svg">
<circle cx="34.07" cy="34.07" r="34.07" fill="#FFE200"/>
<path d="M34.26 51.82C27.2241 51.9201 20.4903 48.9654 15.8 43.72C15.3147 43.1745 15.1652 42.4079 15.41 41.72C16.67 38.31 20.08 30.4 24.46 30.37C26.71 30.37 28.31 32.11 29.64 33.51C30.0795 33.997 30.5506 34.4547 31.05 34.88C32.05 33.88 34.05 30.53 35.63 27.17C36.0967 26.1648 37.2898 25.7283 38.295 26.195C39.3002 26.6617 39.7367 27.8548 39.27 28.86C34.54 39 32 39 31.2 39C29.35 39 28.02 37.59 26.73 36.22C26.15 35.61 24.95 34.34 24.48 34.34V34.34C23.48 34.51 21.22 38.04 19.62 41.91C23.4848 45.8006 28.7775 47.9336 34.26 47.81C42.19 47.81 48.11 45.66 50.66 41.87C49.78 31.81 44.24 18.15 34.26 18.15C25.82 18.15 19.46 24.03 15.36 35.63C14.9927 36.6738 13.8488 37.2223 12.805 36.855C11.7612 36.4877 11.2127 35.3438 11.58 34.3C16.31 20.93 23.94 14.15 34.26 14.15C47.75 14.15 53.96 31.38 54.71 42.24C54.7368 42.6341 54.6464 43.0273 54.45 43.37C51.31 48.82 44.14 51.82 34.26 51.82Z" fill="#1D2D35"/>
</svg>
{{template "basecamp_logo.html"}}
<div class="badge badge-error">
<svg fill="none" viewBox="0 0 24 24" stroke="#fff" stroke-width="3">
<path stroke-linecap="round" stroke-linejoin="round" d="M6 18L18 6M6 6l12 12"/>
Expand Down
5 changes: 1 addition & 4 deletions internal/auth/callback_invalid.html
Original file line number Diff line number Diff line change
@@ -1,8 +1,5 @@
<div class="logo">
<svg width="69" height="69" viewBox="0 0 69 69" fill="none" xmlns="http://www.w3.org/2000/svg">
<circle cx="34.07" cy="34.07" r="34.07" fill="#FFE200"/>
<path d="M34.26 51.82C27.2241 51.9201 20.4903 48.9654 15.8 43.72C15.3147 43.1745 15.1652 42.4079 15.41 41.72C16.67 38.31 20.08 30.4 24.46 30.37C26.71 30.37 28.31 32.11 29.64 33.51C30.0795 33.997 30.5506 34.4547 31.05 34.88C32.05 33.88 34.05 30.53 35.63 27.17C36.0967 26.1648 37.2898 25.7283 38.295 26.195C39.3002 26.6617 39.7367 27.8548 39.27 28.86C34.54 39 32 39 31.2 39C29.35 39 28.02 37.59 26.73 36.22C26.15 35.61 24.95 34.34 24.48 34.34V34.34C23.48 34.51 21.22 38.04 19.62 41.91C23.4848 45.8006 28.7775 47.9336 34.26 47.81C42.19 47.81 48.11 45.66 50.66 41.87C49.78 31.81 44.24 18.15 34.26 18.15C25.82 18.15 19.46 24.03 15.36 35.63C14.9927 36.6738 13.8488 37.2223 12.805 36.855C11.7612 36.4877 11.2127 35.3438 11.58 34.3C16.31 20.93 23.94 14.15 34.26 14.15C47.75 14.15 53.96 31.38 54.71 42.24C54.7368 42.6341 54.6464 43.0273 54.45 43.37C51.31 48.82 44.14 51.82 34.26 51.82Z" fill="#1D2D35"/>
</svg>
{{template "basecamp_logo.html"}}
<div class="badge badge-error">
<svg fill="none" viewBox="0 0 24 24" stroke="#fff" stroke-width="3">
<path stroke-linecap="round" stroke-linejoin="round" d="M6 18L18 6M6 6l12 12"/>
Expand Down
5 changes: 1 addition & 4 deletions internal/auth/callback_success.html
Original file line number Diff line number Diff line change
@@ -1,8 +1,5 @@
<div class="logo">
<svg width="69" height="69" viewBox="0 0 69 69" fill="none" xmlns="http://www.w3.org/2000/svg">
<circle cx="34.07" cy="34.07" r="34.07" fill="#FFE200"/>
<path d="M34.26 51.82C27.2241 51.9201 20.4903 48.9654 15.8 43.72C15.3147 43.1745 15.1652 42.4079 15.41 41.72C16.67 38.31 20.08 30.4 24.46 30.37C26.71 30.37 28.31 32.11 29.64 33.51C30.0795 33.997 30.5506 34.4547 31.05 34.88C32.05 33.88 34.05 30.53 35.63 27.17C36.0967 26.1648 37.2898 25.7283 38.295 26.195C39.3002 26.6617 39.7367 27.8548 39.27 28.86C34.54 39 32 39 31.2 39C29.35 39 28.02 37.59 26.73 36.22C26.15 35.61 24.95 34.34 24.48 34.34V34.34C23.48 34.51 21.22 38.04 19.62 41.91C23.4848 45.8006 28.7775 47.9336 34.26 47.81C42.19 47.81 48.11 45.66 50.66 41.87C49.78 31.81 44.24 18.15 34.26 18.15C25.82 18.15 19.46 24.03 15.36 35.63C14.9927 36.6738 13.8488 37.2223 12.805 36.855C11.7612 36.4877 11.2127 35.3438 11.58 34.3C16.31 20.93 23.94 14.15 34.26 14.15C47.75 14.15 53.96 31.38 54.71 42.24C54.7368 42.6341 54.6464 43.0273 54.45 43.37C51.31 48.82 44.14 51.82 34.26 51.82Z" fill="#1D2D35"/>
</svg>
{{template "basecamp_logo.html"}}
<div class="badge badge-success">
<svg fill="none" viewBox="0 0 24 24" stroke="#fff" stroke-width="3">
<path stroke-linecap="round" stroke-linejoin="round" d="M5 13l4 4L19 7"/>
Expand Down