mirror of https://github.com/micromata/borgbackup-butler.git

Kai Reinhard
17.56.2021 812f12a69468d5b20fef7afc6cd82c130481e9ad
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
package de.micromata.borgbutler.server.user;
 
import de.micromata.borgbutler.server.Languages;
import de.micromata.borgbutler.server.RunningMode;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
 
import java.util.Locale;
import java.util.prefs.BackingStoreException;
import java.util.prefs.Preferences;
 
/**
 * Contains only one (dummy) user (for desktop version).
 */
public class SingleUserManager extends UserManager {
    private static final String USER_LOCAL_PREF_KEY = "userLocale";
    private static Logger log = LoggerFactory.getLogger(SingleUserManager.class);
    private UserData singleUser;
    private Preferences preferences;
 
    public SingleUserManager() {
        if (RunningMode.getUserManagement() != RunningMode.UserManagement.SINGLE) {
            throw new IllegalStateException("Can't use SingleUserManager in user management mode '" + RunningMode.getUserManagement()
                    + "'. Only allowed in '" + RunningMode.UserManagement.SINGLE + "'.");
        }
        log.info("Using SingleUserManger as user manager.");
        preferences = Preferences.userRoot().node("de").node("micromata").node("borgbutler");
        singleUser = new UserData();
        singleUser.setUsername("admin");
        singleUser.setAdmin(true);
        load(singleUser);
    }
 
    public UserData getUser(String id) {
        return singleUser;
    }
 
    /**
     * Stores only the user's configured locale as preference.
     *
     * @param userData
     * @see Preferences
     */
    @Override
    public void saveUser(UserData userData) {
        Locale locale = userData.getLocale();
        this.singleUser.setLocale(locale);
        String dateFormat = userData.getDateFormat();
        this.singleUser.setDateFormat(dateFormat);
        String lang = Languages.asString(locale);
        if (lang != null) {
            preferences.put(USER_LOCAL_PREF_KEY, lang);
        } else {
            preferences.remove(USER_LOCAL_PREF_KEY);
        }
        try {
            preferences.flush();
        } catch (BackingStoreException ex) {
            log.error("Can't save user locale to preferences: " + ex.getMessage(), ex);
        }
    }
 
    private void load(UserData userData) {
        String language = preferences.get(USER_LOCAL_PREF_KEY, "en");
        Locale locale = Languages.asLocale(language);
        singleUser.setLocale(locale);
    }
}