mirror of
https://github.com/navidrome/navidrome.git
synced 2025-04-15 03:30:39 +03:00
feat: improve logs, remove config for disable authentication
This commit is contained in:
parent
72d9ddf532
commit
d389d40db1
@ -28,8 +28,8 @@ type nd struct {
|
|||||||
ScanInterval string `default:"1m"`
|
ScanInterval string `default:"1m"`
|
||||||
|
|
||||||
// DevFlags. These are used to enable/disable debugging and incomplete features
|
// DevFlags. These are used to enable/disable debugging and incomplete features
|
||||||
DevDisableAuthentication bool `default:"false"`
|
DevDisableBanner bool `default:"false"`
|
||||||
DevDisableBanner bool `default:"false"`
|
DevLogSourceLine bool `default:"false"`
|
||||||
}
|
}
|
||||||
|
|
||||||
var Server = &nd{}
|
var Server = &nd{}
|
||||||
@ -85,7 +85,8 @@ func LoadFromFile(confFile string, skipFlags ...bool) {
|
|||||||
if os.Getenv("PORT") != "" {
|
if os.Getenv("PORT") != "" {
|
||||||
Server.Port = os.Getenv("PORT")
|
Server.Port = os.Getenv("PORT")
|
||||||
}
|
}
|
||||||
log.SerLevelString(Server.LogLevel)
|
log.SetLevelString(Server.LogLevel)
|
||||||
|
log.SetLogSourceLine(Server.DevLogSourceLine)
|
||||||
log.Trace("Loaded configuration", "file", confFile, "config", fmt.Sprintf("%#v", Server))
|
log.Trace("Loaded configuration", "file", confFile, "config", fmt.Sprintf("%#v", Server))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1,136 +1,165 @@
|
|||||||
package migrations
|
package migrations
|
||||||
|
|
||||||
var schema = `
|
var schema = `
|
||||||
create table if not exists media_file
|
create table album
|
||||||
(
|
(
|
||||||
id varchar(255) not null
|
id varchar(255) not null
|
||||||
primary key,
|
primary key,
|
||||||
title varchar(255) not null,
|
name varchar(255) default '' not null,
|
||||||
album varchar(255) default '' not null,
|
artist_id varchar(255) default '' not null,
|
||||||
artist varchar(255) default '' not null,
|
cover_art_path varchar(255) default '' not null,
|
||||||
artist_id varchar(255) default '' not null,
|
cover_art_id varchar(255) default '' not null,
|
||||||
album_artist varchar(255) default '' not null,
|
artist varchar(255) default '' not null,
|
||||||
album_id varchar(255) default '' not null,
|
album_artist varchar(255) default '' not null,
|
||||||
has_cover_art bool default FALSE not null,
|
year integer default 0 not null,
|
||||||
track_number integer default 0 not null,
|
compilation bool default FALSE not null,
|
||||||
disc_number integer default 0 not null,
|
song_count integer default 0 not null,
|
||||||
year integer default 0 not null,
|
duration integer default 0 not null,
|
||||||
size integer default 0 not null,
|
genre varchar(255) default '' not null,
|
||||||
path varchar(1024) not null,
|
created_at datetime,
|
||||||
suffix varchar(255) default '' not null,
|
updated_at datetime
|
||||||
duration integer default 0 not null,
|
|
||||||
bit_rate integer default 0 not null,
|
|
||||||
genre varchar(255) default '' not null,
|
|
||||||
compilation bool default FALSE not null,
|
|
||||||
created_at datetime,
|
|
||||||
updated_at datetime
|
|
||||||
);
|
);
|
||||||
|
|
||||||
create index if not exists media_file_title
|
create index album_artist
|
||||||
on media_file (title);
|
on album (artist);
|
||||||
|
|
||||||
create index if not exists media_file_album_id
|
create index album_artist_id
|
||||||
on media_file (album_id);
|
on album (artist_id);
|
||||||
|
|
||||||
create index if not exists media_file_album
|
create index album_genre
|
||||||
on media_file (album);
|
on album (genre);
|
||||||
|
|
||||||
create index if not exists media_file_artist_id
|
create index album_name
|
||||||
on media_file (artist_id);
|
on album (name);
|
||||||
|
|
||||||
create index if not exists media_file_artist
|
create index album_year
|
||||||
on media_file (artist);
|
on album (year);
|
||||||
|
|
||||||
create index if not exists media_file_album_artist
|
create table annotation
|
||||||
on media_file (album_artist);
|
|
||||||
|
|
||||||
create index if not exists media_file_genre
|
|
||||||
on media_file (genre);
|
|
||||||
|
|
||||||
create index if not exists media_file_year
|
|
||||||
on media_file (year);
|
|
||||||
|
|
||||||
create index if not exists media_file_compilation
|
|
||||||
on media_file (compilation);
|
|
||||||
|
|
||||||
create index if not exists media_file_path
|
|
||||||
on media_file (path);
|
|
||||||
|
|
||||||
create table if not exists annotation
|
|
||||||
(
|
(
|
||||||
ann_id varchar(255) not null
|
ann_id varchar(255) not null
|
||||||
primary key,
|
primary key,
|
||||||
user_id varchar(255) default '' not null,
|
user_id varchar(255) default '' not null,
|
||||||
item_id varchar(255) default '' not null,
|
item_id varchar(255) default '' not null,
|
||||||
item_type varchar(255) default '' not null,
|
item_type varchar(255) default '' not null,
|
||||||
play_count integer,
|
play_count integer,
|
||||||
play_date datetime,
|
play_date datetime,
|
||||||
rating integer,
|
rating integer,
|
||||||
starred bool default FALSE not null,
|
starred bool default FALSE not null,
|
||||||
starred_at datetime,
|
starred_at datetime,
|
||||||
unique (user_id, item_id, item_type)
|
unique (user_id, item_id, item_type)
|
||||||
);
|
);
|
||||||
|
|
||||||
create index if not exists annotation_play_count
|
create index annotation_play_count
|
||||||
on annotation (play_count);
|
on annotation (play_count);
|
||||||
|
|
||||||
create index if not exists annotation_play_date
|
create index annotation_play_date
|
||||||
on annotation (play_date);
|
on annotation (play_date);
|
||||||
|
|
||||||
create index if not exists annotation_starred
|
create index annotation_rating
|
||||||
on annotation (starred);
|
on annotation (rating);
|
||||||
|
|
||||||
create table if not exists playlist
|
create index annotation_starred
|
||||||
|
on annotation (starred);
|
||||||
|
|
||||||
|
create table artist
|
||||||
(
|
(
|
||||||
id varchar(255) not null
|
id varchar(255) not null
|
||||||
primary key,
|
primary key,
|
||||||
name varchar(255) not null,
|
name varchar(255) default '' not null,
|
||||||
comment varchar(255) default '' not null,
|
album_count integer default 0 not null
|
||||||
duration integer default 0 not null,
|
|
||||||
owner varchar(255) default '' not null,
|
|
||||||
public bool default FALSE not null,
|
|
||||||
tracks text not null,
|
|
||||||
unique (owner, name)
|
|
||||||
);
|
);
|
||||||
|
|
||||||
create index if not exists playlist_name
|
create index artist_name
|
||||||
on playlist (name);
|
on artist (name);
|
||||||
|
|
||||||
create table if not exists property
|
create table media_file
|
||||||
(
|
(
|
||||||
id varchar(255) not null
|
id varchar(255) not null
|
||||||
primary key,
|
primary key,
|
||||||
value varchar(1024) default '' not null
|
path varchar(255) default '' not null,
|
||||||
|
title varchar(255) default '' not null,
|
||||||
|
album varchar(255) default '' not null,
|
||||||
|
artist varchar(255) default '' not null,
|
||||||
|
artist_id varchar(255) default '' not null,
|
||||||
|
album_artist varchar(255) default '' not null,
|
||||||
|
album_id varchar(255) default '' not null,
|
||||||
|
has_cover_art bool default FALSE not null,
|
||||||
|
track_number integer default 0 not null,
|
||||||
|
disc_number integer default 0 not null,
|
||||||
|
year integer default 0 not null,
|
||||||
|
size integer default 0 not null,
|
||||||
|
suffix varchar(255) default '' not null,
|
||||||
|
duration integer default 0 not null,
|
||||||
|
bit_rate integer default 0 not null,
|
||||||
|
genre varchar(255) default '' not null,
|
||||||
|
compilation bool default FALSE not null,
|
||||||
|
created_at datetime,
|
||||||
|
updated_at datetime
|
||||||
);
|
);
|
||||||
|
|
||||||
create table if not exists search
|
create index media_file_album_id
|
||||||
|
on media_file (album_id);
|
||||||
|
|
||||||
|
create index media_file_genre
|
||||||
|
on media_file (genre);
|
||||||
|
|
||||||
|
create index media_file_path
|
||||||
|
on media_file (path);
|
||||||
|
|
||||||
|
create index media_file_title
|
||||||
|
on media_file (title);
|
||||||
|
|
||||||
|
create table playlist
|
||||||
(
|
(
|
||||||
id varchar(255) not null
|
id varchar(255) not null
|
||||||
primary key,
|
primary key,
|
||||||
"table" varchar(255) not null,
|
name varchar(255) default '' not null,
|
||||||
full_text varchar(1024) not null
|
comment varchar(255) default '' not null,
|
||||||
|
duration integer default 0 not null,
|
||||||
|
owner varchar(255) default '' not null,
|
||||||
|
public bool default FALSE not null,
|
||||||
|
tracks text not null
|
||||||
);
|
);
|
||||||
|
|
||||||
create index if not exists search_full_text
|
create index playlist_name
|
||||||
on search (full_text);
|
on playlist (name);
|
||||||
|
|
||||||
create index if not exists search_table
|
create table property
|
||||||
on search ("table");
|
|
||||||
|
|
||||||
create table if not exists user
|
|
||||||
(
|
(
|
||||||
id varchar(255) not null
|
id varchar(255) not null
|
||||||
primary key,
|
primary key,
|
||||||
user_name varchar(255) default '' not null
|
value varchar(255) default '' not null
|
||||||
unique,
|
);
|
||||||
name varchar(255) default '' not null,
|
|
||||||
email varchar(255) default '' not null
|
create table search
|
||||||
unique,
|
(
|
||||||
password varchar(255) default '' not null,
|
id varchar(255) not null
|
||||||
is_admin bool default FALSE not null,
|
primary key,
|
||||||
last_login_at datetime,
|
"table" varchar(255) default '' not null,
|
||||||
last_access_at datetime,
|
full_text varchar(255) default '' not null
|
||||||
created_at datetime not null,
|
);
|
||||||
updated_at datetime not null
|
|
||||||
|
create index search_full_text
|
||||||
|
on search (full_text);
|
||||||
|
|
||||||
|
create index search_table
|
||||||
|
on search ("table");
|
||||||
|
|
||||||
|
create table user
|
||||||
|
(
|
||||||
|
id varchar(255) not null
|
||||||
|
primary key,
|
||||||
|
user_name varchar(255) default '' not null
|
||||||
|
unique,
|
||||||
|
name varchar(255) default '' not null,
|
||||||
|
email varchar(255) default '' not null
|
||||||
|
unique,
|
||||||
|
password varchar(255) default '' not null,
|
||||||
|
is_admin bool default FALSE not null,
|
||||||
|
last_login_at datetime,
|
||||||
|
last_access_at datetime,
|
||||||
|
created_at datetime not null,
|
||||||
|
updated_at datetime not null
|
||||||
);
|
);
|
||||||
`
|
`
|
||||||
|
@ -27,6 +27,7 @@ const (
|
|||||||
var (
|
var (
|
||||||
currentLevel Level
|
currentLevel Level
|
||||||
defaultLogger = logrus.New()
|
defaultLogger = logrus.New()
|
||||||
|
logSourceLine = false
|
||||||
)
|
)
|
||||||
|
|
||||||
// SetLevel sets the global log level used by the simple logger.
|
// SetLevel sets the global log level used by the simple logger.
|
||||||
@ -35,7 +36,7 @@ func SetLevel(l Level) {
|
|||||||
logrus.SetLevel(logrus.Level(l))
|
logrus.SetLevel(logrus.Level(l))
|
||||||
}
|
}
|
||||||
|
|
||||||
func SerLevelString(l string) {
|
func SetLevelString(l string) {
|
||||||
envLevel := strings.ToLower(l)
|
envLevel := strings.ToLower(l)
|
||||||
var level Level
|
var level Level
|
||||||
switch envLevel {
|
switch envLevel {
|
||||||
@ -55,6 +56,10 @@ func SerLevelString(l string) {
|
|||||||
SetLevel(level)
|
SetLevel(level)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func SetLogSourceLine(enabled bool) {
|
||||||
|
logSourceLine = enabled
|
||||||
|
}
|
||||||
|
|
||||||
func NewContext(ctx context.Context, keyValuePairs ...interface{}) context.Context {
|
func NewContext(ctx context.Context, keyValuePairs ...interface{}) context.Context {
|
||||||
if ctx == nil {
|
if ctx == nil {
|
||||||
ctx = context.Background()
|
ctx = context.Background()
|
||||||
@ -132,7 +137,7 @@ func parseArgs(args []interface{}) (*logrus.Entry, string) {
|
|||||||
kvPairs := args[1:]
|
kvPairs := args[1:]
|
||||||
l = addFields(l, kvPairs)
|
l = addFields(l, kvPairs)
|
||||||
}
|
}
|
||||||
if currentLevel >= LevelTrace {
|
if logSourceLine {
|
||||||
_, file, line, ok := runtime.Caller(2)
|
_, file, line, ok := runtime.Caller(2)
|
||||||
if !ok {
|
if !ok {
|
||||||
file = "???"
|
file = "???"
|
||||||
|
@ -143,7 +143,18 @@ func (r sqlRepository) delete(cond Sqlizer) error {
|
|||||||
func (r sqlRepository) toSql(sq Sqlizer) (string, []interface{}, error) {
|
func (r sqlRepository) toSql(sq Sqlizer) (string, []interface{}, error) {
|
||||||
sql, args, err := sq.ToSql()
|
sql, args, err := sq.ToSql()
|
||||||
if err == nil {
|
if err == nil {
|
||||||
log.Trace(r.ctx, "SQL: `"+sql+"`", "args", strings.TrimPrefix(fmt.Sprintf("%#v", args), "[]interface {}"))
|
var fmtArgs []string
|
||||||
|
for i := range args {
|
||||||
|
var f string
|
||||||
|
switch a := args[i].(type) {
|
||||||
|
case string:
|
||||||
|
f = `'` + a + `'`
|
||||||
|
default:
|
||||||
|
f = fmt.Sprintf("%v", a)
|
||||||
|
}
|
||||||
|
fmtArgs = append(fmtArgs, f)
|
||||||
|
}
|
||||||
|
log.Trace(r.ctx, "SQL: `"+sql+"`", "args", `[`+strings.Join(fmtArgs, ",")+`]`)
|
||||||
}
|
}
|
||||||
return sql, args, err
|
return sql, args, err
|
||||||
}
|
}
|
||||||
|
@ -7,7 +7,6 @@ import (
|
|||||||
"strings"
|
"strings"
|
||||||
|
|
||||||
"github.com/deluan/navidrome/assets"
|
"github.com/deluan/navidrome/assets"
|
||||||
"github.com/deluan/navidrome/conf"
|
|
||||||
"github.com/deluan/navidrome/model"
|
"github.com/deluan/navidrome/model"
|
||||||
"github.com/deluan/rest"
|
"github.com/deluan/rest"
|
||||||
"github.com/go-chi/chi"
|
"github.com/go-chi/chi"
|
||||||
@ -46,10 +45,8 @@ func (app *Router) routes() http.Handler {
|
|||||||
r.Post("/createAdmin", CreateAdmin(app.ds))
|
r.Post("/createAdmin", CreateAdmin(app.ds))
|
||||||
|
|
||||||
r.Route("/api", func(r chi.Router) {
|
r.Route("/api", func(r chi.Router) {
|
||||||
if !conf.Server.DevDisableAuthentication {
|
r.Use(jwtauth.Verifier(TokenAuth))
|
||||||
r.Use(jwtauth.Verifier(TokenAuth))
|
r.Use(Authenticator(app.ds))
|
||||||
r.Use(Authenticator(app.ds))
|
|
||||||
}
|
|
||||||
app.R(r, "/user", model.User{})
|
app.R(r, "/user", model.User{})
|
||||||
app.R(r, "/song", model.MediaFile{})
|
app.R(r, "/song", model.MediaFile{})
|
||||||
app.R(r, "/album", model.Album{})
|
app.R(r, "/album", model.Album{})
|
||||||
|
@ -6,7 +6,6 @@ import (
|
|||||||
"fmt"
|
"fmt"
|
||||||
"net/http"
|
"net/http"
|
||||||
|
|
||||||
"github.com/deluan/navidrome/conf"
|
|
||||||
"github.com/deluan/navidrome/engine"
|
"github.com/deluan/navidrome/engine"
|
||||||
"github.com/deluan/navidrome/server/subsonic/responses"
|
"github.com/deluan/navidrome/server/subsonic/responses"
|
||||||
"github.com/go-chi/chi"
|
"github.com/go-chi/chi"
|
||||||
@ -48,11 +47,9 @@ func (api *Router) routes() http.Handler {
|
|||||||
r.Use(postFormToQueryParams)
|
r.Use(postFormToQueryParams)
|
||||||
r.Use(checkRequiredParameters)
|
r.Use(checkRequiredParameters)
|
||||||
|
|
||||||
// Add validation middleware if not disabled
|
// Add validation middleware
|
||||||
if !conf.Server.DevDisableAuthentication {
|
r.Use(authenticate(api.Users))
|
||||||
r.Use(authenticate(api.Users))
|
// TODO Validate version
|
||||||
// TODO Validate version
|
|
||||||
}
|
|
||||||
|
|
||||||
// Subsonic endpoints, grouped by controller
|
// Subsonic endpoints, grouped by controller
|
||||||
r.Group(func(r chi.Router) {
|
r.Group(func(r chi.Router) {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user