feat: add "redirect after copy/move" user setting
This commit is contained in:
parent
94ec786d34
commit
5c5d92e003
37
auth/hook.go
37
auth/hook.go
@ -158,16 +158,17 @@ func (a *HookAuth) SaveUser() (*users.User, error) {
|
|||||||
|
|
||||||
// create user with the provided credentials
|
// create user with the provided credentials
|
||||||
d := &users.User{
|
d := &users.User{
|
||||||
Username: a.Cred.Username,
|
Username: a.Cred.Username,
|
||||||
Password: pass,
|
Password: pass,
|
||||||
Scope: a.Settings.Defaults.Scope,
|
Scope: a.Settings.Defaults.Scope,
|
||||||
Locale: a.Settings.Defaults.Locale,
|
Locale: a.Settings.Defaults.Locale,
|
||||||
ViewMode: a.Settings.Defaults.ViewMode,
|
ViewMode: a.Settings.Defaults.ViewMode,
|
||||||
SingleClick: a.Settings.Defaults.SingleClick,
|
SingleClick: a.Settings.Defaults.SingleClick,
|
||||||
Sorting: a.Settings.Defaults.Sorting,
|
RedirectAfterCopyMove: a.Settings.Defaults.RedirectAfterCopyMove,
|
||||||
Perm: a.Settings.Defaults.Perm,
|
Sorting: a.Settings.Defaults.Sorting,
|
||||||
Commands: a.Settings.Defaults.Commands,
|
Perm: a.Settings.Defaults.Perm,
|
||||||
HideDotfiles: a.Settings.Defaults.HideDotfiles,
|
Commands: a.Settings.Defaults.Commands,
|
||||||
|
HideDotfiles: a.Settings.Defaults.HideDotfiles,
|
||||||
}
|
}
|
||||||
u = a.GetUser(d)
|
u = a.GetUser(d)
|
||||||
|
|
||||||
@ -219,13 +220,14 @@ func (a *HookAuth) GetUser(d *users.User) *users.User {
|
|||||||
Download: isAdmin || a.Fields.GetBoolean("user.perm.download", d.Perm.Download),
|
Download: isAdmin || a.Fields.GetBoolean("user.perm.download", d.Perm.Download),
|
||||||
}
|
}
|
||||||
user := users.User{
|
user := users.User{
|
||||||
ID: d.ID,
|
ID: d.ID,
|
||||||
Username: d.Username,
|
Username: d.Username,
|
||||||
Password: d.Password,
|
Password: d.Password,
|
||||||
Scope: a.Fields.GetString("user.scope", d.Scope),
|
Scope: a.Fields.GetString("user.scope", d.Scope),
|
||||||
Locale: a.Fields.GetString("user.locale", d.Locale),
|
Locale: a.Fields.GetString("user.locale", d.Locale),
|
||||||
ViewMode: users.ViewMode(a.Fields.GetString("user.viewMode", string(d.ViewMode))),
|
ViewMode: users.ViewMode(a.Fields.GetString("user.viewMode", string(d.ViewMode))),
|
||||||
SingleClick: a.Fields.GetBoolean("user.singleClick", d.SingleClick),
|
SingleClick: a.Fields.GetBoolean("user.singleClick", d.SingleClick),
|
||||||
|
RedirectAfterCopyMove: a.Fields.GetBoolean("user.redirectAfterCopyMove", d.RedirectAfterCopyMove),
|
||||||
Sorting: files.Sorting{
|
Sorting: files.Sorting{
|
||||||
Asc: a.Fields.GetBoolean("user.sorting.asc", d.Sorting.Asc),
|
Asc: a.Fields.GetBoolean("user.sorting.asc", d.Sorting.Asc),
|
||||||
By: a.Fields.GetString("user.sorting.by", d.Sorting.By),
|
By: a.Fields.GetString("user.sorting.by", d.Sorting.By),
|
||||||
@ -251,6 +253,7 @@ var validHookFields = []string{
|
|||||||
"user.locale",
|
"user.locale",
|
||||||
"user.viewMode",
|
"user.viewMode",
|
||||||
"user.singleClick",
|
"user.singleClick",
|
||||||
|
"user.redirectAfterCopyMove",
|
||||||
"user.sorting.by",
|
"user.sorting.by",
|
||||||
"user.sorting.asc",
|
"user.sorting.asc",
|
||||||
"user.commands",
|
"user.commands",
|
||||||
|
|||||||
@ -240,6 +240,7 @@ func printSettings(ser *settings.Server, set *settings.Settings, auther auth.Aut
|
|||||||
fmt.Fprintf(w, "\tLocale:\t%s\n", set.Defaults.Locale)
|
fmt.Fprintf(w, "\tLocale:\t%s\n", set.Defaults.Locale)
|
||||||
fmt.Fprintf(w, "\tView mode:\t%s\n", set.Defaults.ViewMode)
|
fmt.Fprintf(w, "\tView mode:\t%s\n", set.Defaults.ViewMode)
|
||||||
fmt.Fprintf(w, "\tSingle Click:\t%t\n", set.Defaults.SingleClick)
|
fmt.Fprintf(w, "\tSingle Click:\t%t\n", set.Defaults.SingleClick)
|
||||||
|
fmt.Fprintf(w, "\tRedirect after Copy/Move:\t%t\n", set.Defaults.RedirectAfterCopyMove)
|
||||||
fmt.Fprintf(w, "\tFile Creation Mode:\t%O\n", set.FileMode)
|
fmt.Fprintf(w, "\tFile Creation Mode:\t%O\n", set.FileMode)
|
||||||
fmt.Fprintf(w, "\tDirectory Creation Mode:\t%O\n", set.DirMode)
|
fmt.Fprintf(w, "\tDirectory Creation Mode:\t%O\n", set.DirMode)
|
||||||
fmt.Fprintf(w, "\tCommands:\t%s\n", strings.Join(set.Defaults.Commands, " "))
|
fmt.Fprintf(w, "\tCommands:\t%s\n", strings.Join(set.Defaults.Commands, " "))
|
||||||
|
|||||||
@ -393,10 +393,11 @@ func quickSetup(v *viper.Viper, s *storage.Storage) error {
|
|||||||
MinimumPasswordLength: settings.DefaultMinimumPasswordLength,
|
MinimumPasswordLength: settings.DefaultMinimumPasswordLength,
|
||||||
UserHomeBasePath: settings.DefaultUsersHomeBasePath,
|
UserHomeBasePath: settings.DefaultUsersHomeBasePath,
|
||||||
Defaults: settings.UserDefaults{
|
Defaults: settings.UserDefaults{
|
||||||
Scope: ".",
|
Scope: ".",
|
||||||
Locale: "en",
|
Locale: "en",
|
||||||
SingleClick: false,
|
SingleClick: false,
|
||||||
AceEditorTheme: v.GetString("defaults.aceEditorTheme"),
|
RedirectAfterCopyMove: true,
|
||||||
|
AceEditorTheme: v.GetString("defaults.aceEditorTheme"),
|
||||||
Perm: users.Permissions{
|
Perm: users.Permissions{
|
||||||
Admin: false,
|
Admin: false,
|
||||||
Execute: true,
|
Execute: true,
|
||||||
|
|||||||
@ -30,13 +30,14 @@ func printUsers(usrs []*users.User) {
|
|||||||
fmt.Fprintln(w, "ID\tUsername\tScope\tLocale\tV. Mode\tS.Click\tAdmin\tExecute\tCreate\tRename\tModify\tDelete\tShare\tDownload\tPwd Lock")
|
fmt.Fprintln(w, "ID\tUsername\tScope\tLocale\tV. Mode\tS.Click\tAdmin\tExecute\tCreate\tRename\tModify\tDelete\tShare\tDownload\tPwd Lock")
|
||||||
|
|
||||||
for _, u := range usrs {
|
for _, u := range usrs {
|
||||||
fmt.Fprintf(w, "%d\t%s\t%s\t%s\t%s\t%t\t%t\t%t\t%t\t%t\t%t\t%t\t%t\t%t\t%t\t\n",
|
fmt.Fprintf(w, "%d\t%s\t%s\t%s\t%s\t%t\t%t\t%t\t%t\t%t\t%t\t%t\t%t\t%t\t%t\t%t\t\n",
|
||||||
u.ID,
|
u.ID,
|
||||||
u.Username,
|
u.Username,
|
||||||
u.Scope,
|
u.Scope,
|
||||||
u.Locale,
|
u.Locale,
|
||||||
u.ViewMode,
|
u.ViewMode,
|
||||||
u.SingleClick,
|
u.SingleClick,
|
||||||
|
u.RedirectAfterCopyMove,
|
||||||
u.Perm.Admin,
|
u.Perm.Admin,
|
||||||
u.Perm.Execute,
|
u.Perm.Execute,
|
||||||
u.Perm.Create,
|
u.Perm.Create,
|
||||||
@ -77,6 +78,7 @@ func addUserFlags(flags *pflag.FlagSet) {
|
|||||||
flags.String("locale", "en", "locale for users")
|
flags.String("locale", "en", "locale for users")
|
||||||
flags.String("viewMode", string(users.ListViewMode), "view mode for users")
|
flags.String("viewMode", string(users.ListViewMode), "view mode for users")
|
||||||
flags.Bool("singleClick", false, "use single clicks only")
|
flags.Bool("singleClick", false, "use single clicks only")
|
||||||
|
flags.Bool("redirectAfterCopyMove", false, "redirect to destination after copy/move")
|
||||||
flags.Bool("dateFormat", false, "use date format (true for absolute time, false for relative)")
|
flags.Bool("dateFormat", false, "use date format (true for absolute time, false for relative)")
|
||||||
flags.Bool("hideDotfiles", false, "hide dotfiles")
|
flags.Bool("hideDotfiles", false, "hide dotfiles")
|
||||||
flags.String("aceEditorTheme", "", "ace editor's syntax highlighting theme for users")
|
flags.String("aceEditorTheme", "", "ace editor's syntax highlighting theme for users")
|
||||||
@ -110,6 +112,8 @@ func getUserDefaults(flags *pflag.FlagSet, defaults *settings.UserDefaults, all
|
|||||||
defaults.ViewMode, err = getAndParseViewMode(flags)
|
defaults.ViewMode, err = getAndParseViewMode(flags)
|
||||||
case "singleClick":
|
case "singleClick":
|
||||||
defaults.SingleClick, err = flags.GetBool(flag.Name)
|
defaults.SingleClick, err = flags.GetBool(flag.Name)
|
||||||
|
case "redirectAfterCopyMove":
|
||||||
|
defaults.RedirectAfterCopyMove, err = flags.GetBool(flag.Name)
|
||||||
case "aceEditorTheme":
|
case "aceEditorTheme":
|
||||||
defaults.AceEditorTheme, err = flags.GetString(flag.Name)
|
defaults.AceEditorTheme, err = flags.GetString(flag.Name)
|
||||||
case "perm.admin":
|
case "perm.admin":
|
||||||
|
|||||||
@ -52,13 +52,14 @@ options you want to change.`,
|
|||||||
}
|
}
|
||||||
|
|
||||||
defaults := settings.UserDefaults{
|
defaults := settings.UserDefaults{
|
||||||
Scope: user.Scope,
|
Scope: user.Scope,
|
||||||
Locale: user.Locale,
|
Locale: user.Locale,
|
||||||
ViewMode: user.ViewMode,
|
ViewMode: user.ViewMode,
|
||||||
SingleClick: user.SingleClick,
|
SingleClick: user.SingleClick,
|
||||||
Perm: user.Perm,
|
RedirectAfterCopyMove: user.RedirectAfterCopyMove,
|
||||||
Sorting: user.Sorting,
|
Perm: user.Perm,
|
||||||
Commands: user.Commands,
|
Sorting: user.Sorting,
|
||||||
|
Commands: user.Commands,
|
||||||
}
|
}
|
||||||
|
|
||||||
err = getUserDefaults(flags, &defaults, false)
|
err = getUserDefaults(flags, &defaults, false)
|
||||||
@ -70,6 +71,7 @@ options you want to change.`,
|
|||||||
user.Locale = defaults.Locale
|
user.Locale = defaults.Locale
|
||||||
user.ViewMode = defaults.ViewMode
|
user.ViewMode = defaults.ViewMode
|
||||||
user.SingleClick = defaults.SingleClick
|
user.SingleClick = defaults.SingleClick
|
||||||
|
user.RedirectAfterCopyMove = defaults.RedirectAfterCopyMove
|
||||||
user.Perm = defaults.Perm
|
user.Perm = defaults.Perm
|
||||||
user.Commands = defaults.Commands
|
user.Commands = defaults.Commands
|
||||||
user.Sorting = defaults.Sorting
|
user.Sorting = defaults.Sorting
|
||||||
|
|||||||
@ -109,7 +109,7 @@ export default {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
this.$router.push({ path: this.dest });
|
if (this.user.redirectAfterCopyMove) this.$router.push({ path: this.dest });
|
||||||
})
|
})
|
||||||
.catch((e) => {
|
.catch((e) => {
|
||||||
buttons.done("copy");
|
buttons.done("copy");
|
||||||
|
|||||||
@ -79,7 +79,7 @@ export default {
|
|||||||
computed: {
|
computed: {
|
||||||
...mapState(useFileStore, ["req", "selected"]),
|
...mapState(useFileStore, ["req", "selected"]),
|
||||||
...mapState(useAuthStore, ["user"]),
|
...mapState(useAuthStore, ["user"]),
|
||||||
...mapWritableState(useFileStore, ["preselect"]),
|
...mapWritableState(useFileStore, ["reload", "preselect"]),
|
||||||
excludedFolders() {
|
excludedFolders() {
|
||||||
return this.selected
|
return this.selected
|
||||||
.filter((idx) => this.req.items[idx].isDir)
|
.filter((idx) => this.req.items[idx].isDir)
|
||||||
@ -108,7 +108,8 @@ export default {
|
|||||||
.then(() => {
|
.then(() => {
|
||||||
buttons.success("move");
|
buttons.success("move");
|
||||||
this.preselect = removePrefix(items[0].to);
|
this.preselect = removePrefix(items[0].to);
|
||||||
this.$router.push({ path: this.dest });
|
if (this.user.redirectAfterCopyMove) this.$router.push({ path: this.dest });
|
||||||
|
else this.reload = true;
|
||||||
})
|
})
|
||||||
.catch((e) => {
|
.catch((e) => {
|
||||||
buttons.done("move");
|
buttons.done("move");
|
||||||
|
|||||||
@ -232,6 +232,7 @@
|
|||||||
"permissions": "Permissions",
|
"permissions": "Permissions",
|
||||||
"permissionsHelp": "You can set the user to be an administrator or choose the permissions individually. If you select \"Administrator\", all of the other options will be automatically checked. The management of users remains a privilege of an administrator.\n",
|
"permissionsHelp": "You can set the user to be an administrator or choose the permissions individually. If you select \"Administrator\", all of the other options will be automatically checked. The management of users remains a privilege of an administrator.\n",
|
||||||
"profileSettings": "Profile Settings",
|
"profileSettings": "Profile Settings",
|
||||||
|
"redirectAfterCopyMove": "Redirect to destination after copy/move",
|
||||||
"ruleExample1": "prevents the access to any dotfile (such as .git, .gitignore) in every folder.\n",
|
"ruleExample1": "prevents the access to any dotfile (such as .git, .gitignore) in every folder.\n",
|
||||||
"ruleExample2": "blocks the access to the file named Caddyfile on the root of the scope.",
|
"ruleExample2": "blocks the access to the file named Caddyfile on the root of the scope.",
|
||||||
"rules": "Rules",
|
"rules": "Rules",
|
||||||
|
|||||||
1
frontend/src/types/settings.d.ts
vendored
1
frontend/src/types/settings.d.ts
vendored
@ -18,6 +18,7 @@ interface SettingsDefaults {
|
|||||||
locale: string;
|
locale: string;
|
||||||
viewMode: ViewModeType;
|
viewMode: ViewModeType;
|
||||||
singleClick: boolean;
|
singleClick: boolean;
|
||||||
|
redirectAfterCopyMove: boolean;
|
||||||
sorting: Sorting;
|
sorting: Sorting;
|
||||||
perm: Permissions;
|
perm: Permissions;
|
||||||
commands: any[];
|
commands: any[];
|
||||||
|
|||||||
2
frontend/src/types/user.d.ts
vendored
2
frontend/src/types/user.d.ts
vendored
@ -10,6 +10,7 @@ interface IUser {
|
|||||||
lockPassword: boolean;
|
lockPassword: boolean;
|
||||||
hideDotfiles: boolean;
|
hideDotfiles: boolean;
|
||||||
singleClick: boolean;
|
singleClick: boolean;
|
||||||
|
redirectAfterCopyMove: boolean;
|
||||||
dateFormat: boolean;
|
dateFormat: boolean;
|
||||||
viewMode: ViewModeType;
|
viewMode: ViewModeType;
|
||||||
sorting?: Sorting;
|
sorting?: Sorting;
|
||||||
@ -30,6 +31,7 @@ interface IUserForm {
|
|||||||
lockPassword?: boolean;
|
lockPassword?: boolean;
|
||||||
hideDotfiles?: boolean;
|
hideDotfiles?: boolean;
|
||||||
singleClick?: boolean;
|
singleClick?: boolean;
|
||||||
|
redirectAfterCopyMove?: boolean;
|
||||||
dateFormat?: boolean;
|
dateFormat?: boolean;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -15,6 +15,10 @@
|
|||||||
<input type="checkbox" name="singleClick" v-model="singleClick" />
|
<input type="checkbox" name="singleClick" v-model="singleClick" />
|
||||||
{{ t("settings.singleClick") }}
|
{{ t("settings.singleClick") }}
|
||||||
</p>
|
</p>
|
||||||
|
<p>
|
||||||
|
<input type="checkbox" name="redirectAfterCopyMove" v-model="redirectAfterCopyMove" />
|
||||||
|
{{ t("settings.redirectAfterCopyMove") }}
|
||||||
|
</p>
|
||||||
<p>
|
<p>
|
||||||
<input type="checkbox" name="dateFormat" v-model="dateFormat" />
|
<input type="checkbox" name="dateFormat" v-model="dateFormat" />
|
||||||
{{ t("settings.setDateFormat") }}
|
{{ t("settings.setDateFormat") }}
|
||||||
@ -115,6 +119,7 @@ const currentPassword = ref<string>("");
|
|||||||
const isCurrentPasswordRequired = ref<boolean>(false);
|
const isCurrentPasswordRequired = ref<boolean>(false);
|
||||||
const hideDotfiles = ref<boolean>(false);
|
const hideDotfiles = ref<boolean>(false);
|
||||||
const singleClick = ref<boolean>(false);
|
const singleClick = ref<boolean>(false);
|
||||||
|
const redirectAfterCopyMove = ref<boolean>(false);
|
||||||
const dateFormat = ref<boolean>(false);
|
const dateFormat = ref<boolean>(false);
|
||||||
const locale = ref<string>("");
|
const locale = ref<string>("");
|
||||||
const aceEditorTheme = ref<string>("");
|
const aceEditorTheme = ref<string>("");
|
||||||
@ -139,6 +144,7 @@ onMounted(async () => {
|
|||||||
locale.value = authStore.user.locale;
|
locale.value = authStore.user.locale;
|
||||||
hideDotfiles.value = authStore.user.hideDotfiles;
|
hideDotfiles.value = authStore.user.hideDotfiles;
|
||||||
singleClick.value = authStore.user.singleClick;
|
singleClick.value = authStore.user.singleClick;
|
||||||
|
redirectAfterCopyMove.value = authStore.user.redirectAfterCopyMove;
|
||||||
dateFormat.value = authStore.user.dateFormat;
|
dateFormat.value = authStore.user.dateFormat;
|
||||||
aceEditorTheme.value = authStore.user.aceEditorTheme;
|
aceEditorTheme.value = authStore.user.aceEditorTheme;
|
||||||
layoutStore.loading = false;
|
layoutStore.loading = false;
|
||||||
@ -187,6 +193,7 @@ const updateSettings = async (event: Event) => {
|
|||||||
locale: locale.value,
|
locale: locale.value,
|
||||||
hideDotfiles: hideDotfiles.value,
|
hideDotfiles: hideDotfiles.value,
|
||||||
singleClick: singleClick.value,
|
singleClick: singleClick.value,
|
||||||
|
redirectAfterCopyMove: redirectAfterCopyMove.value,
|
||||||
dateFormat: dateFormat.value,
|
dateFormat: dateFormat.value,
|
||||||
aceEditorTheme: aceEditorTheme.value,
|
aceEditorTheme: aceEditorTheme.value,
|
||||||
};
|
};
|
||||||
@ -195,6 +202,7 @@ const updateSettings = async (event: Event) => {
|
|||||||
"locale",
|
"locale",
|
||||||
"hideDotfiles",
|
"hideDotfiles",
|
||||||
"singleClick",
|
"singleClick",
|
||||||
|
"redirectAfterCopyMove",
|
||||||
"dateFormat",
|
"dateFormat",
|
||||||
"aceEditorTheme",
|
"aceEditorTheme",
|
||||||
]);
|
]);
|
||||||
|
|||||||
46
http/auth.go
46
http/auth.go
@ -23,17 +23,18 @@ const (
|
|||||||
)
|
)
|
||||||
|
|
||||||
type userInfo struct {
|
type userInfo struct {
|
||||||
ID uint `json:"id"`
|
ID uint `json:"id"`
|
||||||
Locale string `json:"locale"`
|
Locale string `json:"locale"`
|
||||||
ViewMode users.ViewMode `json:"viewMode"`
|
ViewMode users.ViewMode `json:"viewMode"`
|
||||||
SingleClick bool `json:"singleClick"`
|
SingleClick bool `json:"singleClick"`
|
||||||
Perm users.Permissions `json:"perm"`
|
RedirectAfterCopyMove bool `json:"redirectAfterCopyMove"`
|
||||||
Commands []string `json:"commands"`
|
Perm users.Permissions `json:"perm"`
|
||||||
LockPassword bool `json:"lockPassword"`
|
Commands []string `json:"commands"`
|
||||||
HideDotfiles bool `json:"hideDotfiles"`
|
LockPassword bool `json:"lockPassword"`
|
||||||
DateFormat bool `json:"dateFormat"`
|
HideDotfiles bool `json:"hideDotfiles"`
|
||||||
Username string `json:"username"`
|
DateFormat bool `json:"dateFormat"`
|
||||||
AceEditorTheme string `json:"aceEditorTheme"`
|
Username string `json:"username"`
|
||||||
|
AceEditorTheme string `json:"aceEditorTheme"`
|
||||||
}
|
}
|
||||||
|
|
||||||
type authToken struct {
|
type authToken struct {
|
||||||
@ -204,17 +205,18 @@ func renewHandler(tokenExpireTime time.Duration) handleFunc {
|
|||||||
func printToken(w http.ResponseWriter, _ *http.Request, d *data, user *users.User, tokenExpirationTime time.Duration) (int, error) {
|
func printToken(w http.ResponseWriter, _ *http.Request, d *data, user *users.User, tokenExpirationTime time.Duration) (int, error) {
|
||||||
claims := &authToken{
|
claims := &authToken{
|
||||||
User: userInfo{
|
User: userInfo{
|
||||||
ID: user.ID,
|
ID: user.ID,
|
||||||
Locale: user.Locale,
|
Locale: user.Locale,
|
||||||
ViewMode: user.ViewMode,
|
ViewMode: user.ViewMode,
|
||||||
SingleClick: user.SingleClick,
|
SingleClick: user.SingleClick,
|
||||||
Perm: user.Perm,
|
RedirectAfterCopyMove: user.RedirectAfterCopyMove,
|
||||||
LockPassword: user.LockPassword,
|
Perm: user.Perm,
|
||||||
Commands: user.Commands,
|
LockPassword: user.LockPassword,
|
||||||
HideDotfiles: user.HideDotfiles,
|
Commands: user.Commands,
|
||||||
DateFormat: user.DateFormat,
|
HideDotfiles: user.HideDotfiles,
|
||||||
Username: user.Username,
|
DateFormat: user.DateFormat,
|
||||||
AceEditorTheme: user.AceEditorTheme,
|
Username: user.Username,
|
||||||
|
AceEditorTheme: user.AceEditorTheme,
|
||||||
},
|
},
|
||||||
RegisteredClaims: jwt.RegisteredClaims{
|
RegisteredClaims: jwt.RegisteredClaims{
|
||||||
IssuedAt: jwt.NewNumericDate(time.Now()),
|
IssuedAt: jwt.NewNumericDate(time.Now()),
|
||||||
|
|||||||
@ -8,16 +8,17 @@ import (
|
|||||||
// UserDefaults is a type that holds the default values
|
// UserDefaults is a type that holds the default values
|
||||||
// for some fields on User.
|
// for some fields on User.
|
||||||
type UserDefaults struct {
|
type UserDefaults struct {
|
||||||
Scope string `json:"scope"`
|
Scope string `json:"scope"`
|
||||||
Locale string `json:"locale"`
|
Locale string `json:"locale"`
|
||||||
ViewMode users.ViewMode `json:"viewMode"`
|
ViewMode users.ViewMode `json:"viewMode"`
|
||||||
SingleClick bool `json:"singleClick"`
|
SingleClick bool `json:"singleClick"`
|
||||||
Sorting files.Sorting `json:"sorting"`
|
RedirectAfterCopyMove bool `json:"redirectAfterCopyMove"`
|
||||||
Perm users.Permissions `json:"perm"`
|
Sorting files.Sorting `json:"sorting"`
|
||||||
Commands []string `json:"commands"`
|
Perm users.Permissions `json:"perm"`
|
||||||
HideDotfiles bool `json:"hideDotfiles"`
|
Commands []string `json:"commands"`
|
||||||
DateFormat bool `json:"dateFormat"`
|
HideDotfiles bool `json:"hideDotfiles"`
|
||||||
AceEditorTheme string `json:"aceEditorTheme"`
|
DateFormat bool `json:"dateFormat"`
|
||||||
|
AceEditorTheme string `json:"aceEditorTheme"`
|
||||||
}
|
}
|
||||||
|
|
||||||
// Apply applies the default options to a user.
|
// Apply applies the default options to a user.
|
||||||
@ -26,6 +27,7 @@ func (d *UserDefaults) Apply(u *users.User) {
|
|||||||
u.Locale = d.Locale
|
u.Locale = d.Locale
|
||||||
u.ViewMode = d.ViewMode
|
u.ViewMode = d.ViewMode
|
||||||
u.SingleClick = d.SingleClick
|
u.SingleClick = d.SingleClick
|
||||||
|
u.RedirectAfterCopyMove = d.RedirectAfterCopyMove
|
||||||
u.Perm = d.Perm
|
u.Perm = d.Perm
|
||||||
u.Sorting = d.Sorting
|
u.Sorting = d.Sorting
|
||||||
u.Commands = d.Commands
|
u.Commands = d.Commands
|
||||||
|
|||||||
@ -20,22 +20,23 @@ const (
|
|||||||
|
|
||||||
// User describes a user.
|
// User describes a user.
|
||||||
type User struct {
|
type User struct {
|
||||||
ID uint `storm:"id,increment" json:"id"`
|
ID uint `storm:"id,increment" json:"id"`
|
||||||
Username string `storm:"unique" json:"username"`
|
Username string `storm:"unique" json:"username"`
|
||||||
Password string `json:"password"`
|
Password string `json:"password"`
|
||||||
Scope string `json:"scope"`
|
Scope string `json:"scope"`
|
||||||
Locale string `json:"locale"`
|
Locale string `json:"locale"`
|
||||||
LockPassword bool `json:"lockPassword"`
|
LockPassword bool `json:"lockPassword"`
|
||||||
ViewMode ViewMode `json:"viewMode"`
|
ViewMode ViewMode `json:"viewMode"`
|
||||||
SingleClick bool `json:"singleClick"`
|
SingleClick bool `json:"singleClick"`
|
||||||
Perm Permissions `json:"perm"`
|
RedirectAfterCopyMove bool `json:"redirectAfterCopyMove"`
|
||||||
Commands []string `json:"commands"`
|
Perm Permissions `json:"perm"`
|
||||||
Sorting files.Sorting `json:"sorting"`
|
Commands []string `json:"commands"`
|
||||||
Fs afero.Fs `json:"-" yaml:"-"`
|
Sorting files.Sorting `json:"sorting"`
|
||||||
Rules []rules.Rule `json:"rules"`
|
Fs afero.Fs `json:"-" yaml:"-"`
|
||||||
HideDotfiles bool `json:"hideDotfiles"`
|
Rules []rules.Rule `json:"rules"`
|
||||||
DateFormat bool `json:"dateFormat"`
|
HideDotfiles bool `json:"hideDotfiles"`
|
||||||
AceEditorTheme string `json:"aceEditorTheme"`
|
DateFormat bool `json:"dateFormat"`
|
||||||
|
AceEditorTheme string `json:"aceEditorTheme"`
|
||||||
}
|
}
|
||||||
|
|
||||||
// GetRules implements rules.Provider.
|
// GetRules implements rules.Provider.
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user