@startuml
autonumber 1


skinparam titleBorderRoundCorner 15
skinparam titleBorderThickness 2
skinparam titleBorderColor red
skinparam titleBackgroundColor  Lightgreen
title Security URL Encryption Flows

actor PARTNER_UI

box "UI Apps" #LightBlue
	participant PARTNER_UI
	participant MsisdnLookUpApp
end box


'comment: actor boundary control entity


note over PARTNER_UI, APIGEE_Proxy
OAuth 2.0 Token Based Authentication (POP Token Mandatory)
end note


PARTNER_UI->APIGEE_Proxy :  POST /b2b-experience/v1/secure-handshake-service-v1/apps/msisdn-lookup

note over PARTNER_UI
request payload
----
Header:
{
    "B2b-client" : "TEST"
    "B2b-org" : "7000000999999911111"
}
Body:
{}
end note


APIGEE_Proxy -> Experience_Microservice: POST /v1/secure-handshake-service-v1/apps/msisdn-lookup
note over Experience_Microservice
encrypted config properties
---
secrectKey="secrect$#12345"
end note
Experience_Microservice -> Experience_Microservice : Security service validate B2b-client & B2b-org
Experience_Microservice -> Experience_Microservice : encrypted E = base64(AES256(B2b-client, B2b-org, secrectKey))
Experience_Microservice -[#0000FF]>APIGEE_Proxy: Response

note over Experience_Microservice
{
    "redirectURL" : "http://<baseURL>/v1/msisdn-lookup?SID=<<base64(E)>>&isPartner=true&B2b-client=TEST&B2b-org=7000000999999911111",
    "cartStatus" : "SUCCESS"
}
end note

APIGEE_Proxy-[#0000FF]>PARTNER_UI: Response


create MsisdnLookUpApp
PARTNER_UI -> MsisdnLookUpApp : redirectURL

note over MsisdnLookUpApp, APIGEE_Proxy
OAuth 2.0 Token Based Authentication (POP Token Mandatory)
end note

MsisdnLookUpApp -> APIGEE_Proxy : GET /b2b-experience/v1/secure-handshake-service-v1/apps/msisdn-lookup?sid=<<base64(E)>>
note over MsisdnLookUpApp
request payload
----
Header:
{
    "B2b-client" : "TEST"
    "B2b-org" : "7000000999999911111"
}
end note
APIGEE_Proxy -> Experience_Microservice : GET /v1/secure-handshake-service-v1/apps/msisdn-lookup?sid=<<base64(E)>>
Experience_Microservice -> Experience_Microservice: validate URL expiration
Experience_Microservice -> Experience_Microservice: security service validate Bab-client & B2b-org header
Experience_Microservice -> Experience_Microservice: decrypt information
Experience_Microservice -> Experience_Microservice: validate B2b-client & B2b-org validate against encrypted value

note over Experience_Microservice
response payload
----
{
    "B2b-client" : "TEST",
    "B2b-org" : "7000000999999911111"
}
end note

Experience_Microservice -> APIGEE_Proxy: Response
APIGEE_Proxy -> MsisdnLookUpApp : Response

MsisdnLookUpApp -> APIGEE_Proxy : GET /b2b-experience/v1/subscribers?org={orgId}&mobile-number={mobile-number}
note over MsisdnLookUpApp
request payload
----
Header:
{
    "B2b-client" : "TEST"
    "B2b-org" : "7000000999999911111"
}
end note
APIGEE_Proxy -> Experience_Microservice : GET /b2b-experience/v1/subscribers?org={orgId}&mobile-number={mobile-number}
Experience_Microservice -> Experience_Microservice : Security service validate B2b-client & B2b-org
Experience_Microservice -> RSP : GET Billing Account information for MSISDN
RSP -> Experience_Microservice : Response
Experience_Microservice -> Experience_Microservice : Validate BAN belongs to given orgId

note over Experience_Microservice
{
    "msisdn": "9432123456",
    "ban": "985612345",
    "code": "ATWRK_ACNTDET_SUCCESS_00000",
    "message": "SUCCESS",
    "account": {
    "banStatus": "OPENED",
    "corporateNode": "string",
    "ssn": "134576256",
    .......
}
end note

Experience_Microservice -> APIGEE_Proxy : Response
APIGEE_Proxy -> MsisdnLookUpApp : Response

@enduml