<?php
	class Remote {
		public function __construct($config) {
			foreach($config as $name => $value) {
				$this->{$name} = $value;
			}
			
			$methods = Array();
			
			if(!isset($this->auth['method']))
				error('Unspecified authentication method.');
			
			// Connect
			$this->connection = ssh2_connect($this->host, isset($this->port) ? $this->port : 22, $methods);
			
			switch($this->auth['method']) {
				case 'pubkey':
					
					if(!isset($this->auth['public']))
						error('Public key filename not specified.');
					if(!isset($this->auth['private']))
						error('Private key filename not specified.');
					
					if(!ssh2_auth_pubkey_file($this->connection, $this->auth['username'], $this->auth['public'], $this->auth['private'], isset($this->auth['passphrase']) ? $this->auth['passphrase']: null))
						error('Public key authentication failed.');
					break;
				case 'plain':
					if(!ssh2_auth_password($this->connection, $this->auth['username'], $this->auth['password']))
						error('Plain-text authentication failed.');
					break;
				default:
					error('Unknown authentication method: "' . $this->auth['method'] . '".');
			}
			
		}
		
		public function write($data, $remote_path) {
			global $config;
			
			switch($this->type) {
				case 'sftp':
					$sftp = ssh2_sftp($this->connection);
					file_write('ssh2.sftp://' . $sftp . $remote_path, $data, true);
					break;
				case 'scp':
					$file = tempnam($config['tmp'], 'tinyboard-scp');
					// Write to temp file
					file_write($file, $data);
					
					ssh2_scp_send($this->connection, $file, $remote_path, 0755);
					break;
				default:
					error('Unknown send method.');
			}
		}
	};
?>