代码拉取完成,页面将自动刷新
同步操作将从 tupelo-shen/mysnapd 强制同步,此操作会覆盖自 Fork 仓库以来所做的任何修改,且无法恢复!!!
确定后同步将在后台操作,完成时将刷新页面,请耐心等待。
// -*- 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
}
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。