Grupo: si003
Membros:
- 56894 - Pedro Alves
- 56897 - Pedro Almeida
- 56926 - Lucas Pinto
Para compilar o projeto, basta executar o shell script compile.sh
na raiz do projeto.
Este shell script compila o projeto com javac
para a diretoria target/classes
. Esses ficheiros são java bytecode.
Para executar o projeto, basta executar o shell script referente ao componente que se pretende executar.
Os argumentos referentes são passsados na totalidade para o componente, não sendo alterados pelo shell script.
O shell script executa o componente com java
.
Para executar o servidor, basta executar o shell script myCloudServer.sh
na raiz do projeto.
O servidor recebe os seguintes argumentos, sem ordem:
-p {porta}
(default:3000
) - Porta do servidor-b {diretoria base}
(default:./
) - Diretoria base dos ficheiros do servidor--chunkSize {tamanho}
(default:1024
) - Tamanho do buffer de leitura/escrita de streams
Para executar o cliente, basta executar o shell script myCloud.sh
na raiz do projeto.
Criar um utilizador:
-au {username} {password} {certificado}
- Registar utilizador para aceder ao sistema myCloud
Autenticar um utilizador
-u {username} -p {password}
- Adicionar username e password de um user para aceder ao sistema myCloud
O cliente recebe os seguintes argumentos, sem ordem:
-a {endereco}
(default:localhost:3000
) - Endereço e porta do servidor-b {caminho}
(default:./
) - Diretoria base do cliente--keyStoreAlias {alias}
(default:jpp
) - Nome do alias a usar para o keystore--keyStorePassword {password}
(default:123456
) - Password do keystore--keyStoreAliasPassword {password}
(default:123456
) - Password da key alias do keystore--chunkSize {tamanho}
(default:1024
) - Tamanho do buffer de leitura/escrita de streams-d {utilizador}
(default:São enviados para o própriio utilizador
) - Utilizador para o qual se enviam os ficheiros
Para além destes, deve receber um e apenas um dos seguintes argumentos:
-c {ficheiros}+
- Cifra os ficheiros (cifra híbrida) e envia-os para o servidor.-s {ficheiros}+
- Assina os ficheiros (assinatura digital) e envia-os para o servidor.-e {ficheiros}+
- Assina os ficheiros (assinatura digital), cifra os ficheiros (cifra híbrida), e envia-os para o servidor.-g {ficheiros}+
- Recebe e guarda os ficheiros do servidor. Os ficheiros cifrados são decifrados, e os ficheiros assinados são verificados.-x {ficheiros}+
- Elimina os ficheiros do servidor.
Onde {ficheiros}+
é uma lista de ficheiros separados por espaço. Os ficheiros são relativos à diretoria base do cliente.
Para facilitar o teste do projeto com ficheiros grandes, foi alocado o espaço necessário para o ficheiro, seguido da escrita (attach) de um conteúdo conhecido para que se possa verificar que a decifra e validação estão corretas.
Isto pode ser feito através do comando fallocate -l {tamanho} {ficheiro}
seguido de echo "{conteudo}" >> {ficheiro}
.
Por exemplo, para gerar um ficheiro de 3GB: fallocate -l 3G 3GB.txt; echo "twix o cao" >> 3GB.txt
.
- Suporte para ficheiros de tamanho superior a 2GB.
- Ao usar
long
em detrimento deint
para o envio/recepção da quantidade de bytes numa stream, é possível transferir ficheiros de tamanho igual a 263-1 bytes (8192
PetaBytes). - Como os ficheiros são transferidos para disco, o limite reside no espaço disponível no disco, geralmente muito superior à memória.
- Ao usar
- O cliente suporta a definição do alias e password do keystore e password do alias.
- Por defeito os valores são, respontivamente,
jpp
,123456
e123456
.
- Por defeito os valores são, respontivamente,
- O cliente e o servidor suportam a definição da diretoria base dos ficheiros.
- Por defeito, a diretoria base é a diretoria atual (definido pelo
java
).
- Por defeito, a diretoria base é a diretoria atual (definido pelo
- O servidor suporta a definição da porta.
- Por defeito, a porta é
3000
.
- Por defeito, a porta é
- O cliente e o servidor suportam a definição do tamanho do buffer de leitura/escrita.
- Por defeito, o tamanho do buffer é 1024 bytes. É sugerido o tamanho de 65535 bytes por ser este o valor do window size do tcp.
- O servidor responde a comandos/mensagens do servidor, permitindo assim escalar a quantidade de pedidos disponíveis
- Atualmente existem os comandso
exists
,upload
,download
, edelete
. O último não tem implementação no cliente.
- Atualmente existem os comandso
username="username"
# criar keystore
keytool -genkeypair -keysize 2048 -alias $username -keyalg rsa -keystore $username.keystore -storetype PKCS12
# criar certificado
keytool -export -keystore $username.keystore -alias $username -file $username.cer