Skip to content

Commit

Permalink
Merge pull request #2342 from constantine2nd/develop
Browse files Browse the repository at this point in the history
Add endpoint updateConsumerRedirectUrl v5.1.0
  • Loading branch information
simonredfern committed Dec 1, 2023
2 parents e14cb81 + f9e5cc6 commit 34a2c6a
Show file tree
Hide file tree
Showing 2 changed files with 97 additions and 2 deletions.
55 changes: 55 additions & 0 deletions obp-api/src/main/scala/code/api/v5_1_0/APIMethods510.scala
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ import code.api.util.FutureUtil.{EndpointContext, EndpointTimeout}
import code.api.util.NewStyle.HttpCode
import code.api.util._
import code.api.util.newstyle.RegulatedEntityNewStyle.{createRegulatedEntityNewStyle, deleteRegulatedEntityNewStyle, getRegulatedEntitiesNewStyle, getRegulatedEntityByEntityIdNewStyle}
import code.api.v2_1_0.{ConsumerRedirectUrlJSON, JSONFactory210}
import code.api.v3_0_0.JSONFactory300
import code.api.v3_0_0.JSONFactory300.createAggregateMetricJson
import code.api.v3_1_0.ConsentJsonV310
Expand Down Expand Up @@ -1767,6 +1768,60 @@ trait APIMethods510 {
}
}


staticResourceDocs += ResourceDoc(
updateConsumerRedirectUrl,
implementedInApiVersion,
"updateConsumerRedirectUrl",
"PUT",
"/management/consumers/CONSUMER_ID/consumer/redirect_url",
"Update Consumer RedirectUrl",
s"""Update an existing redirectUrl for a Consumer specified by CONSUMER_ID.
|
| CONSUMER_ID can be obtained after you register the application.
|
| Or use the endpoint 'Get Consumers' to get it
|
""".stripMargin,
consumerRedirectUrlJSON,
consumerJSON,
List(
UserNotLoggedIn,
UserHasMissingRoles,
UnknownError
),
List(apiTagConsumer),
Some(List(canUpdateConsumerRedirectUrl))
)

lazy val updateConsumerRedirectUrl: OBPEndpoint = {
case "management" :: "consumers" :: consumerId :: "consumer" :: "redirect_url" :: Nil JsonPut json -> _ => {
cc =>
implicit val ec = EndpointContext(Some(cc))
for {
(Full(u), callContext) <- authenticatedAccess(cc)
_ <- APIUtil.getPropsAsBoolValue("consumers_enabled_by_default", false) match {
case true => Future(Full(Unit))
case false => NewStyle.function.hasEntitlement("", u.userId, ApiRole.canUpdateConsumerRedirectUrl, callContext)
}
postJson <- NewStyle.function.tryons(InvalidJsonFormat, 400, callContext) {
json.extract[ConsumerRedirectUrlJSON]
}
consumer <- NewStyle.function.getConsumerByConsumerId(consumerId, callContext)
//only the developer that created the Consumer should be able to edit it
_ <- Helper.booleanToFuture(UserNoPermissionUpdateConsumer, 400, callContext) {
consumer.createdByUserId.equals(u.userId)
}
//update the redirectURL and isactive (set to false when change redirectUrl) field in consumer table
updatedConsumer <- NewStyle.function.updateConsumer(consumer.id.get, None, None, Some(APIUtil.getPropsAsBoolValue("consumers_enabled_by_default", false)), None, None, None, None, Some(postJson.redirect_url), None, callContext)
} yield {
val json = JSONFactory510.createConsumerJSON(updatedConsumer)
(json, HttpCode.`200`(callContext))
}
}
}


}
}

Expand Down
44 changes: 42 additions & 2 deletions obp-api/src/main/scala/code/api/v5_1_0/JSONFactory5.1.0.scala
Original file line number Diff line number Diff line change
Expand Up @@ -30,20 +30,22 @@ import code.api.Constant
import code.api.util.{APIUtil, ConsentJWT, CustomJsonFormats, JwtUtil, Role}
import code.api.util.APIUtil.gitCommit
import code.api.v1_4_0.JSONFactory1_4_0.{LocationJsonV140, MetaJsonV140, transformToLocationFromV140, transformToMetaFromV140}
import code.api.v2_1_0.ResourceUserJSON
import code.api.v3_0_0.JSONFactory300.{createLocationJson, createMetaJson, transformToAddressFromV300}
import code.api.v3_0_0.{AccountIdJson, AccountsIdsJsonV300, AddressJsonV300, OpeningTimesV300}
import code.api.v4_0_0.{EnergySource400, HostedAt400, HostedBy400}
import code.atmattribute.AtmAttribute
import code.atms.Atms.Atm
import code.users.UserAttribute
import code.users.{UserAttribute, Users}
import code.views.system.{AccountAccess, ViewDefinition}
import com.openbankproject.commons.model.{Address, AtmId, AtmT, BankId, BankIdAccountId, Customer, Location, Meta, RegulatedEntityTrait}
import com.openbankproject.commons.util.{ApiVersion, ScannedApiVersion}

import java.util.Date
import code.consent.MappedConsent
import code.metrics.APIMetric
import net.liftweb.common.Box
import code.model.Consumer
import net.liftweb.common.{Box, Full}
import net.liftweb.json
import net.liftweb.json.{JValue, parse}

Expand Down Expand Up @@ -279,6 +281,18 @@ case class MetricJsonV510(
)
case class MetricsJsonV510(metrics: List[MetricJsonV510])

case class ConsumerJsonV510(consumer_id: String,
app_name: String,
app_type: String,
description: String,
developer_email: String,
redirect_url: String,
created_by_user_id: String,
created_by_user: ResourceUserJSON,
enabled: Boolean,
created: Date
)

object JSONFactory510 extends CustomJsonFormats {

def createCustomersIds(customers : List[Customer]): CustomersIdsJsonV510 =
Expand Down Expand Up @@ -606,6 +620,32 @@ object JSONFactory510 extends CustomJsonFormats {
MetricsJsonV510(metrics.map(createMetricJson))
}

def createConsumerJSON(c: Consumer): ConsumerJsonV510 = {

val resourceUserJSON = Users.users.vend.getUserByUserId(c.createdByUserId.toString()) match {
case Full(resourceUser) => ResourceUserJSON(
user_id = resourceUser.userId,
email = resourceUser.emailAddress,
provider_id = resourceUser.idGivenByProvider,
provider = resourceUser.provider,
username = resourceUser.name
)
case _ => null
}

ConsumerJsonV510(consumer_id = c.consumerId.get,
app_name = c.name.get,
app_type = c.appType.toString(),
description = c.description.get,
developer_email = c.developerEmail.get,
redirect_url = c.redirectURL.get,
created_by_user_id = c.createdByUserId.get,
created_by_user = resourceUserJSON,
enabled = c.isActive.get,
created = c.createdAt.get
)
}


}

0 comments on commit 34a2c6a

Please sign in to comment.