-
Notifications
You must be signed in to change notification settings - Fork 565
/
state.go
65 lines (53 loc) · 1.76 KB
/
state.go
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
// -*- Mode: Go; indent-tabs-mode: t -*-
/*
* Copyright (C) 2019 Canonical Ltd
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License version 3 as
* published by the Free Software Foundation.
*
* 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 General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
*/
// Package internal (of devicestate) provides functions to access and
// set the device state for use only by devicestate, for convenience they
// are also exposed via devicestatetest for use in tests.
package internal
import (
"errors"
"github.com/snapcore/snapd/overlord/auth"
"github.com/snapcore/snapd/overlord/state"
)
// Device returns the device details from the state.
func Device(st *state.State) (*auth.DeviceState, error) {
var authStateData auth.AuthState
err := st.Get("auth", &authStateData)
if errors.Is(err, state.ErrNoState) {
return &auth.DeviceState{}, nil
} else if err != nil {
return nil, err
}
if authStateData.Device == nil {
return &auth.DeviceState{}, nil
}
return authStateData.Device, nil
}
// SetDevice updates the device details in the state.
func SetDevice(st *state.State, device *auth.DeviceState) error {
var authStateData auth.AuthState
err := st.Get("auth", &authStateData)
if errors.Is(err, state.ErrNoState) {
authStateData = auth.AuthState{}
} else if err != nil {
return err
}
authStateData.Device = device
st.Set("auth", authStateData)
return nil
}