Rename project from inventree to vibetree
- go.mod module path (and every internal/vibetree import) inventree -> vibetree - cmd/inventree/ -> cmd/vibetree/, deploy/inventree.service -> vibetree.service - Default site name (seed data + the siteName template func's fallback) is now "vibetree", shown in the navbar, <title>, and login page - Session cookie renamed inventree_session -> vibetree_session - Default DB path data/inventree.db -> data/vibetree.db, CLI/log text, Dockerfile, docker-compose.yml, README, .gitignore/.dockerignore all updated to match Existing installs: this changes the session cookie name (users will be signed out once) and the default DB filename (point -db at your existing file, or rename it, to keep your data).
This commit is contained in:
@@ -11,9 +11,9 @@ import (
|
||||
"strings"
|
||||
"time"
|
||||
|
||||
"inventree/internal/folders"
|
||||
"inventree/internal/models"
|
||||
"inventree/internal/settings"
|
||||
"vibetree/internal/folders"
|
||||
"vibetree/internal/models"
|
||||
"vibetree/internal/settings"
|
||||
)
|
||||
|
||||
var (
|
||||
|
||||
@@ -8,11 +8,11 @@ import (
|
||||
"strings"
|
||||
"testing"
|
||||
|
||||
"inventree/internal/assets"
|
||||
"inventree/internal/database"
|
||||
"inventree/internal/folders"
|
||||
"inventree/internal/models"
|
||||
"inventree/internal/settings"
|
||||
"vibetree/internal/assets"
|
||||
"vibetree/internal/database"
|
||||
"vibetree/internal/folders"
|
||||
"vibetree/internal/models"
|
||||
"vibetree/internal/settings"
|
||||
)
|
||||
|
||||
// Seed data from migrations/0002_seed.sql gives us stable IDs to rely on:
|
||||
|
||||
@@ -9,7 +9,7 @@ import (
|
||||
"strconv"
|
||||
"strings"
|
||||
|
||||
"inventree/internal/models"
|
||||
"vibetree/internal/models"
|
||||
)
|
||||
|
||||
const (
|
||||
|
||||
@@ -4,9 +4,9 @@ import (
|
||||
"context"
|
||||
"testing"
|
||||
|
||||
"inventree/internal/assets"
|
||||
"inventree/internal/itemtypes"
|
||||
"inventree/internal/models"
|
||||
"vibetree/internal/assets"
|
||||
"vibetree/internal/itemtypes"
|
||||
"vibetree/internal/models"
|
||||
)
|
||||
|
||||
func TestQuantityFixedAtOneForUniqueTypes(t *testing.T) {
|
||||
|
||||
@@ -3,7 +3,7 @@ package assets
|
||||
import (
|
||||
"context"
|
||||
|
||||
"inventree/internal/models"
|
||||
"vibetree/internal/models"
|
||||
)
|
||||
|
||||
// Search performs a global, case-insensitive substring search across asset
|
||||
|
||||
@@ -10,12 +10,12 @@ import (
|
||||
"net/http"
|
||||
"time"
|
||||
|
||||
"inventree/internal/models"
|
||||
"inventree/internal/users"
|
||||
"vibetree/internal/models"
|
||||
"vibetree/internal/users"
|
||||
)
|
||||
|
||||
const (
|
||||
CookieName = "inventree_session"
|
||||
CookieName = "vibetree_session"
|
||||
SessionTTL = 7 * 24 * time.Hour
|
||||
contextUserK = ctxKey("current_user")
|
||||
)
|
||||
|
||||
@@ -6,9 +6,9 @@ import (
|
||||
"path/filepath"
|
||||
"testing"
|
||||
|
||||
"inventree/internal/auth"
|
||||
"inventree/internal/database"
|
||||
"inventree/internal/users"
|
||||
"vibetree/internal/auth"
|
||||
"vibetree/internal/database"
|
||||
"vibetree/internal/users"
|
||||
)
|
||||
|
||||
func testDB(t *testing.T) *sql.DB {
|
||||
|
||||
@@ -4,7 +4,7 @@ import (
|
||||
"path/filepath"
|
||||
"testing"
|
||||
|
||||
"inventree/internal/database"
|
||||
"vibetree/internal/database"
|
||||
)
|
||||
|
||||
func TestOpenSetsPragmasAndMigrates(t *testing.T) {
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
-- Initial schema for inventree
|
||||
-- Initial schema for vibetree
|
||||
|
||||
CREATE TABLE users (
|
||||
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
||||
|
||||
@@ -14,7 +14,7 @@ INSERT INTO settings (key, value) VALUES
|
||||
('asset_id_prefix', 'IT-'),
|
||||
('asset_id_padding', '6'),
|
||||
('asset_id_seq', '0'),
|
||||
('site_name', 'inventree');
|
||||
('site_name', 'vibetree');
|
||||
|
||||
INSERT INTO item_types (name, description, icon, enabled, sort_order) VALUES
|
||||
('Laptop', 'Portable computer', 'bi-laptop', 1, 1),
|
||||
|
||||
@@ -8,7 +8,7 @@ import (
|
||||
"fmt"
|
||||
"time"
|
||||
|
||||
"inventree/internal/models"
|
||||
"vibetree/internal/models"
|
||||
)
|
||||
|
||||
var (
|
||||
|
||||
@@ -6,9 +6,9 @@ import (
|
||||
"path/filepath"
|
||||
"testing"
|
||||
|
||||
"inventree/internal/database"
|
||||
"inventree/internal/folders"
|
||||
"inventree/internal/models"
|
||||
"vibetree/internal/database"
|
||||
"vibetree/internal/folders"
|
||||
"vibetree/internal/models"
|
||||
)
|
||||
|
||||
func testDB(t *testing.T) *sql.DB {
|
||||
|
||||
@@ -9,7 +9,7 @@ import (
|
||||
"strings"
|
||||
"time"
|
||||
|
||||
"inventree/internal/models"
|
||||
"vibetree/internal/models"
|
||||
)
|
||||
|
||||
var (
|
||||
|
||||
@@ -6,9 +6,9 @@ import (
|
||||
"path/filepath"
|
||||
"testing"
|
||||
|
||||
"inventree/internal/database"
|
||||
"inventree/internal/itemtypes"
|
||||
"inventree/internal/models"
|
||||
"vibetree/internal/database"
|
||||
"vibetree/internal/itemtypes"
|
||||
"vibetree/internal/models"
|
||||
)
|
||||
|
||||
func testDB(t *testing.T) *sql.DB {
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
// Package models defines the core domain types shared across inventree.
|
||||
// Package models defines the core domain types shared across vibetree.
|
||||
package models
|
||||
|
||||
import "time"
|
||||
|
||||
@@ -7,7 +7,7 @@ import (
|
||||
"io"
|
||||
"strings"
|
||||
|
||||
"inventree/internal/models"
|
||||
"vibetree/internal/models"
|
||||
)
|
||||
|
||||
type ImportResult struct {
|
||||
|
||||
@@ -7,8 +7,8 @@ import (
|
||||
"strings"
|
||||
"testing"
|
||||
|
||||
"inventree/internal/database"
|
||||
"inventree/internal/statuses"
|
||||
"vibetree/internal/database"
|
||||
"vibetree/internal/statuses"
|
||||
)
|
||||
|
||||
func testDB(t *testing.T) *sql.DB {
|
||||
|
||||
@@ -7,7 +7,7 @@ import (
|
||||
"errors"
|
||||
"time"
|
||||
|
||||
"inventree/internal/models"
|
||||
"vibetree/internal/models"
|
||||
)
|
||||
|
||||
var (
|
||||
|
||||
@@ -9,7 +9,7 @@ import (
|
||||
|
||||
"golang.org/x/crypto/bcrypt"
|
||||
|
||||
"inventree/internal/models"
|
||||
"vibetree/internal/models"
|
||||
)
|
||||
|
||||
var (
|
||||
|
||||
@@ -6,9 +6,9 @@ import (
|
||||
"path/filepath"
|
||||
"testing"
|
||||
|
||||
"inventree/internal/database"
|
||||
"inventree/internal/models"
|
||||
"inventree/internal/users"
|
||||
"vibetree/internal/database"
|
||||
"vibetree/internal/models"
|
||||
"vibetree/internal/users"
|
||||
)
|
||||
|
||||
func testDB(t *testing.T) *sql.DB {
|
||||
|
||||
+8
-8
@@ -1,5 +1,5 @@
|
||||
// Package web implements the HTTP server: routing, session middleware,
|
||||
// template rendering, and all page/API handlers for inventree.
|
||||
// template rendering, and all page/API handlers for vibetree.
|
||||
package web
|
||||
|
||||
import (
|
||||
@@ -9,13 +9,13 @@ import (
|
||||
"net/http"
|
||||
"time"
|
||||
|
||||
"inventree/internal/assets"
|
||||
"inventree/internal/auth"
|
||||
"inventree/internal/folders"
|
||||
"inventree/internal/itemtypes"
|
||||
"inventree/internal/settings"
|
||||
"inventree/internal/statuses"
|
||||
"inventree/internal/users"
|
||||
"vibetree/internal/assets"
|
||||
"vibetree/internal/auth"
|
||||
"vibetree/internal/folders"
|
||||
"vibetree/internal/itemtypes"
|
||||
"vibetree/internal/settings"
|
||||
"vibetree/internal/statuses"
|
||||
"vibetree/internal/users"
|
||||
)
|
||||
|
||||
// App holds every dependency HTTP handlers need: data stores, templates, and
|
||||
|
||||
@@ -4,7 +4,7 @@ import (
|
||||
"net/http"
|
||||
"strconv"
|
||||
|
||||
"inventree/internal/models"
|
||||
"vibetree/internal/models"
|
||||
)
|
||||
|
||||
type assetRequest struct {
|
||||
|
||||
@@ -3,7 +3,7 @@ package web
|
||||
import (
|
||||
"net/http"
|
||||
|
||||
"inventree/internal/auth"
|
||||
"vibetree/internal/auth"
|
||||
)
|
||||
|
||||
type loginPageData struct {
|
||||
|
||||
@@ -5,12 +5,12 @@ import (
|
||||
"net/http"
|
||||
"time"
|
||||
|
||||
"inventree/internal/assets"
|
||||
"vibetree/internal/assets"
|
||||
)
|
||||
|
||||
func (a *App) handleExportCSV(w http.ResponseWriter, r *http.Request) {
|
||||
ctx := r.Context()
|
||||
filename := fmt.Sprintf("inventree-assets-%s.csv", time.Now().Format("2006-01-02"))
|
||||
filename := fmt.Sprintf("vibetree-assets-%s.csv", time.Now().Format("2006-01-02"))
|
||||
w.Header().Set("Content-Type", "text/csv; charset=utf-8")
|
||||
w.Header().Set("Content-Disposition", "attachment; filename=\""+filename+"\"")
|
||||
|
||||
|
||||
@@ -4,8 +4,8 @@ import (
|
||||
"errors"
|
||||
"net/http"
|
||||
|
||||
"inventree/internal/folders"
|
||||
"inventree/internal/models"
|
||||
"vibetree/internal/folders"
|
||||
"vibetree/internal/models"
|
||||
)
|
||||
|
||||
// handleFolderOptions returns every folder as a flat, indented list for
|
||||
|
||||
@@ -3,8 +3,8 @@ package web
|
||||
import (
|
||||
"net/http"
|
||||
|
||||
"inventree/internal/assets"
|
||||
"inventree/internal/models"
|
||||
"vibetree/internal/assets"
|
||||
"vibetree/internal/models"
|
||||
)
|
||||
|
||||
// InventoryPageData is the top-level data passed to templates/pages/inventory.html.
|
||||
|
||||
@@ -5,7 +5,7 @@ import (
|
||||
"strconv"
|
||||
"strings"
|
||||
|
||||
"inventree/internal/models"
|
||||
"vibetree/internal/models"
|
||||
)
|
||||
|
||||
type itemTypesListData struct {
|
||||
|
||||
@@ -7,8 +7,8 @@ import (
|
||||
"strconv"
|
||||
"strings"
|
||||
|
||||
"inventree/internal/assets"
|
||||
"inventree/internal/models"
|
||||
"vibetree/internal/assets"
|
||||
"vibetree/internal/models"
|
||||
)
|
||||
|
||||
// LabelTemplate describes a sheet of adhesive labels: cell size, grid, and
|
||||
|
||||
@@ -3,7 +3,7 @@ package web
|
||||
import (
|
||||
"net/http"
|
||||
|
||||
"inventree/internal/models"
|
||||
"vibetree/internal/models"
|
||||
)
|
||||
|
||||
type SearchPanelData struct {
|
||||
|
||||
@@ -4,7 +4,7 @@ import (
|
||||
"net/http"
|
||||
"strconv"
|
||||
|
||||
"inventree/internal/models"
|
||||
"vibetree/internal/models"
|
||||
)
|
||||
|
||||
type settingsPageData struct {
|
||||
@@ -17,7 +17,7 @@ type settingsPageData struct {
|
||||
|
||||
func (a *App) handleSettingsPage(w http.ResponseWriter, r *http.Request) {
|
||||
ctx := r.Context()
|
||||
siteName, err := a.Settings.Get(ctx, "site_name", "inventree")
|
||||
siteName, err := a.Settings.Get(ctx, "site_name", "vibetree")
|
||||
if err != nil {
|
||||
writeErr(w, http.StatusInternalServerError, err.Error())
|
||||
return
|
||||
|
||||
@@ -5,8 +5,8 @@ import (
|
||||
"net/http"
|
||||
"net/url"
|
||||
|
||||
"inventree/internal/assets"
|
||||
"inventree/internal/models"
|
||||
"vibetree/internal/assets"
|
||||
"vibetree/internal/models"
|
||||
)
|
||||
|
||||
type settingsImportPageData struct {
|
||||
|
||||
@@ -6,7 +6,7 @@ import (
|
||||
"net/http"
|
||||
"strconv"
|
||||
|
||||
"inventree/internal/models"
|
||||
"vibetree/internal/models"
|
||||
)
|
||||
|
||||
// parseRole maps a form's role value to a models.Role, defaulting to
|
||||
|
||||
@@ -3,8 +3,8 @@ package web
|
||||
import (
|
||||
"net/http"
|
||||
|
||||
"inventree/internal/auth"
|
||||
"inventree/internal/models"
|
||||
"vibetree/internal/auth"
|
||||
"vibetree/internal/models"
|
||||
)
|
||||
|
||||
// loadSession attaches the current user (if any) to the request context
|
||||
|
||||
@@ -10,7 +10,7 @@ import (
|
||||
"strings"
|
||||
"time"
|
||||
|
||||
content "inventree/web"
|
||||
content "vibetree/web"
|
||||
)
|
||||
|
||||
// templateFuncs are available to every template (pages and fragments).
|
||||
@@ -101,9 +101,9 @@ func loadTemplates(a *App) (*templateSet, error) {
|
||||
// used by layout.html for the <title> and navbar brand text.
|
||||
appFuncs := template.FuncMap{
|
||||
"siteName": func() string {
|
||||
name, err := a.Settings.Get(context.Background(), "site_name", "inventree")
|
||||
name, err := a.Settings.Get(context.Background(), "site_name", "vibetree")
|
||||
if err != nil || name == "" {
|
||||
return "inventree"
|
||||
return "vibetree"
|
||||
}
|
||||
return name
|
||||
},
|
||||
|
||||
@@ -3,10 +3,10 @@ package web
|
||||
import (
|
||||
"net/http"
|
||||
|
||||
content "inventree/web"
|
||||
content "vibetree/web"
|
||||
)
|
||||
|
||||
// Router builds the complete HTTP handler for inventree: static assets,
|
||||
// Router builds the complete HTTP handler for vibetree: static assets,
|
||||
// authentication, the AJAX-driven inventory tree, and the traditional
|
||||
// full-page admin sections (item types, users, settings).
|
||||
func (a *App) Router() http.Handler {
|
||||
|
||||
@@ -4,8 +4,8 @@ import (
|
||||
"context"
|
||||
"fmt"
|
||||
|
||||
"inventree/internal/assets"
|
||||
"inventree/internal/models"
|
||||
"vibetree/internal/assets"
|
||||
"vibetree/internal/models"
|
||||
)
|
||||
|
||||
// treeAssetLimit bounds how many assets are rendered directly inside a
|
||||
|
||||
@@ -11,9 +11,9 @@ import (
|
||||
"strings"
|
||||
"testing"
|
||||
|
||||
"inventree/internal/database"
|
||||
"inventree/internal/models"
|
||||
"inventree/internal/web"
|
||||
"vibetree/internal/database"
|
||||
"vibetree/internal/models"
|
||||
"vibetree/internal/web"
|
||||
)
|
||||
|
||||
func testApp(t *testing.T) *web.App {
|
||||
@@ -49,7 +49,7 @@ func loginAs(t *testing.T, srv *httptest.Server, username, password string) *htt
|
||||
t.Fatalf("expected redirect on login, got %d", res.StatusCode)
|
||||
}
|
||||
for _, c := range res.Cookies() {
|
||||
if c.Name == "inventree_session" {
|
||||
if c.Name == "vibetree_session" {
|
||||
return c
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user