mirror of https://github.com/openspug/spug
				
				
				
			U 优化web终端对中文编码支持
							parent
							
								
									e77cad7492
								
							
						
					
					
						commit
						4b6bc9081e
					
				| 
						 | 
				
			
			@ -93,7 +93,11 @@ class SSHConsumer(WebsocketConsumer):
 | 
			
		|||
            if not data:
 | 
			
		||||
                self.close(3333)
 | 
			
		||||
                break
 | 
			
		||||
            self.send(bytes_data=data)
 | 
			
		||||
            try:
 | 
			
		||||
                text = data.decode()
 | 
			
		||||
            except UnicodeDecodeError:
 | 
			
		||||
                text = data.decode(encoding='GBK', errors='ignore')
 | 
			
		||||
            self.send(text_data=text)
 | 
			
		||||
 | 
			
		||||
    def receive(self, text_data=None, bytes_data=None):
 | 
			
		||||
        data = text_data or bytes_data
 | 
			
		||||
| 
						 | 
				
			
			@ -120,7 +124,7 @@ class SSHConsumer(WebsocketConsumer):
 | 
			
		|||
            self.close()
 | 
			
		||||
 | 
			
		||||
    def _init(self):
 | 
			
		||||
        self.send(bytes_data=b'\r\33[KConnecting ...\r')
 | 
			
		||||
        self.send(text_data='\r\33[KConnecting ...\r')
 | 
			
		||||
        host = Host.objects.filter(pk=self.id).first()
 | 
			
		||||
        if not host:
 | 
			
		||||
            self.send(text_data='Unknown host\r\n')
 | 
			
		||||
| 
						 | 
				
			
			@ -128,7 +132,7 @@ class SSHConsumer(WebsocketConsumer):
 | 
			
		|||
        try:
 | 
			
		||||
            self.ssh = host.get_ssh().get_client()
 | 
			
		||||
        except Exception as e:
 | 
			
		||||
            self.send(bytes_data=f'Exception: {e}\r\n'.encode())
 | 
			
		||||
            self.send(text_data=f'Exception: {e}\r\n'.encode())
 | 
			
		||||
            self.close()
 | 
			
		||||
            return
 | 
			
		||||
        self.chan = self.ssh.invoke_shell(term='xterm')
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -24,7 +24,7 @@ function WebSSH(props) {
 | 
			
		|||
    term.write('WebSocket connecting ... ');
 | 
			
		||||
    const protocol = window.location.protocol === 'https:' ? 'wss:' : 'ws:';
 | 
			
		||||
    const socket = new WebSocket(`${protocol}//${window.location.host}/api/ws/ssh/${props.id}/?x-token=${X_TOKEN}`);
 | 
			
		||||
    socket.onmessage = e => _read_as_text(e.data);
 | 
			
		||||
    socket.onmessage = e => term.write(e.data)
 | 
			
		||||
    socket.onopen = () => {
 | 
			
		||||
      term.write('ok')
 | 
			
		||||
      term.focus();
 | 
			
		||||
| 
						 | 
				
			
			@ -68,12 +68,6 @@ function WebSSH(props) {
 | 
			
		|||
    }
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  function _read_as_text(data) {
 | 
			
		||||
    const reader = new window.FileReader();
 | 
			
		||||
    reader.onload = () => term.write(reader.result);
 | 
			
		||||
    reader.readAsText(data, 'utf-8')
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  return (
 | 
			
		||||
    <div className={styles.termContainer}>
 | 
			
		||||
      <div className={styles.terminal} ref={container}/>
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue