| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778 | package controllerimport (	"encoding/json"	"io"	"net/http"	"strings"	"github.com/gorilla/mux"	"github.com/gravitl/netmaker/database"	"github.com/gravitl/netmaker/logger"	"github.com/gravitl/netmaker/logic"	"github.com/gravitl/netmaker/models"	"golang.org/x/crypto/bcrypt")// swagger:route PUT /api/nodes/{network}/{nodeid}/migrate nodes migrateNode//// Used to migrate a legacy node.////			Schemes: https////			Security://	  		oauth////			Responses://				200: nodeJoinResponsefunc migrate(w http.ResponseWriter, r *http.Request) {	// we decode our body request params	data := models.MigrationData{}	err := json.NewDecoder(r.Body).Decode(&data)	if err != nil {		logger.Log(0, r.Header.Get("user"), "error decoding request body: ", err.Error())		logic.ReturnErrorResponse(w, r, logic.FormatError(err, "badrequest"))		return	}	params := mux.Vars(r)	//check authorization	record, err := database.FetchRecord(database.NODES_TABLE_NAME, data.LegacyNodeID)	if err != nil {		logger.Log(0, "no record for legacy node", data.LegacyNodeID, err.Error())		logic.ReturnErrorResponse(w, r, logic.FormatError(err, "badrequest"))		return	}	var legacyNode models.LegacyNode	if err = json.Unmarshal([]byte(record), &legacyNode); err != nil {		logger.Log(0, "error decoding legacy node", err.Error())		logic.ReturnErrorResponse(w, r, logic.FormatError(err, "badrequest"))		return	}	if err := bcrypt.CompareHashAndPassword([]byte(legacyNode.Password), []byte(data.Password)); err != nil {		logger.Log(0, "error decoding legacy password", err.Error())		logic.ReturnErrorResponse(w, r, logic.FormatError(err, "unauthorized"))		return	}	network, err := logic.GetNetwork(params["network"])	if err != nil {		logger.Log(0, "error retrieving network:  ", err.Error())		logic.ReturnErrorResponse(w, r, logic.FormatError(err, "badrequest"))		return	}	key, err := logic.CreateAccessKey(models.AccessKey{}, network)	if err != nil {		logger.Log(0, "error creating key:  ", err.Error())		logic.ReturnErrorResponse(w, r, logic.FormatError(err, "badrequest"))		return	}	data.JoinData.Key = key.Value	payload, err := json.Marshal(data.JoinData)	if err != nil {		logger.Log(0, "error encoding data:  ", err.Error())		logic.ReturnErrorResponse(w, r, logic.FormatError(err, "badrequest"))		return	}	r.Body = io.NopCloser(strings.NewReader(string(payload)))	r.ContentLength = int64(len(string(payload)))	createNode(w, r)}
 |