OCS api calls cleanup

This commit is contained in:
Bjoern Schiessle 2012-08-03 13:52:41 +02:00
parent a0b2474019
commit 773d7b119d
2 changed files with 83 additions and 117 deletions

View file

@ -32,11 +32,11 @@ class Keymanager {
/**
* @brief retrieve private key from a user
*
* @param string user name
* @return string private key or false
*/
public static function getPrivateKey( $user ) {
public static function getPrivateKey() {
$user = \OCP\User::getUser();
$view = new \OC_FilesystemView( '/' . $user . '/' . 'files_encryption' );
return $view->file_get_contents( '/' . $user.'.private.key' );
@ -91,17 +91,16 @@ class Keymanager {
* @brief retrieve file encryption key
*
* @param string file name
* @param string user name of the file owner
* @return string file key or false
*/
public static function getFileKey( $userId, $path ) {
public static function getFileKey( $path ) {
$keypath = ltrim( $path, '/' );
$user = $userId;
$user = \OCP\User::getUser();
// update $keypath and $user if path point to a file shared by someone else
$query = \OC_DB::prepare( "SELECT uid_owner, source, target FROM `*PREFIX*sharing` WHERE target = ? AND uid_shared_with = ?" );
$result = $query->execute( array ('/'.$userId.'/files/'.$keypath, $userId));
$result = $query->execute( array ('/'.$user.'/files/'.$keypath, $user));
if ($row = $result->fetchRow()){
$keypath = $row['source'];
$keypath_parts=explode('/',$keypath);
@ -114,16 +113,16 @@ class Keymanager {
}
/**
* @brief store private key from a user
* @brief store private key from the user
*
* @param string user name
* @param string key
* @return bool true/false
*/
public static function setPrivateKey($user, $key) {
public static function setPrivateKey($key) {
\OC_FileProxy::$enabled = false;
$user = \OCP\User::getUser();
$view = new \OC_FilesystemView('/'.$user.'/files_encryption');
if (!$view->file_exists('')) $view->mkdir('');
$result = $view->file_put_contents($user.'.private.key', $key);
@ -135,19 +134,18 @@ class Keymanager {
/**
* @brief store public key from a user
* @brief store public key of the user
*
* @param string user name
* @param string key
* @return bool true/false
*/
public static function setPublicKey($user, $key) {
public static function setPublicKey($key) {
\OC_FileProxy::$enabled = false;
$view = new \OC_FilesystemView('/public-keys');
if (!$view->file_exists('')) $view->mkdir('');
$result = $view->file_put_contents($user.'.public.key', $key);
$result = $view->file_put_contents(\OCP\User::getUser().'.public.key', $key);
\OC_FileProxy::$enabled = true;
@ -157,16 +155,16 @@ class Keymanager {
/**
* @brief store file encryption key
*
* @param string $userId name of the file owner
* @param string $path relative path of the file, including filename
* @param string $key
* @return bool true/false
*/
public static function setFileKey( $user, $path, $key, $view, $dbClassName, $fileProxyClassName ) {
public static function setFileKey( $path, $key, $view, $dbClassName, $fileProxyClassName ) {
$fileProxyClassName::$enabled = false;
$targetpath = ltrim( $path, '/' );
$user = \OCP\User::getUser();
// update $keytarget and $user if key belongs to a file shared by someone else
$query = $dbClassName::prepare( "SELECT uid_owner, source, target FROM `*PREFIX*sharing` WHERE target = ? AND uid_shared_with = ?" );

View file

@ -174,34 +174,29 @@ class OC_OCS {
OC_OCS::publicKeyGet($format,$file);
//keysetpublic
}elseif(($method=='post') and ($ex[$paracount-6] == 'v1.php') and ($ex[$paracount-5]=='cloud') and ($ex[$paracount-4] == 'user') and ($ex[$paracount-2] == 'publickey')){
$user=$ex[$paracount-3];
}elseif(($method=='post') and ($ex[$paracount-4] == 'v1.php') and ($ex[$paracount-3]=='cloud') and ($ex[$paracount-2] == 'publickey')){
$key = self::readData('post', 'key', 'string');
OC_OCS::publicKeySet($format,$user, $key);
OC_OCS::publicKeySet($format, $key);
// keygetprivate
}elseif(($method=='get') and ($ex[$paracount-6] == 'v1.php') and ($ex[$paracount-5]=='cloud') and ($ex[$paracount-4] == 'user') and ($ex[$paracount-2] == 'privatekey')){
$user=$ex[$paracount-3];
OC_OCS::privateKeyGet($format,$user);
}elseif(($method=='get') and ($ex[$paracount-4] == 'v1.php') and ($ex[$paracount-3]=='cloud') and ($ex[$paracount-2] == 'privatekey')){
OC_OCS::privateKeyGet($format);
//keysetprivate
}elseif(($method=='post') and ($ex[$paracount-6] == 'v1.php') and ($ex[$paracount-5]=='cloud') and ($ex[$paracount-4] == 'user') and ($ex[$paracount-2] == 'privatekey')){
$user=$ex[$paracount-3];
}elseif(($method=='post') and ($ex[$paracount-4] == 'v1.php') and ($ex[$paracount-3]=='cloud') and ($ex[$paracount-2] == 'privatekey')){
$key = self::readData('post', 'key', 'string');
OC_OCS::privateKeySet($format,$user, $key);
OC_OCS::privateKeySet($format, $key);
// keygetfiles
}elseif(($method=='get') and ($ex[$paracount-7] == 'v1.php') and ($ex[$paracount-6]=='cloud') and ($ex[$paracount-5] == 'user') and ($ex[$paracount-3] == 'filekey')){
$user=$ex[$paracount-4];
$file = urldecode($ex[$paracount-2]);
OC_OCS::fileKeyGet($format,$user, $file);
}elseif(($method=='get') and ($ex[$paracount-6] == 'v1.php') and ($ex[$paracount-5]=='cloud') and ($ex[$paracount-4] == 'file') and ($ex[$paracount-2] == 'filekey')){
$file = urldecode($ex[$paracount-3]);
OC_OCS::fileKeyGet($format, $file);
//keysetfiles
}elseif(($method=='post') and ($ex[$paracount-6] == 'v1.php') and ($ex[$paracount-5]=='cloud') and ($ex[$paracount-4] == 'user') and ($ex[$paracount-2] == 'filekey')){
$user=$ex[$paracount-3];
}elseif(($method=='post') and ($ex[$paracount-4] == 'v1.php') and ($ex[$paracount-3]=='cloud') and ($ex[$paracount-2] == 'filekey')){
$key = self::readData('post', 'key', 'string');
$file = self::readData('post', 'file', 'string');
OC_OCS::fileKeySet($format,$user, $file, $key);
OC_OCS::fileKeySet($format, $file, $key);
// add more calls here
// please document all the call in the draft spec
@ -669,7 +664,7 @@ class OC_OCS {
}
/**
* get the public key of a user
* get the public key from all users associated with a given file
* @param string $format
* @param string $file
* @return string xml/json list of public keys
@ -692,130 +687,103 @@ class OC_OCS {
/**
* set the public key of a user
* @param string $format
* @param string $user
* @param string $format
* @param string $key
* @return string xml/json
*/
private static function publicKeySet($format, $user, $key) {
private static function publicKeySet($format, $key) {
$login=OC_OCS::checkpassword();
if(($login==$user)) {
if(OC_App::isEnabled('files_encryption') && OCA_Encryption\Crypt::mode($user) === 'client') {
if (($key = OCA_Encryption\Keymanager::setPublicKey($user, $key))) {
echo self::generateXml('', 'ok', 100, '');
} else {
echo self::generateXml('', 'fail', 404, 'could not add your public key to the key storage');
}
if(OC_App::isEnabled('files_encryption') && OCA_Encryption\Crypt::mode($user) === 'client') {
if (OCA_Encryption\Keymanager::setPublicKey($key)) {
echo self::generateXml('', 'ok', 100, '');
} else {
echo self::generateXml('', 'fail', 300, 'Client side encryption not enabled for user ' . $user);
echo self::generateXml('', 'fail', 404, 'could not add your public key to the key storage');
}
}else{
echo self::generateXml('', 'fail', 300, 'You don´t have permission to access this ressource.');
} else {
echo self::generateXml('', 'fail', 300, 'Client side encryption not enabled for user ' . $user);
}
}
/**
* get the private key of a user
* @param string $format
* @param string $user
* @return string xml/json
*/
private static function privateKeyGet($format, $user) {
$login=OC_OCS::checkpassword();
if(($login==$user)) {
if(OC_App::isEnabled('files_encryption') && OCA_Encryption\Crypt::mode($user) === 'client') {
if (($key = OCA_Encryption\Keymanager::getPrivateKey($user))) {
$xml=array();
$xml['key']=$key;
$txt=OC_OCS::generatexml($format, 'ok', 100, '', $xml, 'cloud', '', 1, 0, 0);
echo($txt);
} else {
echo self::generateXml('', 'fail', 404, 'private key does not exist');
}
} else {
echo self::generateXml('', 'fail', 300, 'Client side encryption not enabled for user ' . $user);
private static function privateKeyGet($format) {
$login=OC_OCS::checkpassword();
if(OC_App::isEnabled('files_encryption') && OCA_Encryption\Crypt::mode($user) === 'client') {
if (($key = OCA_Encryption\Keymanager::getPrivateKey())) {
$xml=array();
$xml['key']=$key;
$txt=OC_OCS::generatexml($format, 'ok', 100, '', $xml, 'cloud', '', 1, 0, 0);
echo($txt);
} else {
echo self::generateXml('', 'fail', 404, 'private key does not exist');
}
}else{
echo self::generateXml('', 'fail', 300, 'You don´t have permission to access this ressource.');
} else {
echo self::generateXml('', 'fail', 300, 'Client side encryption not enabled for user ' . $user);
}
}
/**
* set the private key of a user
* @param string $format
* @param string $user
* @param string $format
* @param string $key
* @return string xml/json
*/
private static function privateKeySet($format, $user, $key) {
private static function privateKeySet($format, $key) {
$login=OC_OCS::checkpassword();
if(($login==$user)) {
if(OC_App::isEnabled('files_encryption') && OCA_Encryption\Crypt::mode($user) === 'client') {
if (($key = OCA_Encryption\Keymanager::setPrivateKey($user, $key))) {
echo self::generateXml('', 'ok', 100, '');
} else {
echo self::generateXml('', 'fail', 404, 'could not add your private key to the key storage');
}
if(OC_App::isEnabled('files_encryption') && OCA_Encryption\Crypt::mode($user) === 'client') {
if (($key = OCA_Encryption\Keymanager::setPrivateKey($key))) {
echo self::generateXml('', 'ok', 100, '');
} else {
echo self::generateXml('', 'fail', 300, 'Client side encryption not enabled for user ' . $user);
echo self::generateXml('', 'fail', 404, 'could not add your private key to the key storage');
}
}else{
echo self::generateXml('', 'fail', 300, 'You don´t have permission to access this ressource.');
} else {
echo self::generateXml('', 'fail', 300, 'Client side encryption not enabled for user ' . $user);
}
}
/**
* get the encryption key of a file
* @param string $format
* @param string $user
* @param string $format
* @param string $file
* @return string xml/json
*/
private static function fileKeyGet($format, $user, $file) {
$login=OC_OCS::checkpassword();
if(($login==$user)) {
if(OC_App::isEnabled('files_encryption') && OCA_Encryption\Crypt::mode($user) === 'client') {
if (($key = OCA_Encryption\Keymanager::getFileKey($user, $file))) {
$xml=array();
$xml['key']=$key;
$txt=OC_OCS::generatexml($format, 'ok', 100, '', $xml, 'cloud', '', 1, 0, 0);
echo($txt);
} else {
echo self::generateXml('', 'fail', 404, 'file key does not exist');
}
} else {
echo self::generateXml('', 'fail', 300, 'Client side encryption not enabled for user ' . $user);
}
}else{
echo self::generateXml('', 'fail', 300, 'You don´t have permission to access this ressource.');
}
}
private static function fileKeyGet($format, $file) {
$login=OC_OCS::checkpassword();
if(OC_App::isEnabled('files_encryption') && OCA_Encryption\Crypt::mode($user) === 'client') {
if (($key = OCA_Encryption\Keymanager::getFileKey($file))) {
$xml=array();
$xml['key']=$key;
$txt=OC_OCS::generatexml($format, 'ok', 100, '', $xml, 'cloud', '', 1, 0, 0);
echo($txt);
} else {
echo self::generateXml('', 'fail', 404, 'file key does not exist');
}
} else {
echo self::generateXml('', 'fail', 300, 'Client side encryption not enabled for user ' . $user);
}
}
/**
* set the encryption keyn of a file
* @param string $format
* @param string $user
* @param string $format
* @param string $file
* @param string $key
* @return string xml/json
*/
private static function fileKeySet($format, $user, $file, $key) {
$login=OC_OCS::checkpassword();
if(($login==$user)) {
if(OC_App::isEnabled('files_encryption') && OCA_Encryption\Crypt::mode($user) === 'client') {
if (($key = OCA_Encryption\Keymanager::setFileKey($user, $file, $key))) {
echo self::generateXml('', 'ok', 100, '');
return true;
} else {
echo self::generateXml('', 'fail', 404, 'could not write key file');
}
} else {
echo self::generateXml('', 'fail', 300, 'Client side encryption not enabled for user ' . $user);
}
}else{
echo self::generateXml('', 'fail', 300, 'You don´t have permission to access this ressource.');
}
return false;
}
private static function fileKeySet($format, $file, $key) {
$login=OC_OCS::checkpassword();
if(OC_App::isEnabled('files_encryption') && OCA_Encryption\Crypt::mode($user) === 'client') {
if (($key = OCA_Encryption\Keymanager::setFileKey($file, $key))) {
echo self::generateXml('', 'ok', 100, '');
} else {
echo self::generateXml('', 'fail', 404, 'could not write key file');
}
} else {
echo self::generateXml('', 'fail', 300, 'Client side encryption not enabled for user ' . $user);
}
}
}