2022-03-03 12:40:53 +01:00
// Copyright 2021 Dan Peleg <dan@globekeeper.com>
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
package routing
import (
"net/http"
"strconv"
userapi "github.com/matrix-org/dendrite/userapi/api"
"github.com/matrix-org/gomatrixserverlib"
2023-05-10 00:46:49 +02:00
"github.com/matrix-org/gomatrixserverlib/spec"
2022-03-03 12:40:53 +01:00
"github.com/matrix-org/util"
)
// GetNotifications handles /_matrix/client/r0/notifications
func GetNotifications (
req * http . Request , device * userapi . Device ,
2022-05-05 14:17:38 +02:00
userAPI userapi . ClientUserAPI ,
2022-03-03 12:40:53 +01:00
) util . JSONResponse {
var limit int64
if limitStr := req . URL . Query ( ) . Get ( "limit" ) ; limitStr != "" {
var err error
limit , err = strconv . ParseInt ( limitStr , 10 , 64 )
if err != nil {
util . GetLogger ( req . Context ( ) ) . WithError ( err ) . Error ( "ParseInt(limit) failed" )
2023-05-17 02:33:27 +02:00
return util . JSONResponse {
Code : http . StatusInternalServerError ,
JSON : spec . InternalServerError { } ,
}
2022-03-03 12:40:53 +01:00
}
}
var queryRes userapi . QueryNotificationsResponse
2022-11-11 17:41:37 +01:00
localpart , domain , err := gomatrixserverlib . SplitID ( '@' , device . UserID )
2022-03-03 12:40:53 +01:00
if err != nil {
util . GetLogger ( req . Context ( ) ) . WithError ( err ) . Error ( "SplitID failed" )
2023-05-17 02:33:27 +02:00
return util . JSONResponse {
Code : http . StatusInternalServerError ,
JSON : spec . InternalServerError { } ,
}
2022-03-03 12:40:53 +01:00
}
err = userAPI . QueryNotifications ( req . Context ( ) , & userapi . QueryNotificationsRequest {
2022-11-11 17:41:37 +01:00
Localpart : localpart ,
ServerName : domain ,
From : req . URL . Query ( ) . Get ( "from" ) ,
Limit : int ( limit ) ,
Only : req . URL . Query ( ) . Get ( "only" ) ,
2022-03-03 12:40:53 +01:00
} , & queryRes )
if err != nil {
util . GetLogger ( req . Context ( ) ) . WithError ( err ) . Error ( "QueryNotifications failed" )
2023-05-17 02:33:27 +02:00
return util . JSONResponse {
Code : http . StatusInternalServerError ,
JSON : spec . InternalServerError { } ,
}
2022-03-03 12:40:53 +01:00
}
util . GetLogger ( req . Context ( ) ) . WithField ( "from" , req . URL . Query ( ) . Get ( "from" ) ) . WithField ( "limit" , limit ) . WithField ( "only" , req . URL . Query ( ) . Get ( "only" ) ) . WithField ( "next" , queryRes . NextToken ) . Infof ( "QueryNotifications: len %d" , len ( queryRes . Notifications ) )
return util . JSONResponse {
Code : http . StatusOK ,
JSON : queryRes ,
}
}