2023-12-18 23:36:15 +01:00
|
|
|
// Workspace effimero: sta in /tmp o proprio in memoria
|
|
|
|
// Workspace e` autenticato: come si decide mentre si rifa il server
|
|
|
|
// Workspace ha id univoco (stringa), usato per connettercisi
|
|
|
|
// Workspace implementera` access control:
|
|
|
|
// * accedere al workspace
|
|
|
|
// * i singoli buffer
|
|
|
|
// - i metadati maybe????
|
|
|
|
// Workspace offre le seguenti features:
|
|
|
|
// * listare i buffer DONE
|
|
|
|
// * listare gli user connessi DONE
|
|
|
|
// * creare buffers DONE REPLACE THE ONE ON buffer.proto
|
|
|
|
// * NO ATTACH: responsabilita` del buffer service
|
|
|
|
// * contiene metadata dei buffers:
|
|
|
|
// * path
|
|
|
|
// * data creazione
|
|
|
|
// Buffer id NON E` il path DONE
|
|
|
|
// BufferService NON ha metadata:
|
|
|
|
// Workspace tiene traccia di utenti attached (nel futuro) DONE
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
syntax = "proto2";
|
|
|
|
|
|
|
|
package codemp.workspace_service;
|
2023-12-28 22:04:40 +01:00
|
|
|
import "model/user.proto";
|
2023-12-18 23:36:15 +01:00
|
|
|
|
|
|
|
|
|
|
|
message Empty {}
|
|
|
|
|
|
|
|
|
|
|
|
message WorkspaceFileTree {
|
|
|
|
// list of strings may be more efficient but it's a lot more hassle
|
|
|
|
required string payload = 1; // spappolata di json
|
|
|
|
}
|
|
|
|
|
|
|
|
message WorkspaceUserList {
|
|
|
|
repeated codemp.model.user.UserIdentity user = 1;
|
|
|
|
}
|
|
|
|
|
|
|
|
message WorkspaceMessage {
|
|
|
|
required int32 id = 1;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
message TreeRequest {} // empty
|
|
|
|
message UserRequest {}
|
|
|
|
message CursorResponse{}
|
|
|
|
message UserListRequest{}
|
|
|
|
|
|
|
|
service Workspace {
|
|
|
|
|
|
|
|
//
|
2023-12-28 00:21:41 +01:00
|
|
|
rpc Create (BufferPayload) returns (Empty);
|
2023-12-18 23:36:15 +01:00
|
|
|
|
|
|
|
rpc Attach (AttachRequest) returns (Token);
|
|
|
|
|
2023-12-28 00:21:41 +01:00
|
|
|
rpc ListBuffers (BufferListRequest) returns (BufferTree);
|
2023-12-18 23:36:15 +01:00
|
|
|
|
|
|
|
rpc ListUsers (UserListRequest) returns (UserList);
|
|
|
|
|
2023-12-28 00:21:41 +01:00
|
|
|
rpc ListBufferUsers (Empty) returns (Empty);
|
|
|
|
|
2023-12-18 23:36:15 +01:00
|
|
|
rpc Join (JoinRequest) returns (Token);
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
message JoinRequest{
|
|
|
|
required string username=1;
|
|
|
|
required string password=2;
|
|
|
|
}
|
|
|
|
|
|
|
|
message AttachRequest{
|
|
|
|
required string bufferAttach = 1;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
message Token{
|
|
|
|
required string token = 1;
|
|
|
|
}
|
|
|
|
|
|
|
|
enum FileEventType {
|
|
|
|
CREATE = 0;
|
|
|
|
DELETE = 1;
|
|
|
|
RENAME = 2;
|
|
|
|
}
|
|
|
|
|
|
|
|
message FileEvent {
|
|
|
|
required string buffer = 1;
|
|
|
|
|
|
|
|
required FileEventType type = 2;
|
|
|
|
}
|
|
|
|
|
|
|
|
enum UserEventType {
|
|
|
|
JOIN = 0;
|
|
|
|
LEAVE = 1;
|
|
|
|
}
|
|
|
|
|
|
|
|
message UserEvent {
|
|
|
|
required codemp.model.user.UserIdentity user = 1;
|
|
|
|
|
|
|
|
required UserEventType type = 2;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
message BufferPayload {
|
|
|
|
// buffer path to operate onto
|
|
|
|
required string path = 1;
|
|
|
|
|
|
|
|
// user id that is requesting the operation
|
|
|
|
required codemp.model.user.UserIdentity user = 2;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
message BufferListRequest{
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
message BufferNode{
|
|
|
|
required string path = 1;
|
|
|
|
}
|
|
|
|
|
|
|
|
message BufferTree{
|
|
|
|
repeated BufferNode buffers = 1;
|
|
|
|
}
|
|
|
|
|
|
|
|
message UserList{
|
|
|
|
repeated codemp.model.user.UserIdentity users = 1;
|
|
|
|
}
|