SansShell is built on a principle of "Don't pay for what you don't use". This is advantageous in both minimizing the resources of SansShell server (binary size, memory footprint, etc) as well as reducing the security risk of running it. To accomplish that, all of the SansShell services are independent modules, which can be optionally included at build time.
It is divided into 2 parts:
client, part of cli app running on localserver, part of server app running on remote machine
server should follows hexagonal architecture. It divides into following layers:
application, contains the application logicinfrastructure, contains the implementation of the ports and adaptersinput, contains user interface/api adapters implementation, such as GRPC controllers, CLI command handlers and etcoutput, contains adapters to external systems implementation, such as HTTP/GRPC client, repositories and etc
client should be simple wrapper over GRPC client, which is generated from protobuf definition.
Other:
./<service-name>.gocontains the service related commands./<service-name>.protoprotobuf definition of client-server communication./<service-name>.pb.goGoLang definition of./<service-name>.protofile. Auto-generated. Do not edit manually./<service-name>_grpc.pb.goPure definition of GRPC client and server. Auto-generated. Do not edit manually./<service-name>_grpcproxy.pb.goSansshell extension of pure GRPC client and server, go here to know more. Auto-generated. Do not edit manually