diff --git a/api/responses/responses.go b/api/responses/responses.go index 8ad60d5fc..fe701dbf2 100644 --- a/api/responses/responses.go +++ b/api/responses/responses.go @@ -14,6 +14,7 @@ type Subsonic struct { MusicFolders *MusicFolders `xml:"musicFolders,omitempty" json:"musicFolders,omitempty"` Indexes *Indexes `xml:"indexes,omitempty" json:"indexes,omitempty"` Directory *Directory `xml:"directory,omitempty" json:"directory,omitempty"` + User *User `xml:"user,omitempty" json:"user,omitempty"` } type JsonWrapper struct { @@ -79,3 +80,23 @@ type Directory struct { Id string `xml:"id,attr" json:"id"` Name string `xml:"name,attr" json:"name"` } + +type User struct { + Username string `xml:"username,attr" json:"username"` + Email string `xml:"email,attr,omitempty" json:"email,omitempty"` + ScrobblingEnabled bool `xml:"scrobblingEnabled,attr" json:"scrobblingEnabled"` + MaxBitRate int `xml:"maxBitRate,attr,omitempty" json:"maxBitRate,omitempty"` + AdminRole bool `xml:"adminRole,attr" json:"adminRole"` + SettingsRole bool `xml:"settingsRole,attr" json:"settingsRole"` + DownloadRole bool `xml:"downloadRole,attr" json:"downloadRole"` + UploadRole bool `xml:"uploadRole,attr" json:"uploadRole"` + PlaylistRole bool `xml:"playlistRole,attr" json:"playlistRole"` + CoverArtRole bool `xml:"coverArtRole,attr" json:"coverArtRole"` + CommentRole bool `xml:"commentRole,attr" json:"commentRole"` + PodcastRole bool `xml:"podcastRole,attr" json:"podcastRole"` + StreamRole bool `xml:"streamRole,attr" json:"streamRole"` + JukeboxRole bool `xml:"jukeboxRole,attr" json:"jukeboxRole"` + ShareRole bool `xml:"shareRole,attr" json:"shareRole"` + VideoConversionRole bool `xml:"videoConversionRole,attr" json:"videoConversionRole"` + Folder []int `xml:"folder,omitempty" json:"folder,omitempty"` +} diff --git a/api/responses/responses_test.go b/api/responses/responses_test.go index 1aa733c79..7e4e4abd3 100644 --- a/api/responses/responses_test.go +++ b/api/responses/responses_test.go @@ -124,6 +124,28 @@ func TestSubsonicResponses(t *testing.T) { }) }) + Convey("User", func() { + response.User = &User{Username: "deluan"} + Convey("Without optional fields", func() { + Convey("XML", func() { + So(response, ShouldMatchXML, ``) + }) + Convey("JSON", func() { + So(response, ShouldMatchJSON, `{"status":"ok","user":{"adminRole":false,"commentRole":false,"coverArtRole":false,"downloadRole":false,"jukeboxRole":false,"playlistRole":false,"podcastRole":false,"scrobblingEnabled":false,"settingsRole":false,"shareRole":false,"streamRole":false,"uploadRole":false,"username":"deluan","videoConversionRole":false},"version":"1.0.0"}`) + }) + }) + Convey("With optional fields", func() { + response.User.Email = "gosonic@deluan.com" + response.User.Folder = []int{1} + Convey("XML", func() { + So(response, ShouldMatchXML, `1`) + }) + Convey("JSON", func() { + So(response, ShouldMatchJSON, `{"status":"ok","user":{"adminRole":false,"commentRole":false,"coverArtRole":false,"downloadRole":false,"email":"gosonic@deluan.com","folder":[1],"jukeboxRole":false,"playlistRole":false,"podcastRole":false,"scrobblingEnabled":false,"settingsRole":false,"shareRole":false,"streamRole":false,"uploadRole":false,"username":"deluan","videoConversionRole":false},"version":"1.0.0"}`) + }) + }) + }) + Reset(func() { response = &Subsonic{Status: "ok", Version: "1.0.0"} }) diff --git a/api/users.go b/api/users.go new file mode 100644 index 000000000..df3d647db --- /dev/null +++ b/api/users.go @@ -0,0 +1,16 @@ +package api + +import "github.com/deluan/gosonic/api/responses" + +type UsersController struct{ BaseAPIController } + +// TODO This is a placeholder. The real one has to read this info from a config file +func (c *UsersController) GetUser() { + r := c.NewEmpty() + r.User = &responses.User{} + r.User.Username = c.GetParameter("username", "Required string parameter 'username' is not present") + r.User.StreamRole = true + r.User.DownloadRole = true + c.SendResponse(r) +} + diff --git a/conf/router.go b/conf/router.go index 9aa10f452..f5c93fe15 100644 --- a/conf/router.go +++ b/conf/router.go @@ -24,6 +24,7 @@ func mapEndpoints() { beego.NSRouter("/getCoverArt.view", &api.GetCoverArtController{}, "*:Get"), beego.NSRouter("/stream.view", &api.StreamController{}, "*:Get"), beego.NSRouter("/download.view", &api.StreamController{}, "*:Get"), + beego.NSRouter("/getUser.view", &api.UsersController{}, "*:GetUser"), ) beego.AddNamespace(ns)