Skip to content

Commit 9c4d7da

Browse files
authored
[#159265784] add mobile phone to user's attributes (#262)
* added mobile phone * added mobile phone * added mobile phone * fix tests * fix tests * fix tests * fix tests * fix tests * fix tests * update spid-passport * update spid-passport * update spid-passport * update spid-passport * update spid-passport * update spid-passport * update spid-passport * update spid-passport * yarn lock * added mobile phone to pagopa user
1 parent c7ee967 commit 9c4d7da

19 files changed

+69
-8
lines changed

api_pagopa.yaml

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,10 +40,20 @@ definitions:
4040
description: User data needed by PagaPA proxy.
4141
type: object
4242
properties:
43+
name:
44+
type: string
45+
family_name:
46+
type: string
4347
email:
4448
$ref: '#/definitions/EmailAddress'
49+
mobile_phone:
50+
type: string
51+
minLength: 1
4552
required:
53+
- name
54+
- family_name
4655
- email
56+
- mobile_phone
4757
responses: {}
4858
parameters: {}
4959
consumes:

api_proxy.yaml

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -477,6 +477,9 @@ definitions:
477477
type: string
478478
spid_email:
479479
$ref: '#/definitions/EmailAddress'
480+
spid_mobile_phone:
481+
type: string
482+
minLength: 1
480483
preferred_languages:
481484
type: array
482485
items:
@@ -492,6 +495,7 @@ definitions:
492495
- is_webhook_enabled
493496
- name
494497
- spid_email
498+
- spid_mobile_phone
495499
- version
496500
ProfileWithoutEmail:
497501
type: object
@@ -514,6 +518,9 @@ definitions:
514518
type: string
515519
spid_email:
516520
$ref: '#/definitions/EmailAddress'
521+
spid_mobile_phone:
522+
type: string
523+
minLength: 1
517524
preferred_languages:
518525
type: array
519526
items:
@@ -529,6 +536,7 @@ definitions:
529536
- is_webhook_enabled
530537
- name
531538
- spid_email
539+
- spid_mobile_phone
532540
- version
533541
PublicSession:
534542
type: object

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,7 @@
6060
"redis": "^2.8.0",
6161
"redis-clustr": "^1.6.0",
6262
"request-ip": "^2.1.1",
63-
"spid-passport": "git://github.com/gunzip/spid-passport.git#5cd9f353",
63+
"spid-passport": "git://github.com/gunzip/spid-passport.git#5900adf9",
6464
"typescript": "^2.9.2",
6565
"ulid": "^2.2.2",
6666
"validator": "^10.4.0",

src/controllers/__tests__/authenticationController.test.ts

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
/* tslint:disable:no-big-function */
66

77
import { left, right } from "fp-ts/lib/Either";
8+
import { NonEmptyString } from "italia-ts-commons/lib/strings";
89
import { UrlFromString } from "italia-ts-commons/lib/url";
910
import * as lolex from "lolex";
1011
import * as redis from "redis";
@@ -109,6 +110,7 @@ const mockedUser: User = {
109110
spid_email: anEmailAddress,
110111
spid_idp: "xxx",
111112
spid_level: aValidSpidLevel,
113+
spid_mobile_phone: "3222222222222" as NonEmptyString,
112114
wallet_token: mockWalletToken as WalletToken
113115
};
114116

@@ -122,6 +124,7 @@ const validUserPayload = {
122124
issuer: {
123125
_: "xxx"
124126
},
127+
mobilePhone: "3222222222222",
125128
name: aValidname,
126129
nameID: "garibaldi",
127130
nameIDFormat: aValidIDFormat,
@@ -136,6 +139,7 @@ const invalidUserPayload = {
136139
issuer: {
137140
_: "xxx"
138141
},
142+
mobilePhone: "3222222222222",
139143
name: aValidname,
140144
nameID: "garibaldi",
141145
nameIDFormat: aValidIDFormat,
@@ -428,14 +432,15 @@ IFJiDanROwzoG0YNd8aCWE8ZM2y81Ww=
428432
<RequestedAttribute Name="name" NameFormat="urn:oasis:names:tc:SAML:2.0:attrname-format:unspecified" FriendlyName="Nome"/>
429433
<RequestedAttribute Name="familyName" NameFormat="urn:oasis:names:tc:SAML:2.0:attrname-format:unspecified" FriendlyName="Cognome"/>
430434
<RequestedAttribute Name="email" NameFormat="urn:oasis:names:tc:SAML:2.0:attrname-format:unspecified" FriendlyName="Email"/>
435+
<RequestedAttribute Name="mobilePhone" NameFormat="urn:oasis:names:tc:SAML:2.0:attrname-format:unspecified" FriendlyName="Numero di telefono"/>
431436
</AttributeConsumingService>
432437
</SPSSODescriptor>
433438
<Organization>
434439
<OrganizationName>Digital citizenship proxy</OrganizationName>
435440
<OrganizationDisplayName>Digital citizenship proxy</OrganizationDisplayName>
436441
<OrganizationURL>https://github.com/teamdigitale/italia-backend</OrganizationURL>
437442
</Organization>
438-
<Signature xmlns="http://www.w3.org/2000/09/xmldsig#"><SignedInfo><CanonicalizationMethod Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"/><SignatureMethod Algorithm="http://www.w3.org/2001/04/xmldsig-more#rsa-sha256"/><Reference URI="#http___italia_backend"><Transforms><Transform Algorithm="http://www.w3.org/2000/09/xmldsig#enveloped-signature"/><Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"/></Transforms><DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256"/><DigestValue>Mh1V7fJl+pMthhcJAAhEBuY58dWxqd3NI2ha/JyPpeI=</DigestValue></Reference></SignedInfo><SignatureValue>SIzSS+ZwK00YtvsXR8odCkrkBapatSdy8n4ifLl0/zoRQM7UCPrSKbUWihMBJCe7HdoT4VXOhhhgo9+IdE1qunrxQ1a3ydQbySRAidtaGbOQf5JxfzH0zYcKCQJLRPMXtLBNL3qlt+np0Bf740ZpzaKHRktaRn/0yKEHEtE9khf8d2xuzIm/fw75L2/i7wSggNFSUBzwSGd8EN3XRFWgwUuIwP6NK8GAjZa7pO0sZ0Z2zqCL1Q75/FZqaRBqvkrGDmlVu7wRJDTY6WSlzQ7PdhrLyGb4pxjWER0SfnKJBskS9SVjPP9ypb/AoQB6zoFX/58NtDUaluBr3jgxvWLH5R4=</SignatureValue><KeyInfo><X509Data><X509Certificate>
443+
<Signature xmlns="http://www.w3.org/2000/09/xmldsig#"><SignedInfo><CanonicalizationMethod Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"/><SignatureMethod Algorithm="http://www.w3.org/2001/04/xmldsig-more#rsa-sha256"/><Reference URI="#http___italia_backend"><Transforms><Transform Algorithm="http://www.w3.org/2000/09/xmldsig#enveloped-signature"/><Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"/></Transforms><DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256"/><DigestValue>Bf2Cp9GHtyquphvca26konsKBCC5ZWZE/Jg/ouPscmg=</DigestValue></Reference></SignedInfo><SignatureValue>Xy6T5fn1q2IS0GCXkfOccJv4rF+QrUshbV4hcn/XCfeGSX+C9Kunxx2+BuVMOpuTjtYGUxgCEdMAGOGbaOtCM8pE0XlrCDrAibvSYMvREYSWIWg6ljpUpnPTkM8YNlkot7Gl5Vs7sR3+5vA00SvudJqElttDo3/jrMLGSp4QmX5pcoycmvxummZ4rVktxhQuVdUyODD3Hl+DYJMzkUIBrxz+wR/ysPpi+aBAfNFY+WwTFB/JmVmDHmyoCo02QTaLZqSDRE9JfYU3bmTApqDOwRUAX3MKGx13i/wIw2iqPAakqRM7lHfJBzFS3cTXziCqHB72++pGc/ys9HFoddw+3Is=</SignatureValue><KeyInfo><X509Data><X509Certificate>
439444
MIIDczCCAlqgAwIBAgIBADANBgkqhkiG9w0BAQ0FADBTMQswCQYDVQQGEwJpdDEN
440445
MAsGA1UECAwEUm9tZTEUMBIGA1UECgwLYWdpZC5nb3YuaXQxHzAdBgNVBAMMFmh0
441446
dHBzOi8vaXRhbGlhLWJhY2tlbmQwHhcNMTcxMDI2MTAzNTQwWhcNMTgxMDI2MTAz
@@ -457,8 +462,8 @@ OM+P8UsrYi2KZuyzSrHq5c0GJz0UzSs8cIDC/CPEajx2Uy+7TABwR4d20Hyo6WIm
457462
IFJiDanROwzoG0YNd8aCWE8ZM2y81Ww=
458463
</X509Certificate></X509Data></KeyInfo></Signature></EntityDescriptor>`;
459464

460-
const matadata = await controller.metadata();
461-
matadata.apply(res);
465+
const metadata = await controller.metadata();
466+
metadata.apply(res);
462467

463468
expect(controller).toBeTruthy();
464469
expect(res.status).toHaveBeenCalledWith(200);

src/controllers/__tests__/messagesController.test.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
/* tslint:disable:no-any */
22

33
import { right } from "fp-ts/lib/Either";
4+
import { NonEmptyString } from "italia-ts-commons/lib/strings";
45
import mockReq from "../../__mocks__/request";
56
import mockRes from "../../__mocks__/response";
67
import ApiClient from "../../services/apiClientFactory";
@@ -54,6 +55,7 @@ const mockedUser: User = {
5455
spid_email: anEmailAddress,
5556
spid_idp: "spid_idp_name",
5657
spid_level: aValidSpidLevel,
58+
spid_mobile_phone: "3222222222222" as NonEmptyString,
5759
wallet_token: "123hexToken" as WalletToken
5860
};
5961

src/controllers/__tests__/notificationController.test.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import { ResponseSuccessJson } from "italia-ts-commons/lib/responses";
2+
import { NonEmptyString } from "italia-ts-commons/lib/strings";
23
import mockReq from "../../__mocks__/request";
34
import mockRes from "../../__mocks__/response";
45
import NotificationService from "../../services/notificationService";
@@ -31,6 +32,7 @@ const mockedUser: User = {
3132
spid_email: anEmailAddress,
3233
spid_idp: "spid_idp_name",
3334
spid_level: aValidSpidLevel,
35+
spid_mobile_phone: "3222222222222" as NonEmptyString,
3436
wallet_token: "123hexToken" as WalletToken
3537
};
3638

@@ -46,6 +48,7 @@ const mockedInvalidUser: User = {
4648
spid_email: anEmailAddress,
4749
spid_idp: "spid_idp_name",
4850
spid_level: aValidSpidLevel,
51+
spid_mobile_phone: "3222222222222" as NonEmptyString,
4952
wallet_token: "123hexToken" as WalletToken
5053
};
5154

src/controllers/__tests__/profileController.test.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
import { right } from "fp-ts/lib/Either";
44
import { NonNegativeInteger } from "italia-ts-commons/lib/numbers";
5+
import { NonEmptyString } from "italia-ts-commons/lib/strings";
56
import mockReq from "../../__mocks__/request";
67
import mockRes from "../../__mocks__/response";
78
import ApiClient from "../../services/apiClientFactory";
@@ -63,6 +64,7 @@ const mockedUser: User = {
6364
spid_email: anEmailAddress,
6465
spid_idp: "spid_idp_name",
6566
spid_level: aValidSpidLevel,
67+
spid_mobile_phone: "3222222222222" as NonEmptyString,
6668
wallet_token: "123hexToken" as WalletToken
6769
};
6870

src/controllers/__tests__/serviceController.test.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,7 @@ const mockedUser: User = {
4646
spid_email: anEmailAddress,
4747
spid_idp: "spid_idp_name",
4848
spid_level: aValidSpidLevel,
49+
spid_mobile_phone: "3222222222222" as NonEmptyString,
4950
wallet_token: "123hexToken" as WalletToken
5051
};
5152

src/controllers/__tests__/sessionController.test.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
/* tslint:disable:no-identical-functions */
55
/* tslint:disable:no-big-function */
66

7+
import { NonEmptyString } from "italia-ts-commons/lib/strings";
78
import mockReq from "../../__mocks__/request";
89
import mockRes from "../../__mocks__/response";
910
import { EmailAddress } from "../../types/api/EmailAddress";
@@ -41,6 +42,7 @@ const mockedUser: User = {
4142
spid_email: anEmailAddress,
4243
spid_idp: "xxx",
4344
spid_level: aValidSpidLevel,
45+
spid_mobile_phone: "3222222222222" as NonEmptyString,
4446
wallet_token: mockWalletToken as WalletToken
4547
};
4648

src/controllers/pagoPAController.ts

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,10 @@ export default class PagoPAController {
4747
const email = maybeCustomEmail ? maybeCustomEmail : profile.spid_email;
4848

4949
return ResponseSuccessJson({
50-
email
50+
email,
51+
family_name: user.family_name,
52+
mobile_phone: user.spid_mobile_phone,
53+
name: user.name
5154
});
5255
}
5356
}

src/services/__tests__/messagesService.test.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import { left, right } from "fp-ts/lib/Either";
2+
import { NonEmptyString } from "italia-ts-commons/lib/strings";
23
import { EmailAddress } from "../../types/api/EmailAddress";
34
import { FiscalCode } from "../../types/api/FiscalCode";
45
import { SpidLevelEnum } from "../../types/api/SpidLevel";
@@ -177,6 +178,7 @@ const mockedUser: User = {
177178
spid_email: aValidEmail,
178179
spid_idp: "spid_idp_name",
179180
spid_level: aValidSpidLevel,
181+
spid_mobile_phone: "3222222222222" as NonEmptyString,
180182
wallet_token: "HexToKen" as WalletToken
181183
};
182184

src/services/__tests__/profileService.test.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import { right } from "fp-ts/lib/Either";
2+
import { NonEmptyString } from "italia-ts-commons/lib/strings";
23
import { EmailAddress } from "../../types/api/EmailAddress";
34
import { FiscalCode } from "../../types/api/FiscalCode";
45
import { IsInboxEnabled } from "../../types/api/IsInboxEnabled";
@@ -46,6 +47,7 @@ const proxyProfileWithEmailResponse = {
4647
name: "Luca",
4748
preferred_languages: ["it_IT"],
4849
spid_email: aValidSPIDEmail,
50+
spid_mobile_phone: "3222222222222",
4951
version: 42
5052
};
5153
const proxyProfileWithoutEmailResponse = {
@@ -57,6 +59,7 @@ const proxyProfileWithoutEmailResponse = {
5759
is_webhook_enabled: false,
5860
name: "Luca",
5961
spid_email: aValidSPIDEmail,
62+
spid_mobile_phone: "3222222222222",
6063
version: 0
6164
};
6265
const proxyUpsertRequest = {
@@ -103,6 +106,7 @@ const mockedUser: User = {
103106
spid_email: aValidSPIDEmail,
104107
spid_idp: "spid_idp_name",
105108
spid_level: aValidSpidLevel,
109+
spid_mobile_phone: "3222222222222" as NonEmptyString,
106110
wallet_token: "HexToKen" as WalletToken
107111
};
108112

src/services/__tests__/redisSessionStorage.test.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
/* tslint:disable:no-null-keyword */
66

77
import { left, right } from "fp-ts/lib/Either";
8+
import { NonEmptyString } from "italia-ts-commons/lib/strings";
89
import * as lolex from "lolex";
910
import { createMockRedis } from "mock-redis-client";
1011
import { EmailAddress } from "../../types/api/EmailAddress";
@@ -35,6 +36,7 @@ const aValidUser: User = {
3536
spid_email: anEmailAddress,
3637
spid_idp: "spid_idp_name",
3738
spid_level: aValidSpidLevel,
39+
spid_mobile_phone: "3222222222222" as NonEmptyString,
3840
wallet_token: "HexToKen" as WalletToken
3941
};
4042

src/strategies/spidStrategy.ts

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -88,7 +88,13 @@ const spidStrategy = (
8888
acceptedClockSkewMs: samlAcceptedClockSkewMs,
8989
attributeConsumingServiceIndex: samlAttributeConsumingServiceIndex,
9090
attributes: {
91-
attributes: ["fiscalNumber", "name", "familyName", "email"],
91+
attributes: [
92+
"fiscalNumber",
93+
"name",
94+
"familyName",
95+
"email",
96+
"mobilePhone"
97+
],
9298
name: "Required attributes"
9399
},
94100
callbackUrl: samlCallbackUrl,

src/types/__tests__/profile.test.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import { isLeft, isRight } from "fp-ts/lib/Either";
44
import mockReq from "../../__mocks__/request";
55

66
import { NonNegativeInteger } from "italia-ts-commons/lib/numbers";
7+
import { NonEmptyString } from "italia-ts-commons/lib/strings";
78
import { EmailAddress } from "../api/EmailAddress";
89
import { ExtendedProfile } from "../api/ExtendedProfile";
910
import { FiscalCode } from "../api/FiscalCode";
@@ -55,6 +56,7 @@ const mockedUser: User = {
5556
spid_email: anEmailAddress,
5657
spid_idp: "spid_idp_name",
5758
spid_level: aValidSpidLevel,
59+
spid_mobile_phone: "3222222222222" as NonEmptyString,
5860
wallet_token: "HexToKen" as WalletToken
5961
};
6062

src/types/__tests__/user.test.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
import { Either, isLeft, isRight } from "fp-ts/lib/Either";
44
import mockReq from "../../__mocks__/request";
55

6+
import { NonEmptyString } from "italia-ts-commons/lib/strings";
67
import { EmailAddress } from "../api/EmailAddress";
78
import { FiscalCode } from "../api/FiscalCode";
89
import { SpidLevelEnum } from "../api/SpidLevel";
@@ -31,6 +32,7 @@ const mockedSpidUser: any = {
3132
fiscalNumber: aFiscalNumber,
3233
getAssertionXml: () => "",
3334
issuer: anIssuer,
35+
mobilePhone: "3222222222222",
3436
name: "Giuseppe Maria",
3537
nameID: "garibaldi",
3638
nameIDFormat: "urn:oasis:names:tc:SAML:2.0:nameid-format:transient",
@@ -55,6 +57,7 @@ const mockedUser: User = {
5557
spid_email: anEmailAddress,
5658
spid_idp: "spid_idp_name",
5759
spid_level: aValidSpidLevel,
60+
spid_mobile_phone: "3222222222222" as NonEmptyString,
5861
wallet_token: "HexToKen" as WalletToken
5962
};
6063

src/types/profile.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@ export function toAppProfileWithEmail(
3535
name: user.name,
3636
preferred_languages: from.preferredLanguages,
3737
spid_email: user.spid_email,
38+
spid_mobile_phone: user.spid_mobile_phone,
3839
version: from.version
3940
};
4041
}
@@ -54,6 +55,7 @@ export function toAppProfileWithoutEmail(user: User): ProfileWithoutEmail {
5455
is_webhook_enabled: false,
5556
name: user.name,
5657
spid_email: user.spid_email,
58+
spid_mobile_phone: user.spid_mobile_phone,
5759
version: 0 as NonNegativeInteger
5860
};
5961
}

src/types/user.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ import { number, string } from "io-ts";
1010
import * as t from "io-ts";
1111
import { JSONFromString } from "io-ts-types";
1212
import { readableReport } from "italia-ts-commons/lib/reporters";
13+
import { NonEmptyString } from "italia-ts-commons/lib/strings";
1314
import { DOMParser } from "xmldom";
1415
import { log } from "../utils/logger";
1516
import { EmailAddress } from "./api/EmailAddress";
@@ -32,6 +33,7 @@ export const User = t.interface({
3233
spid_email: EmailAddress,
3334
spid_idp: string,
3435
spid_level: SpidLevel,
36+
spid_mobile_phone: NonEmptyString,
3537
wallet_token: WalletToken
3638
});
3739

@@ -45,6 +47,7 @@ export const SpidUser = t.interface({
4547
fiscalNumber: FiscalCode,
4648
getAssertionXml: t.Function,
4749
issuer: Issuer,
50+
mobilePhone: NonEmptyString,
4851
name: string,
4952
nameID: string,
5053
nameIDFormat: string,
@@ -73,6 +76,7 @@ export function toAppUser(
7376
spid_email: from.email,
7477
spid_idp: from.issuer._, // The used idp is needed for logout.
7578
spid_level: from.authnContextClassRef,
79+
spid_mobile_phone: from.mobilePhone,
7680
wallet_token: walletToken
7781
};
7882
}

yarn.lock

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5197,9 +5197,9 @@ spdx-license-ids@^3.0.0:
51975197
version "3.0.0"
51985198
resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.0.tgz#7a7cd28470cc6d3a1cfe6d66886f6bc430d3ac87"
51995199

5200-
"spid-passport@git://github.com/gunzip/spid-passport.git#6395dd9e5fdf1ecd48af5f02745a37a7aec9b9d0":
5200+
"spid-passport@git://github.com/gunzip/spid-passport.git#5900adf9":
52015201
version "1.0.0"
5202-
resolved "git://github.com/gunzip/spid-passport.git#6395dd9e5fdf1ecd48af5f02745a37a7aec9b9d0"
5202+
resolved "git://github.com/gunzip/spid-passport.git#5900adf925b99a91861b5d1f348ee8c7d499ed55"
52035203
dependencies:
52045204
passport "^0.4.0"
52055205
passport-saml "^0.33.0"

0 commit comments

Comments
 (0)