package nextcloud import ( "net/http" "encoding/json" "io/ioutil" ) type Handler struct { } type Status struct { Installed bool `json:"installed"` Maintenance bool `json:"maintenance"` NeedsDbUpgrade bool `json:"needsDbUpgrade"` Version string `json:"version"` VersionString string `json:"versionstring"` Edition string `json:"edition"` ProductName string `json:"productname"` ExtendedSupport bool `json:"extendedSupport"` } type PollMsg struct { Endpoint string `json:"endpoint"` Token string `json:"token"` } type TokenMsg struct { Login string `json:"login"` Poll PollMsg `json:"poll"` } func (h *Handler) ServeHTTP(w http.ResponseWriter, r *http.Request) { if r.URL.Path == "/status.php" { status := Status{ Installed: true, Maintenance: false, NeedsDbUpgrade: false, Version: "21.0.1.1", VersionString: "21.0.1", Edition: "", ProductName: "Nextcloud", ExtendedSupport: false, } js, _ := json.Marshal(status) w.Header().Set("Content-Type", "application/json") w.Write(js) } else if r.URL.Path == "/index.php/login/v2" { // #1 POST to start login session tokenMsg := TokenMsg{ Login: "http://" + r.Host + "/login/v2/flow/mqNBzQ3AY1QFfOIzPIn5hZYeNZlZ0RDbT32b42cpmdkFjgGvqjSTsKh6OG7floh7z2JHKmWlZnl7kBFxNEQYcDnmYArkOFjXeBsAB5w3fbOcyJBmi5JBS1k1jYGL8V1D", Poll: PollMsg { Endpoint: "http://" + r.Host + "/login/v2/poll", Token: "zbF2EOo2de8gNOOePERCHQgLp1FQHB8zcSQ5t1KQhtNH0fRqV85Nh5UGRm9ZqpHmigH52jCYuxLSVZpu4FjHq9j8va233OXEHqQnBnMGr4p3BoRcc957jvJEjynPvJcB", }, } js, _ := json.Marshal(tokenMsg) w.Header().Set("Content-Type", "application/json") w.Write(js) } else if r.URL.Path == "/index.php/login/flow" { // # goto login page var NewUrl string = "nc://login/server:http://" + r.Host + "&user:vscode&password:TEwNL0Sbkeln0TKdlcmNukkhQaOc6is0GBWlXIoO1YOByPweiSpoISuN5UI4fSGRBOgGE61I" http.Redirect(w, r, NewUrl, http.StatusSeeOther) } else if r.URL.Path == "/login/flow/grant" { // #3 redirect to grant page } else if r.URL.Path == "/ocs/v2.php/cloud/user" { // #4 retreive user metadata dat, _ := ioutil.ReadFile("/data/ngo/conf/ocs_v2.php_cloud_user.xml") js := []byte(string(dat)) w.Header().Set("Content-Type", "application/xml; charset=utf-8") w.Write(js) } else { http.Error(w, "Not Found", http.StatusNotFound) } }