in webv2/web.go [381:470]
func loadSession(w http.ResponseWriter, r *http.Request) {
sessionState := session.GetSessionState()
utilities.InitObjectId()
reqBody, err := ioutil.ReadAll(r.Body)
if err != nil {
http.Error(w, fmt.Sprintf("Body Read Error : %v", err), http.StatusInternalServerError)
return
}
var s session.SessionParams
err = json.Unmarshal(reqBody, &s)
if err != nil {
http.Error(w, fmt.Sprintf("Request Body parse error : %v", err), http.StatusBadRequest)
return
}
conv := internal.MakeConv()
metadata := session.SessionMetadata{}
err = session.ReadSessionFileForSessionMetadata(&metadata, constants.UPLOAD_FILE_DIR+"/"+s.FilePath)
if err != nil {
switch err.(type) {
case *fs.PathError:
http.Error(w, fmt.Sprintf("Failed to open session file : %v, no such file or directory", s.FilePath), http.StatusNotFound)
default:
http.Error(w, fmt.Sprintf("Failed to parse session file : %v", err), http.StatusBadRequest)
}
return
}
dbType := metadata.DatabaseType
switch dbType {
case constants.PGDUMP:
dbType = constants.POSTGRES
case constants.MYSQLDUMP:
dbType = constants.MYSQL
}
if dbType != s.Driver {
http.Error(w, fmt.Sprintf("Not a valid %v session file", dbType), http.StatusBadRequest)
return
}
err = conversion.ReadSessionFile(conv, constants.UPLOAD_FILE_DIR+"/"+s.FilePath)
if err != nil {
switch err.(type) {
case *fs.PathError:
http.Error(w, fmt.Sprintf("Failed to open session file : %v, no such file or directory", s.FilePath), http.StatusNotFound)
default:
http.Error(w, fmt.Sprintf("Failed to parse session file : %v", err), http.StatusBadRequest)
}
return
}
sessionMetadata := session.SessionMetadata{
SessionName: "NewSession",
DatabaseType: s.Driver,
DatabaseName: metadata.DatabaseName,
Dialect: conv.SpDialect,
}
if sessionMetadata.DatabaseName == "" {
sessionMetadata.DatabaseName = strings.TrimRight(filepath.Base(s.FilePath), filepath.Ext(s.FilePath))
}
sessionState.Conv.ConvLock.Lock()
defer sessionState.Conv.ConvLock.Unlock()
sessionState.Conv = conv
primarykey.DetectHotspot()
index.IndexSuggestion()
sessionState.Conv.UsedNames = internal.ComputeUsedNames(sessionState.Conv)
sessionState.SessionMetadata = sessionMetadata
sessionState.Driver = s.Driver
sessionState.SessionFile = constants.UPLOAD_FILE_DIR + s.FilePath
sessionState.SourceDBConnDetails = session.SourceDBConnDetails{
Path: constants.UPLOAD_FILE_DIR + "/" + s.FilePath,
ConnectionType: helpers.SESSION_FILE_MODE,
}
sessionState.Dialect = conv.SpDialect
convm := session.ConvWithMetadata{
SessionMetadata: sessionMetadata,
Conv: *conv,
}
w.WriteHeader(http.StatusOK)
json.NewEncoder(w).Encode(convm)
}