Ejemplo n.º 1
0
        private void CommandOpened(object sender, SessionRequestedArgs e)
        {
            var match   = RegexParseCommand.Match(e.CommandText);
            var command = match.Groups["cmd"].Value;
            var project = match.Groups["proj"].Value;

            if (string.IsNullOrWhiteSpace(command) || string.IsNullOrWhiteSpace(project))
            {
                throw new SshConnectionException("Unexpected command.", DisconnectReason.ByApplication);
            }

            var requireWrite = command == "git-receive-pack";
            var fingerprint  = e.AttachedUserauthArgs.Fingerprint;
            var key          = Convert.ToBase64String(e.AttachedUserauthArgs.Key);
            var allow        = requireWrite
                ? _repositoryService.CanWriteRepository(project, fingerprint, key)
                : _repositoryService.CanReadRepository(project, fingerprint, key);

            if (!allow)
            {
                throw new SshConnectionException("Access denied.", DisconnectReason.ByApplication);
            }

            e.Channel.DataReceived  += DataReceived;
            e.Channel.EofReceived   += EofReceived;
            e.Channel.CloseReceived += CloseReceived;
            _channel = e.Channel;

            StartProcess(command, project);
        }
Ejemplo n.º 2
0
        static void service_CommandOpened(object sender, SessionRequestedArgs e)
        {
            Console.WriteLine("Channel {0} runs command: \"{1}\".", e.Channel.ServerChannelId, e.CommandText);

            var allow = true; // func(e.CommandText, e.AttachedUserauthArgs);

            if (!allow)
            {
                return;
            }

            var parser  = new Regex(@"(?<cmd>git-receive-pack|git-upload-pack|git-upload-archive) \'/?(?<proj>.+)\.git\'");
            var match   = parser.Match(e.CommandText);
            var command = match.Groups["cmd"].Value;
            var project = match.Groups["proj"].Value;

            var git = new GitService(command, project);

            e.Channel.DataReceived  += (ss, ee) => git.OnData(ee);
            e.Channel.CloseReceived += (ss, ee) => git.OnClose();
            git.DataReceived        += (ss, ee) => e.Channel.SendData(ee);
            git.CloseReceived       += (ss, ee) => e.Channel.SendClose(ee);

            git.Start();
        }
Ejemplo n.º 3
0
        void service_CommandOpened(object sender, SessionRequestedArgs e)
        {
            var allow = true; // func(e.CommandText, e.AttachedUserauthArgs);

            if (!allow)
            {
                return;
            }

            var parser  = new Regex(@"(?<cmd>git-receive-pack|git-upload-pack|git-upload-archive) \'/?(?<proj>.+)\.git\'");
            var match   = parser.Match(e.CommandText);
            var command = match.Groups["cmd"].Value;
            var project = match.Groups["proj"].Value;


            var git =
                new GitService(
                    this.projectRootPath
                    , this.gitCommandsPath);
            var gitPipe = git.Exec(command, project);
            var sshPipe = new SshSettionPipe(e.Channel);

            gitPipe.OnData   += (bytes) => sshPipe.PushData(bytes);
            sshPipe.OnData   += (bytes) => gitPipe.PushData(bytes);
            gitPipe.EndEvent += code => sshPipe.EndData(code);
            sshPipe.EndEvent += code => gitPipe.EndData(code);

            Task.Run((Action)gitPipe.Start);
        }
Ejemplo n.º 4
0
        void OnSessionRequestOpened(object sender, SessionRequestedArgs e)
        {
            _logger.LogInformation("Channel {0} requested session: \"{1}\".", e.Channel.ServerChannelId, e.CommandText);

            if (e.SubSystemName == "sftp")
            {
                InitializeSftp(e.Channel, e.AttachedUserAuthArgs.Username);
            }
            else
            {
                e.Channel.SendData(Encoding.UTF8.GetBytes($"You ran {e.CommandText}\n"));
                e.Channel.SendClose();
            }
        }
Ejemplo n.º 5
0
 static void OnServiceCommandOpened(object sender, SessionRequestedArgs e)
 {
     Console.WriteLine("Channel {0} runs command: \"{1}\".", e.Channel.ServerChannelId, e.CommandText);
     e.Channel.SendData(Encoding.UTF8.GetBytes($"You ran {e.CommandText}\n"));
     e.Channel.SendClose();
 }
Ejemplo n.º 6
0
 static void ServiceCommandOpened(object sender, SessionRequestedArgs e)
 {
     Console.WriteLine("Channel {0} runs command: \"{1}\".", e.Channel.ServerChannelId, e.CommandText);
     //e.Channel.SendData(Encoding.ASCII.GetBytes(".]0;root@server: ~.root@server:~# "));
     e.Channel.DataReceived += ServiceDataReceived;
 }