Ai
1 Star 0 Fork 1

mysnapcore/mysnapd

forked from tupelo-shen/mysnapd 
加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
文件
克隆/下载
api.go 4.91 KB
一键复制 编辑 原始数据 按行查看 历史
tupelo-shen 提交于 2022-11-08 22:56 +08:00 . fix: daemon commit
// -*- Mode: Go; indent-tabs-mode: t -*-
/*
* Copyright (C) 2015-2022 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 daemon
import (
"fmt"
"net/http"
"strconv"
"strings"
"github.com/gorilla/mux"
"gitee.com/mysnapcore/mysnapd/overlord/assertstate"
"gitee.com/mysnapcore/mysnapd/overlord/auth"
"gitee.com/mysnapcore/mysnapd/overlord/configstate"
"gitee.com/mysnapcore/mysnapd/overlord/snapstate"
"gitee.com/mysnapcore/mysnapd/overlord/state"
"gitee.com/mysnapcore/mysnapd/strutil"
)
var api = []*Command{
rootCmd,
sysInfoCmd,
loginCmd,
logoutCmd,
appIconCmd,
findCmd,
snapsCmd,
snapCmd,
snapFileCmd,
snapDownloadCmd,
snapConfCmd,
interfacesCmd,
assertsCmd,
assertsFindManyCmd,
stateChangeCmd,
stateChangesCmd,
createUserCmd,
buyCmd,
readyToBuyCmd,
snapctlCmd,
usersCmd,
sectionsCmd,
aliasesCmd,
appsCmd,
logsCmd,
warningsCmd,
debugPprofCmd,
debugCmd,
snapshotCmd,
snapshotExportCmd,
connectionsCmd,
modelCmd,
cohortsCmd,
serialModelCmd,
systemsCmd,
systemsActionCmd,
themesCmd,
accessoriesChangeCmd,
validationSetsListCmd,
validationSetsCmd,
routineConsoleConfStartCmd,
systemRecoveryKeysCmd,
quotaGroupsCmd,
quotaGroupInfoCmd,
}
const (
polkitActionLogin = "io.snapcraft.snapd.login"
polkitActionManage = "io.snapcraft.snapd.manage"
polkitActionManageInterfaces = "io.snapcraft.snapd.manage-interfaces"
)
// userFromRequest extracts user information from request and return the respective user in state, if valid
// It requires the state to be locked
func userFromRequest(st *state.State, req *http.Request) (*auth.UserState, error) {
// extract macaroons data from request
header := req.Header.Get("Authorization")
if header == "" {
return nil, auth.ErrInvalidAuth
}
authorizationData := strings.SplitN(header, " ", 2)
if len(authorizationData) != 2 || authorizationData[0] != "Macaroon" {
return nil, fmt.Errorf("authorization header misses Macaroon prefix")
}
var macaroon string
var discharges []string
for _, field := range strutil.CommaSeparatedList(authorizationData[1]) {
if strings.HasPrefix(field, `root="`) {
macaroon = strings.TrimSuffix(field[6:], `"`)
}
if strings.HasPrefix(field, `discharge="`) {
discharges = append(discharges, strings.TrimSuffix(field[11:], `"`))
}
}
if macaroon == "" {
return nil, fmt.Errorf("invalid authorization header")
}
user, err := auth.CheckMacaroon(st, macaroon, discharges)
return user, err
}
var muxVars = mux.Vars
func storeFrom(d *Daemon) snapstate.StoreService {
st := d.overlord.State()
st.Lock()
defer st.Unlock()
return snapstate.Store(st, nil)
}
var (
snapstateInstall = snapstate.Install
snapstateInstallPath = snapstate.InstallPath
snapstateInstallPathMany = snapstate.InstallPathMany
snapstateRefreshCandidates = snapstate.RefreshCandidates
snapstateTryPath = snapstate.TryPath
snapstateUpdate = snapstate.Update
snapstateUpdateMany = snapstate.UpdateMany
snapstateInstallMany = snapstate.InstallMany
snapstateRemoveMany = snapstate.RemoveMany
snapstateResolveValSetsEnforcementError = snapstate.ResolveValidationSetsEnforcementError
snapstateRevert = snapstate.Revert
snapstateRevertToRevision = snapstate.RevertToRevision
snapstateSwitch = snapstate.Switch
snapstateProceedWithRefresh = snapstate.ProceedWithRefresh
snapstateHoldRefreshesBySystem = snapstate.HoldRefreshesBySystem
configstateConfigureInstalled = configstate.ConfigureInstalled
assertstateRefreshSnapAssertions = assertstate.RefreshSnapAssertions
assertstateRestoreValidationSetsTracking = assertstate.RestoreValidationSetsTracking
)
func ensureStateSoonImpl(st *state.State) {
st.EnsureBefore(0)
}
var ensureStateSoon = ensureStateSoonImpl
func newChange(st *state.State, kind, summary string, tsets []*state.TaskSet, snapNames []string) *state.Change {
chg := st.NewChange(kind, summary)
for _, ts := range tsets {
chg.AddAll(ts)
}
if snapNames != nil {
chg.Set("snap-names", snapNames)
}
return chg
}
func isTrue(form *Form, key string) bool {
values := form.Values[key]
if len(values) == 0 {
return false
}
b, err := strconv.ParseBool(values[0])
if err != nil {
return false
}
return b
}
Loading...
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
Go
1
https://gitee.com/mysnapcore/mysnapd.git
git@gitee.com:mysnapcore/mysnapd.git
mysnapcore
mysnapd
mysnapd
v0.1.0

搜索帮助