2021-11-13 19:18:06 +00:00
// Copyright 2021 Woodpecker Authors
2018-03-21 13:02:17 +00:00
//
2018-02-19 22:24:10 +00:00
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
2018-03-21 13:02:17 +00:00
//
2018-02-19 22:24:10 +00:00
// http://www.apache.org/licenses/LICENSE-2.0
2018-03-21 13:02:17 +00:00
//
2018-02-19 22:24:10 +00:00
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
2017-05-14 17:57:38 +00:00
package model
2024-09-30 11:33:16 +00:00
import (
"encoding/base32"
"fmt"
"github.com/gorilla/securecookie"
)
2021-11-13 19:18:06 +00:00
type Agent struct {
2024-10-06 15:13:41 +00:00
ID int64 ` json:"id" xorm:"pk autoincr 'id'" `
Created int64 ` json:"created" xorm:"created" `
Updated int64 ` json:"updated" xorm:"updated" `
Name string ` json:"name" xorm:"name" `
OwnerID int64 ` json:"owner_id" xorm:"'owner_id'" `
Token string ` json:"token" xorm:"token" `
LastContact int64 ` json:"last_contact" xorm:"last_contact" `
LastWork int64 ` json:"last_work" xorm:"last_work" ` // last time the agent did something, this value is used to determine if the agent is still doing work used by the autoscaler
Platform string ` json:"platform" xorm:"VARCHAR(100) 'platform'" `
Backend string ` json:"backend" xorm:"VARCHAR(100) 'backend'" `
Capacity int32 ` json:"capacity" xorm:"capacity" `
Version string ` json:"version" xorm:"'version'" `
NoSchedule bool ` json:"no_schedule" xorm:"no_schedule" `
CustomLabels map [ string ] string ` json:"custom_labels" xorm:"JSON 'custom_labels'" `
2024-09-30 11:33:16 +00:00
// OrgID is counted as unset if set to -1, this is done to ensure a new(Agent) still enforce the OrgID check by default
OrgID int64 ` json:"org_id" xorm:"INDEX 'org_id'" `
2023-06-03 19:38:36 +00:00
} // @name Agent
2017-05-14 17:57:38 +00:00
2024-09-30 11:33:16 +00:00
const (
IDNotSet = - 1
agentFilterOrgID = "org-id"
)
2024-05-13 20:58:21 +00:00
// TableName return database table name for xorm.
2021-11-13 19:18:06 +00:00
func ( Agent ) TableName ( ) string {
return "agents"
2017-05-14 17:57:38 +00:00
}
2023-01-28 13:13:04 +00:00
func ( a * Agent ) IsSystemAgent ( ) bool {
2024-09-30 11:33:16 +00:00
return a . OwnerID == IDNotSet
}
func GenerateNewAgentToken ( ) string {
return base32 . StdEncoding . EncodeToString ( securecookie . GenerateRandomKey ( 32 ) )
}
func ( a * Agent ) GetServerLabels ( ) ( map [ string ] string , error ) {
filters := make ( map [ string ] string )
// enforce filters for user and organization agents
if a . OrgID != IDNotSet {
filters [ agentFilterOrgID ] = fmt . Sprintf ( "%d" , a . OrgID )
} else {
filters [ agentFilterOrgID ] = "*"
}
return filters , nil
}
func ( a * Agent ) CanAccessRepo ( repo * Repo ) bool {
// global agent
if a . OrgID == IDNotSet {
return true
}
// agent has access to the organization
if a . OrgID == repo . OrgID {
return true
}
return false
2023-01-28 13:13:04 +00:00
}