package main

import (
	"encoding/json"
	"fmt"
	"net/http"
	"strconv"

	"imuslab.com/zoraxy/mod/sshprox"
	"imuslab.com/zoraxy/mod/utils"
)

/*
	webssh.go

	This script handle the establish of a new ssh proxy object
*/

func HandleCreateProxySession(w http.ResponseWriter, r *http.Request) {
	//Get what ip address and port to connect to
	ipaddr, err := utils.GetPara(r, "ipaddr")
	if err != nil {
		http.Error(w, "Invalid Usage", http.StatusInternalServerError)
		return
	}

	portString, err := utils.GetPara(r, "port")
	if err != nil {
		portString = "22"
	}

	port, err := strconv.Atoi(portString)
	if err != nil {
		http.Error(w, "Invalid port number given", http.StatusInternalServerError)
		return
	}

	//Check if the target is a valid ssh endpoint
	if !sshprox.IsSSHConnectable(ipaddr, port) {
		http.Error(w, ipaddr+":"+strconv.Itoa(port)+" is not a valid SSH server", http.StatusInternalServerError)
		return
	}

	//Create a new proxy instance
	instance, err := webSshManager.NewSSHProxy("./system/gotty")
	if err != nil {
		http.Error(w, err.Error(), http.StatusInternalServerError)
		return
	}

	//Create an ssh process to the target address
	err = instance.CreateNewConnection(webSshManager.GetNextPort(), ipaddr, port)
	if err != nil {
		http.Error(w, err.Error(), http.StatusInternalServerError)
		return
	}

	//Return the instance uuid
	js, _ := json.Marshal(instance.UUID)
	utils.SendJSONResponse(w, string(js))
}

func HandleTest(w http.ResponseWriter, r *http.Request) {
	fmt.Println(sshprox.IsSSHConnectable("192.168.1.120", 22))
}