mirror of
https://github.com/nextcloud/server.git
synced 2026-02-20 08:29:10 -05:00
Add support for external files accessed via SFTP using public key exchange authentication. Keys are generated automatically when the configuration is added, or can be regenerated on demand if a key is compromised. Creation of a new configuration row now triggers focus on that row. This is used to trigger auto-configuration for SFTP keys. Generated public keys are saved in user's data directory for easy retrieval by an external application. Add controller for SFTP key generation AJAX SFTP class initialisation no longer produces a warning if the password field is missing. Add unit tests for SFTP with key authentication backend
48 lines
1.2 KiB
PHP
48 lines
1.2 KiB
PHP
<?php
|
|
/**
|
|
* Copyright (c) 2015 University of Edinburgh <Ross.Nicoll@ed.ac.uk>
|
|
* This file is licensed under the Affero General Public License version 3 or
|
|
* later.
|
|
* See the COPYING-README file.
|
|
*/
|
|
|
|
namespace OCA\Files_External\Controller;
|
|
|
|
use OCP\AppFramework\Controller;
|
|
use OCP\IRequest;
|
|
use OCP\AppFramework\Http\JSONResponse;
|
|
|
|
class AjaxController extends Controller {
|
|
public function __construct($appName, IRequest $request) {
|
|
parent::__construct($appName, $request);
|
|
}
|
|
|
|
private function generateSshKeys() {
|
|
$rsa = new \Crypt_RSA();
|
|
$rsa->setPublicKeyFormat(CRYPT_RSA_PUBLIC_FORMAT_OPENSSH);
|
|
$rsa->setPassword(\OC::$server->getConfig()->getSystemValue('secret', ''));
|
|
|
|
$key = $rsa->createKey();
|
|
// Replace the placeholder label with a more meaningful one
|
|
$key['publicKey'] = str_replace('phpseclib-generated-key', gethostname(), $key['publickey']);
|
|
|
|
return $key;
|
|
}
|
|
|
|
/**
|
|
* Generates an SSH public/private key pair.
|
|
*
|
|
* @NoAdminRequired
|
|
*/
|
|
public function getSshKeys() {
|
|
$key = $this->generateSshKeys();
|
|
return new JSONResponse(
|
|
array('data' => array(
|
|
'private_key' => $key['privatekey'],
|
|
'public_key' => $key['publickey']
|
|
),
|
|
'status' => 'success'
|
|
));
|
|
}
|
|
|
|
}
|