mirror of
https://github.com/go-vikunja/vikunja.git
synced 2026-07-21 17:37:54 -05:00
Parametrised error translations (invalid api token permission, invalid timezone, invalid claim data) rendered their placeholders as empty text because the backend only baked the values into the English message and the frontend translated the error code without any interpolation params. Carry the values as i18n_params on error responses, keyed by the placeholder names of the frontend's error translations, on both v1 and the v2 problem+json body, and pass them through when translating the toast. A 14002 toast now reads e.g. "The permission time_entries of group tasks is invalid." instead of "The permission of group is invalid."
75 lines
2.6 KiB
Go
75 lines
2.6 KiB
Go
// Vikunja is a to-do list application to facilitate your life.
|
|
// Copyright 2018-present Vikunja and contributors. All rights reserved.
|
|
//
|
|
// This program is free software: you can redistribute it and/or modify
|
|
// it under the terms of the GNU Affero General Public License as published by
|
|
// the Free Software Foundation, either version 3 of the License, or
|
|
// (at your option) any later version.
|
|
//
|
|
// This program is distributed in the hope that it will be useful,
|
|
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
// GNU Affero General Public License for more details.
|
|
//
|
|
// You should have received a copy of the GNU Affero General Public License
|
|
// along with this program. If not, see <https://www.gnu.org/licenses/>.
|
|
|
|
package web
|
|
|
|
import (
|
|
"github.com/labstack/echo/v5"
|
|
"xorm.io/xorm"
|
|
)
|
|
|
|
// Permissions defines permissions methods
|
|
type Permissions interface {
|
|
CanRead(*xorm.Session, Auth) (bool, int, error)
|
|
CanDelete(*xorm.Session, Auth) (bool, error)
|
|
CanUpdate(*xorm.Session, Auth) (bool, error)
|
|
CanCreate(*xorm.Session, Auth) (bool, error)
|
|
}
|
|
|
|
// CRUDable defines the CRUD methods
|
|
type CRUDable interface {
|
|
Create(*xorm.Session, Auth) error
|
|
ReadOne(*xorm.Session, Auth) error
|
|
ReadAll(s *xorm.Session, auth Auth, search string, page int, perPage int) (result interface{}, resultCount int, numberOfTotalItems int64, err error)
|
|
Update(*xorm.Session, Auth) error
|
|
Delete(*xorm.Session, Auth) error
|
|
}
|
|
|
|
// HTTPErrorProcessor is executed when the defined error is thrown, it will make sure the user sees an appropriate error message and http status code
|
|
type HTTPErrorProcessor interface {
|
|
HTTPError() HTTPError
|
|
}
|
|
|
|
// HTTPError holds information about an http error
|
|
type HTTPError struct {
|
|
HTTPCode int `json:"-"`
|
|
Code int `json:"code"`
|
|
Message string `json:"message"`
|
|
// I18nParams carries Message's dynamic values, keyed by the client's translation placeholder names, so clients can localise the error.
|
|
I18nParams map[string]string `json:"i18n_params,omitempty"`
|
|
}
|
|
|
|
type HTTPErrorWithDetails struct {
|
|
HTTPError
|
|
Details interface{} `json:"details"`
|
|
}
|
|
|
|
// Auth defines the interface used to retrieve authentication information
|
|
type Auth interface {
|
|
// Most of the time, we need an ID from the auth object only. Having this method saves the need to cast it.
|
|
GetID() int64
|
|
}
|
|
|
|
// Authprovider holds the implementation of an auth provider used by the application
|
|
type Authprovider interface {
|
|
GetAuthObject(echo.Context) (Auth, error)
|
|
}
|
|
|
|
// Auths holds the auth object
|
|
type Auths struct {
|
|
AuthObject func(echo.Context) (Auth, error)
|
|
}
|