diff --git a/internal/util/apiclient/server/conversion/project.go b/internal/util/apiclient/server/conversion/project.go index 039fcf1d74..668c1b9892 100644 --- a/internal/util/apiclient/server/conversion/project.go +++ b/internal/util/apiclient/server/conversion/project.go @@ -14,6 +14,7 @@ func ToProjectDTO(project *workspace.Project) *serverapiclient.Project { Target: &project.Target, WorkspaceId: &project.WorkspaceId, Image: &project.Image, + User: &project.User, Repository: &serverapiclient.GitRepository{ Id: &project.Repository.Id, Name: &project.Repository.Name, diff --git a/pkg/api/docs/docs.go b/pkg/api/docs/docs.go index 895719141b..75b21b5d99 100644 --- a/pkg/api/docs/docs.go +++ b/pkg/api/docs/docs.go @@ -1122,6 +1122,9 @@ const docTemplate = `{ }, "source": { "$ref": "#/definitions/CreateWorkspaceRequestProjectSource" + }, + "user": { + "type": "string" } } }, @@ -1286,6 +1289,9 @@ const docTemplate = `{ "target": { "type": "string" }, + "user": { + "type": "string" + }, "workspaceId": { "type": "string" } @@ -1366,6 +1372,9 @@ const docTemplate = `{ "defaultProjectImage": { "type": "string" }, + "defaultProjectUser": { + "type": "string" + }, "frps": { "$ref": "#/definitions/FRPSConfig" }, diff --git a/pkg/api/docs/swagger.json b/pkg/api/docs/swagger.json index 895af0c14c..bc3e317656 100644 --- a/pkg/api/docs/swagger.json +++ b/pkg/api/docs/swagger.json @@ -1119,6 +1119,9 @@ }, "source": { "$ref": "#/definitions/CreateWorkspaceRequestProjectSource" + }, + "user": { + "type": "string" } } }, @@ -1283,6 +1286,9 @@ "target": { "type": "string" }, + "user": { + "type": "string" + }, "workspaceId": { "type": "string" } @@ -1363,6 +1369,9 @@ "defaultProjectImage": { "type": "string" }, + "defaultProjectUser": { + "type": "string" + }, "frps": { "$ref": "#/definitions/FRPSConfig" }, diff --git a/pkg/api/docs/swagger.yaml b/pkg/api/docs/swagger.yaml index 890042546e..0946ad323f 100644 --- a/pkg/api/docs/swagger.yaml +++ b/pkg/api/docs/swagger.yaml @@ -46,6 +46,8 @@ definitions: type: string source: $ref: '#/definitions/CreateWorkspaceRequestProjectSource' + user: + type: string type: object CreateWorkspaceRequestProjectSource: properties: @@ -151,6 +153,8 @@ definitions: $ref: '#/definitions/ProjectState' target: type: string + user: + type: string workspaceId: type: string type: object @@ -203,6 +207,8 @@ definitions: type: string defaultProjectImage: type: string + defaultProjectUser: + type: string frps: $ref: '#/definitions/FRPSConfig' headscalePort: diff --git a/pkg/cmd/server/server.go b/pkg/cmd/server/server.go index 8832056239..fee748e617 100644 --- a/pkg/cmd/server/server.go +++ b/pkg/cmd/server/server.go @@ -142,6 +142,7 @@ var ServerCmd = &cobra.Command{ ServerApiUrl: util.GetFrpcApiUrl(c.Frps.Protocol, c.Id, c.Frps.Domain), ServerUrl: util.GetFrpcServerUrl(c.Frps.Protocol, c.Id, c.Frps.Domain), DefaultProjectImage: c.DefaultProjectImage, + DefaultProjectUser: c.DefaultProjectUser, Provisioner: provisioner, NewWorkspaceLogger: func(workspaceId string) logger.Logger { return logger.NewWorkspaceLogger(logsDir, workspaceId) diff --git a/pkg/server/types.go b/pkg/server/types.go index 7d18c1c398..fe4d95bdc9 100644 --- a/pkg/server/types.go +++ b/pkg/server/types.go @@ -36,4 +36,5 @@ type Config struct { BinariesPath string `json:"binariesPath"` LogFilePath string `json:"logFilePath"` DefaultProjectImage string `json:"defaultProjectImage"` + DefaultProjectUser string `json:"defaultProjectUser"` } // @name ServerConfig diff --git a/pkg/server/workspaces/create.go b/pkg/server/workspaces/create.go index b32bd00fd2..b6edcad6db 100644 --- a/pkg/server/workspaces/create.go +++ b/pkg/server/workspaces/create.go @@ -44,9 +44,15 @@ func (s *WorkspaceService) CreateWorkspace(req dto.CreateWorkspaceRequest) (*wor projectImage = *project.Image } + projectUser := s.defaultProjectUser + if project.User != nil { + projectUser = *project.User + } + project := &workspace.Project{ Name: project.Name, Image: projectImage, + User: projectUser, Repository: project.Source.Repository, WorkspaceId: w.Id, ApiKey: apiKey, diff --git a/pkg/server/workspaces/dto/workspace.go b/pkg/server/workspaces/dto/workspace.go index c2edae2f2a..97f0dc1811 100644 --- a/pkg/server/workspaces/dto/workspace.go +++ b/pkg/server/workspaces/dto/workspace.go @@ -26,6 +26,7 @@ type CreateWorkspaceRequestProject struct { Id string `json:"id"` Name string `json:"name"` Image *string `json:"image,omitempty"` + User *string `json:"user,omitempty"` Source CreateWorkspaceRequestProjectSource `json:"source"` EnvVars map[string]string `json:"envVars"` } // @name CreateWorkspaceRequestProject diff --git a/pkg/server/workspaces/service.go b/pkg/server/workspaces/service.go index c5bbf5a2da..a368bbb547 100644 --- a/pkg/server/workspaces/service.go +++ b/pkg/server/workspaces/service.go @@ -41,6 +41,7 @@ type WorkspaceServiceConfig struct { ServerUrl string Provisioner provisioner.IProvisioner DefaultProjectImage string + DefaultProjectUser string ApiKeyService apikeys.IApiKeyService NewWorkspaceLogger func(workspaceId string) logger.Logger NewProjectLogger func(workspaceId, projectName string) logger.Logger @@ -55,6 +56,7 @@ func NewWorkspaceService(config WorkspaceServiceConfig) IWorkspaceService { serverApiUrl: config.ServerApiUrl, serverUrl: config.ServerUrl, defaultProjectImage: config.DefaultProjectImage, + defaultProjectUser: config.DefaultProjectUser, provisioner: config.Provisioner, newWorkspaceLogger: config.NewWorkspaceLogger, newProjectLogger: config.NewProjectLogger, @@ -72,6 +74,7 @@ type WorkspaceService struct { serverApiUrl string serverUrl string defaultProjectImage string + defaultProjectUser string newWorkspaceLogger func(workspaceId string) logger.Logger newProjectLogger func(workspaceId, projectName string) logger.Logger newWorkspaceLogReader func(workspaceId string) (io.Reader, error) diff --git a/pkg/server/workspaces/service_test.go b/pkg/server/workspaces/service_test.go index 8f363092a8..2211ae2a3f 100644 --- a/pkg/server/workspaces/service_test.go +++ b/pkg/server/workspaces/service_test.go @@ -30,6 +30,7 @@ import ( const serverApiUrl = "http://localhost:3000" const serverUrl = "http://localhost:3001" const defaultProjectImage = "daytonaio/workspace-project:latest" +const defaultProjectUser = "daytona" var target = provider.ProviderTarget{ Name: "test-target", @@ -102,6 +103,7 @@ func TestWorkspaceService(t *testing.T) { ServerUrl: serverUrl, ContainerRegistryStore: crStore, DefaultProjectImage: defaultProjectImage, + DefaultProjectUser: defaultProjectUser, ApiKeyService: apiKeyService, Provisioner: provisioner, NewWorkspaceLogger: func(workspaceId string) logger.Logger { diff --git a/pkg/serverapiclient/api/openapi.yaml b/pkg/serverapiclient/api/openapi.yaml index 2d62afa0f1..13484a931d 100644 --- a/pkg/serverapiclient/api/openapi.yaml +++ b/pkg/serverapiclient/api/openapi.yaml @@ -799,6 +799,7 @@ components: branch: branch sha: sha url: url + user: user - image: image envVars: key: envVars @@ -815,6 +816,7 @@ components: branch: branch sha: sha url: url + user: user name: name id: id target: target @@ -848,6 +850,7 @@ components: branch: branch sha: sha url: url + user: user properties: envVars: additionalProperties: @@ -861,6 +864,8 @@ components: type: string source: $ref: '#/components/schemas/CreateWorkspaceRequestProjectSource' + user: + type: string type: object CreateWorkspaceRequestProjectSource: example: @@ -1021,6 +1026,7 @@ components: branch: branch sha: sha url: url + user: user target: target workspaceId: workspaceId properties: @@ -1034,6 +1040,8 @@ components: $ref: '#/components/schemas/ProjectState' target: type: string + user: + type: string workspaceId: type: string type: object @@ -1105,6 +1113,7 @@ components: binariesPath: binariesPath logFilePath: logFilePath defaultProjectImage: defaultProjectImage + defaultProjectUser: defaultProjectUser providersDir: providersDir id: id frps: @@ -1118,6 +1127,8 @@ components: type: string defaultProjectImage: type: string + defaultProjectUser: + type: string frps: $ref: '#/components/schemas/FRPSConfig' headscalePort: @@ -1158,6 +1169,7 @@ components: branch: branch sha: sha url: url + user: user target: target workspaceId: workspaceId - image: image @@ -1175,6 +1187,7 @@ components: branch: branch sha: sha url: url + user: user target: target workspaceId: workspaceId name: name @@ -1210,6 +1223,7 @@ components: branch: branch sha: sha url: url + user: user target: target workspaceId: workspaceId - image: image @@ -1227,6 +1241,7 @@ components: branch: branch sha: sha url: url + user: user target: target workspaceId: workspaceId name: name diff --git a/pkg/serverapiclient/docs/CreateWorkspaceRequestProject.md b/pkg/serverapiclient/docs/CreateWorkspaceRequestProject.md index 36ef6213fa..46e3aa1abe 100644 --- a/pkg/serverapiclient/docs/CreateWorkspaceRequestProject.md +++ b/pkg/serverapiclient/docs/CreateWorkspaceRequestProject.md @@ -9,6 +9,7 @@ Name | Type | Description | Notes **Image** | Pointer to **string** | | [optional] **Name** | Pointer to **string** | | [optional] **Source** | Pointer to [**CreateWorkspaceRequestProjectSource**](CreateWorkspaceRequestProjectSource.md) | | [optional] +**User** | Pointer to **string** | | [optional] ## Methods @@ -154,6 +155,31 @@ SetSource sets Source field to given value. HasSource returns a boolean if a field has been set. +### GetUser + +`func (o *CreateWorkspaceRequestProject) GetUser() string` + +GetUser returns the User field if non-nil, zero value otherwise. + +### GetUserOk + +`func (o *CreateWorkspaceRequestProject) GetUserOk() (*string, bool)` + +GetUserOk returns a tuple with the User field if it's non-nil, zero value otherwise +and a boolean to check if the value has been set. + +### SetUser + +`func (o *CreateWorkspaceRequestProject) SetUser(v string)` + +SetUser sets User field to given value. + +### HasUser + +`func (o *CreateWorkspaceRequestProject) HasUser() bool` + +HasUser returns a boolean if a field has been set. + [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) diff --git a/pkg/serverapiclient/docs/Project.md b/pkg/serverapiclient/docs/Project.md index 6ef560e605..9dbb48d2ab 100644 --- a/pkg/serverapiclient/docs/Project.md +++ b/pkg/serverapiclient/docs/Project.md @@ -9,6 +9,7 @@ Name | Type | Description | Notes **Repository** | Pointer to [**GitRepository**](GitRepository.md) | | [optional] **State** | Pointer to [**ProjectState**](ProjectState.md) | | [optional] **Target** | Pointer to **string** | | [optional] +**User** | Pointer to **string** | | [optional] **WorkspaceId** | Pointer to **string** | | [optional] ## Methods @@ -155,6 +156,31 @@ SetTarget sets Target field to given value. HasTarget returns a boolean if a field has been set. +### GetUser + +`func (o *Project) GetUser() string` + +GetUser returns the User field if non-nil, zero value otherwise. + +### GetUserOk + +`func (o *Project) GetUserOk() (*string, bool)` + +GetUserOk returns a tuple with the User field if it's non-nil, zero value otherwise +and a boolean to check if the value has been set. + +### SetUser + +`func (o *Project) SetUser(v string)` + +SetUser sets User field to given value. + +### HasUser + +`func (o *Project) HasUser() bool` + +HasUser returns a boolean if a field has been set. + ### GetWorkspaceId `func (o *Project) GetWorkspaceId() string` diff --git a/pkg/serverapiclient/docs/ServerConfig.md b/pkg/serverapiclient/docs/ServerConfig.md index f8a9f33486..75cedbe864 100644 --- a/pkg/serverapiclient/docs/ServerConfig.md +++ b/pkg/serverapiclient/docs/ServerConfig.md @@ -7,6 +7,7 @@ Name | Type | Description | Notes **ApiPort** | Pointer to **int32** | | [optional] **BinariesPath** | Pointer to **string** | | [optional] **DefaultProjectImage** | Pointer to **string** | | [optional] +**DefaultProjectUser** | Pointer to **string** | | [optional] **Frps** | Pointer to [**FRPSConfig**](FRPSConfig.md) | | [optional] **HeadscalePort** | Pointer to **int32** | | [optional] **Id** | Pointer to **string** | | [optional] @@ -109,6 +110,31 @@ SetDefaultProjectImage sets DefaultProjectImage field to given value. HasDefaultProjectImage returns a boolean if a field has been set. +### GetDefaultProjectUser + +`func (o *ServerConfig) GetDefaultProjectUser() string` + +GetDefaultProjectUser returns the DefaultProjectUser field if non-nil, zero value otherwise. + +### GetDefaultProjectUserOk + +`func (o *ServerConfig) GetDefaultProjectUserOk() (*string, bool)` + +GetDefaultProjectUserOk returns a tuple with the DefaultProjectUser field if it's non-nil, zero value otherwise +and a boolean to check if the value has been set. + +### SetDefaultProjectUser + +`func (o *ServerConfig) SetDefaultProjectUser(v string)` + +SetDefaultProjectUser sets DefaultProjectUser field to given value. + +### HasDefaultProjectUser + +`func (o *ServerConfig) HasDefaultProjectUser() bool` + +HasDefaultProjectUser returns a boolean if a field has been set. + ### GetFrps `func (o *ServerConfig) GetFrps() FRPSConfig` diff --git a/pkg/serverapiclient/model_create_workspace_request_project.go b/pkg/serverapiclient/model_create_workspace_request_project.go index 3448fce13b..6f10255ddc 100644 --- a/pkg/serverapiclient/model_create_workspace_request_project.go +++ b/pkg/serverapiclient/model_create_workspace_request_project.go @@ -24,6 +24,7 @@ type CreateWorkspaceRequestProject struct { Image *string `json:"image,omitempty"` Name *string `json:"name,omitempty"` Source *CreateWorkspaceRequestProjectSource `json:"source,omitempty"` + User *string `json:"user,omitempty"` } // NewCreateWorkspaceRequestProject instantiates a new CreateWorkspaceRequestProject object @@ -203,6 +204,38 @@ func (o *CreateWorkspaceRequestProject) SetSource(v CreateWorkspaceRequestProjec o.Source = &v } +// GetUser returns the User field value if set, zero value otherwise. +func (o *CreateWorkspaceRequestProject) GetUser() string { + if o == nil || IsNil(o.User) { + var ret string + return ret + } + return *o.User +} + +// GetUserOk returns a tuple with the User field value if set, nil otherwise +// and a boolean to check if the value has been set. +func (o *CreateWorkspaceRequestProject) GetUserOk() (*string, bool) { + if o == nil || IsNil(o.User) { + return nil, false + } + return o.User, true +} + +// HasUser returns a boolean if a field has been set. +func (o *CreateWorkspaceRequestProject) HasUser() bool { + if o != nil && !IsNil(o.User) { + return true + } + + return false +} + +// SetUser gets a reference to the given string and assigns it to the User field. +func (o *CreateWorkspaceRequestProject) SetUser(v string) { + o.User = &v +} + func (o CreateWorkspaceRequestProject) MarshalJSON() ([]byte, error) { toSerialize, err := o.ToMap() if err != nil { @@ -228,6 +261,9 @@ func (o CreateWorkspaceRequestProject) ToMap() (map[string]interface{}, error) { if !IsNil(o.Source) { toSerialize["source"] = o.Source } + if !IsNil(o.User) { + toSerialize["user"] = o.User + } return toSerialize, nil } diff --git a/pkg/serverapiclient/model_project.go b/pkg/serverapiclient/model_project.go index 09838be62d..a4d26ea5aa 100644 --- a/pkg/serverapiclient/model_project.go +++ b/pkg/serverapiclient/model_project.go @@ -24,6 +24,7 @@ type Project struct { Repository *GitRepository `json:"repository,omitempty"` State *ProjectState `json:"state,omitempty"` Target *string `json:"target,omitempty"` + User *string `json:"user,omitempty"` WorkspaceId *string `json:"workspaceId,omitempty"` } @@ -204,6 +205,38 @@ func (o *Project) SetTarget(v string) { o.Target = &v } +// GetUser returns the User field value if set, zero value otherwise. +func (o *Project) GetUser() string { + if o == nil || IsNil(o.User) { + var ret string + return ret + } + return *o.User +} + +// GetUserOk returns a tuple with the User field value if set, nil otherwise +// and a boolean to check if the value has been set. +func (o *Project) GetUserOk() (*string, bool) { + if o == nil || IsNil(o.User) { + return nil, false + } + return o.User, true +} + +// HasUser returns a boolean if a field has been set. +func (o *Project) HasUser() bool { + if o != nil && !IsNil(o.User) { + return true + } + + return false +} + +// SetUser gets a reference to the given string and assigns it to the User field. +func (o *Project) SetUser(v string) { + o.User = &v +} + // GetWorkspaceId returns the WorkspaceId field value if set, zero value otherwise. func (o *Project) GetWorkspaceId() string { if o == nil || IsNil(o.WorkspaceId) { @@ -261,6 +294,9 @@ func (o Project) ToMap() (map[string]interface{}, error) { if !IsNil(o.Target) { toSerialize["target"] = o.Target } + if !IsNil(o.User) { + toSerialize["user"] = o.User + } if !IsNil(o.WorkspaceId) { toSerialize["workspaceId"] = o.WorkspaceId } diff --git a/pkg/serverapiclient/model_server_config.go b/pkg/serverapiclient/model_server_config.go index 7fdd5099f6..bcc8657e53 100644 --- a/pkg/serverapiclient/model_server_config.go +++ b/pkg/serverapiclient/model_server_config.go @@ -22,6 +22,7 @@ type ServerConfig struct { ApiPort *int32 `json:"apiPort,omitempty"` BinariesPath *string `json:"binariesPath,omitempty"` DefaultProjectImage *string `json:"defaultProjectImage,omitempty"` + DefaultProjectUser *string `json:"defaultProjectUser,omitempty"` Frps *FRPSConfig `json:"frps,omitempty"` HeadscalePort *int32 `json:"headscalePort,omitempty"` Id *string `json:"id,omitempty"` @@ -144,6 +145,38 @@ func (o *ServerConfig) SetDefaultProjectImage(v string) { o.DefaultProjectImage = &v } +// GetDefaultProjectUser returns the DefaultProjectUser field value if set, zero value otherwise. +func (o *ServerConfig) GetDefaultProjectUser() string { + if o == nil || IsNil(o.DefaultProjectUser) { + var ret string + return ret + } + return *o.DefaultProjectUser +} + +// GetDefaultProjectUserOk returns a tuple with the DefaultProjectUser field value if set, nil otherwise +// and a boolean to check if the value has been set. +func (o *ServerConfig) GetDefaultProjectUserOk() (*string, bool) { + if o == nil || IsNil(o.DefaultProjectUser) { + return nil, false + } + return o.DefaultProjectUser, true +} + +// HasDefaultProjectUser returns a boolean if a field has been set. +func (o *ServerConfig) HasDefaultProjectUser() bool { + if o != nil && !IsNil(o.DefaultProjectUser) { + return true + } + + return false +} + +// SetDefaultProjectUser gets a reference to the given string and assigns it to the DefaultProjectUser field. +func (o *ServerConfig) SetDefaultProjectUser(v string) { + o.DefaultProjectUser = &v +} + // GetFrps returns the Frps field value if set, zero value otherwise. func (o *ServerConfig) GetFrps() FRPSConfig { if o == nil || IsNil(o.Frps) { @@ -387,6 +420,9 @@ func (o ServerConfig) ToMap() (map[string]interface{}, error) { if !IsNil(o.DefaultProjectImage) { toSerialize["defaultProjectImage"] = o.DefaultProjectImage } + if !IsNil(o.DefaultProjectUser) { + toSerialize["defaultProjectUser"] = o.DefaultProjectUser + } if !IsNil(o.Frps) { toSerialize["frps"] = o.Frps } diff --git a/pkg/views/server/configure.go b/pkg/views/server/configure.go index 7886e43576..1b8654870a 100644 --- a/pkg/views/server/configure.go +++ b/pkg/views/server/configure.go @@ -39,6 +39,9 @@ func ConfigurationForm(config *serverapiclient.ServerConfig) *serverapiclient.Se huh.NewInput(). Title("Default Project Image"). Value(config.DefaultProjectImage), + huh.NewInput(). + Title("Default Project User"). + Value(config.DefaultProjectUser), ), ) diff --git a/pkg/workspace/workspace.go b/pkg/workspace/workspace.go index 91dbdf8648..7367c05867 100644 --- a/pkg/workspace/workspace.go +++ b/pkg/workspace/workspace.go @@ -17,6 +17,7 @@ import ( type Project struct { Name string `json:"name"` Image string `json:"image"` + User string `json:"user"` Repository *gitprovider.GitRepository `json:"repository"` WorkspaceId string `json:"workspaceId"` ApiKey string `json:"-"`