Skip to content

Commit cb796f8

Browse files
authored
Merge pull request #5 from fullcontact/permission-api
Add Permission API
2 parents 8c07b71 + dc12ea0 commit cb796f8

14 files changed

+2014
-25
lines changed

README.md

Lines changed: 165 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -67,6 +67,13 @@ your integration.
6767
- `identity.resolve`
6868
- `identity.delete`
6969

70+
- _[Permission](https://platform.fullcontact.com/docs/apis/permission/introduction)_
71+
- `permission.create`
72+
- `permission.delete`
73+
- `permission.find`
74+
- `permission.current`
75+
- `permission.verify`
76+
7077
## Providing Authentication to FullContact Client
7178
FullContact client uses ```CredentialsProvider``` interface for Authentication. Different ways
7279
to provide authentication:
@@ -165,6 +172,7 @@ such as:
165172
- `PersonId`: _string_
166173
- `LiNonId`: _string_
167174
- `PartnerId`: _string_
175+
- `Placekey`: _string_
168176

169177

170178
```go
@@ -300,6 +308,7 @@ such as:
300308
- `PersonId`: _string_
301309
- `LiNonId`: _string_
302310
- `PartnerId`: _string_
311+
- `Placekey`: _string_
303312

304313
```go
305314
resolveRequest, err := fc.NewResolveRequest(
@@ -441,3 +450,159 @@ if resp.IsSuccessful {
441450
}
442451
```
443452

453+
## Permission
454+
[Permission API Reference](https://platform.fullcontact.com/docs/apis/permission/introduction)
455+
- `permission.create`
456+
- `permission.delete`
457+
- `permission.find`
458+
- `permission.current`
459+
- `permission.verify`
460+
461+
#### Permission Request
462+
Permission uses the following type of parameters for it's requests
463+
464+
`PermissionRequest` for
465+
- `permission.create`
466+
- `permission.verify`
467+
468+
and `MultifieldRequest` for
469+
- `permission.delete`
470+
- `permission.find`
471+
- `permission.current`
472+
473+
You can build a Permission Request by using `NewPermissionRequest`
474+
and setting different input parameters that you have.
475+
476+
All Permission Api requires `MultifieldRequest` requests, which can be constructed by using `NewMultifieldRequest` and following are it's parameters.
477+
478+
- `Emails`: _[]string_
479+
- `Phones`: _[]string_
480+
- `Location`: _*Location_
481+
- `AddressLine1`: _string_
482+
- `AddressLine2`: _string_
483+
- `City`: _string_
484+
- `Region`: _string_
485+
- `RegionCode`: _string_
486+
- `PostalCode`: _string_
487+
- `Name`: _*PersonName_
488+
- `Full`: _string_
489+
- `Given`: _string_
490+
- `Family`: _string_
491+
- `Profiles`: _[]*Profile_
492+
- `Service`: _string_
493+
- `Username`: _string_
494+
- `Userid`: _string_
495+
- `Url`: _string_
496+
- `Maids`: _[]string_
497+
- `RecordId`: _string_
498+
- `PersonId`: _string_
499+
- `LiNonId`: _string_
500+
- `PartnerId`: _string_
501+
- `Placekey`: _string_
502+
503+
```go
504+
multifieldRequest, err := fc.NewMultifieldRequest(
505+
fc.WithEmailForMultifieldRequest("bart@fullcontact.com"))
506+
permissionRequest, err := fc.NewPermissionRequest(
507+
fc.WithMultifieldRequestForPermission(multifieldRequest))
508+
```
509+
510+
### Permission Request
511+
All permission methods returns a `channel` of type `APIResponse` from which you can get corresponding response classes.
512+
513+
The following are the corresponding response classes
514+
- `PermissionCreatedResponse` - permission.create
515+
- `PermissionDeleteResponse` - permission.delete
516+
- `PermissionVerifyResponse` - permission.verify
517+
- `PermissionFindResponse` - permission.find
518+
- `PermissionCurrentResponse` - permission.current
519+
520+
`PermissionCreate` and `PermissionVerify` requires a `ResolveRequest` as parameter while the rest requires `MultifieldRequest` as parameter
521+
522+
### Permission Create
523+
524+
#### Parameters:
525+
Supported fields in query:
526+
- `query`: MultifieldRequest - [required]
527+
- `consentPurposes`: List[ConsentPurposes] - [required]
528+
- `locale`: string
529+
- `ipAddress`: string
530+
- `language`: string
531+
- `collectionMethod`: string - [required]
532+
- `collectionLocation`: string - [required]
533+
- `policyUrl`: string - [required]
534+
- `termsService`: string - [required]
535+
- `tcf`: string
536+
- `timestamp`: int
537+
538+
#### Returns:
539+
class: `PermissionCreateResponse`. A basic API response with response code as 202 if successful.
540+
541+
### Permission Verify
542+
#### Parameters:
543+
Supported fields in query:
544+
- `query`: MultifieldRequest - [required]
545+
- `purposeId`: int - [required]
546+
- `channel`: string - [required]
547+
548+
#### Returns:
549+
class: `PermissionVerifyResponse` with following fields.
550+
551+
- `ttl`: string
552+
- `enabled`: bool
553+
- `channel`: string
554+
- `purposeId`: int
555+
- `purposeName`: string
556+
- `timestamp`: int
557+
558+
### Permission Delete
559+
#### Parameters:
560+
Query takes a `MultiFieldReq`
561+
562+
#### Returns:
563+
class: `PermissionDeleteResponse`. A basic API response with response code as 202 if successful.
564+
565+
### Permission Find
566+
#### Parameters:
567+
Query takes a `MultiFieldReq`
568+
569+
#### Returns:
570+
class: `PermissionFindResponse` with list of Permissions.
571+
572+
### Permission Current
573+
#### Parameters:
574+
Query takes a `MultiFieldReq`
575+
576+
#### Returns:
577+
class: `PermissionCurrentResponse` with set of current permissions
578+
579+
```go
580+
resp := <-fcClient.PermissionCreate(permissionRequest)
581+
fmt.Printf("Permission Create API Response: %v", resp)
582+
if resp.IsSuccessful {
583+
fmt.Println("Permission Created Successfully!")
584+
}
585+
resp = <-fcClient.PermissionVerify(permissionRequest)
586+
fmt.Printf("Permission Verify API Response: %v", resp)
587+
if resp.IsSuccessful {
588+
fmt.Printf("Permissions List: %v", resp.PermissionVerifyResponse)
589+
}
590+
591+
resp = <-fcClient.PermissionDelete(multifieldRequest)
592+
fmt.Printf("Permission Delete API Response: %v", resp)
593+
if resp.IsSuccessful {
594+
fmt.Println("Permission Deleted Successfully!")
595+
}
596+
597+
resp = <-fcClient.PermissionFind(multifieldRequest)
598+
fmt.Printf("Permission Find API Response: %v", resp)
599+
if resp.IsSuccessful {
600+
fmt.Printf("Permission Find: %v", resp.PermissionFindResponse)
601+
}
602+
603+
resp = <-fcClient.PermissionCurrent(multifieldRequest)
604+
fmt.Printf("Permission Current API Response: %v", resp)
605+
if resp.IsSuccessful {
606+
fmt.Printf("Permission Current: %v", resp.PermissionCurrentResponse)
607+
}
608+
```

example/main.go

Lines changed: 67 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -191,4 +191,71 @@ func main() {
191191
if resp.IsSuccessful {
192192
fmt.Println(resp.EmailVerificationResponse)
193193
}
194+
195+
//Permission
196+
//Permission Create
197+
198+
multifieldRequest, err := fc.NewMultifieldRequest(
199+
fc.WithEmailForMultifieldRequest("bart@fullcontact.com"))
200+
201+
consentPurpose := fc.NewConsentPurpose(
202+
fc.WithConsentPurposeId(1),
203+
fc.WithConsentPurposeChannel("web"),
204+
fc.WithConsentPurposeTtl(365),
205+
fc.WithConsentPurposeEnabled(true))
206+
207+
permissionCreateRequest, err := fc.NewPermissionRequest(
208+
fc.WithMultifieldRequestForPermission(multifieldRequest),
209+
fc.WithConsentPurposeForPermission(consentPurpose),
210+
fc.WithCollectionMethodForPermission("cookiePopUp"),
211+
fc.WithCollectionLocationForPermission("https://kenblahblah.com"),
212+
fc.WithPolicyUrlForPermission("http://foo.baz"),
213+
fc.WithTermsServiceForPermission("http://foo.tos"))
214+
if err != nil {
215+
log.Fatalln(err)
216+
return
217+
}
218+
219+
//Sending Permission Create request
220+
resp = <- fcClient.PermissionCreate(permissionCreateRequest)
221+
fmt.Printf("Permission Create API Response: %v", resp)
222+
if resp.IsSuccessful == true {
223+
fmt.Printf("Permission Create Response: %v", resp)
224+
}
225+
226+
//Permission Find
227+
//Sending Permission Find request which returns a channel of type `APIResponse`
228+
resp = <- fcClient.PermissionFind(multifieldRequest)
229+
fmt.Printf("Permission Find API Response: %v", resp)
230+
if resp.IsSuccessful == true {
231+
fmt.Printf("Permission Find Response: %v", resp.PermissionFindResponse)
232+
}
233+
234+
//Permission Current
235+
//Sending Permission Current request which returns a channel of type `APIResponse`
236+
resp = <- fcClient.PermissionCurrent(multifieldRequest)
237+
fmt.Printf("Permission Current API Response: %v", resp)
238+
if resp.IsSuccessful == true {
239+
fmt.Printf("Permission Current Response: %v", resp.PermissionCurrentResponse)
240+
}
241+
242+
//Permission Verify
243+
permissionVerifyRequest, err := fc.NewPermissionRequest(
244+
fc.WithMultifieldRequestForPermission(multifieldRequest),
245+
fc.WithPurposeIdForPermission(1),
246+
fc.WithChannelForPermission("web"))
247+
248+
//Sending Permission Verify request which returns a channel of type `APIResponse`
249+
resp = <- fcClient.PermissionVerify(permissionVerifyRequest)
250+
fmt.Printf("Permission Verify API Response: %v", resp)
251+
if resp.IsSuccessful == true {
252+
fmt.Printf("Permission Verify Response: %v", resp.PermissionVerifyResponse)
253+
}
254+
255+
//Permission Delete
256+
//Sending Permission Delete request
257+
resp = <- fcClient.PermissionDelete(multifieldRequest)
258+
if resp.IsSuccessful == true {
259+
fmt.Printf("Permission Delete API Response: %v", resp)
260+
}
194261
}

fc/api_response.go

Lines changed: 18 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -6,26 +6,30 @@ import (
66
)
77

88
type APIResponse struct {
9-
RawHttpResponse *http.Response
10-
PersonResponse *PersonResp
11-
CompanyResponse *CompanyResponse
12-
CompanySearchResponse []*CompanySearchResponse
13-
ResolveResponse *ResolveResponse
14-
ResolveResponseWithTags *ResolveResponseWithTags
15-
EmailVerificationResponse *EmailVerificationResponse
16-
TagsResponse *TagsResponse
17-
AudienceResponse *AudienceResponse
18-
StatusCode int
19-
Status string
20-
IsSuccessful bool
21-
Err error
9+
RawHttpResponse *http.Response
10+
PersonResponse *PersonResp
11+
CompanyResponse *CompanyResponse
12+
CompanySearchResponse []*CompanySearchResponse
13+
ResolveResponse *ResolveResponse
14+
ResolveResponseWithTags *ResolveResponseWithTags
15+
EmailVerificationResponse *EmailVerificationResponse
16+
TagsResponse *TagsResponse
17+
AudienceResponse *AudienceResponse
18+
PermissionFindResponse []*PermissionFindResponse
19+
PermissionCurrentResponse map[string]map[string]ConsentPurposeResponse
20+
PermissionVerifyResponse *ConsentPurposeResponse
21+
StatusCode int
22+
Status string
23+
IsSuccessful bool
24+
Err error
2225
}
2326

2427
func (resp *APIResponse) String() string {
2528
return fmt.Sprintf("\nRawHttpResponse: %v,\nPersonResponse: %v,\nCompanyResponse: %v,\nCompanySearchResponse: %v,"+
2629
"\nResolveResponse: %v,\nResolveResponseWithTags: %v,\nTagsResponse: %v,\nAudienceResponse: %v,\nEmailVerificationResponse: %v,"+
27-
"\nStatusCode: %v,\nStatus: %v,\nIsSuccessful: %v,\nErr: %v\n",
30+
"\nPermissionFindResponse: %v,\nPermissionCurrentResponse: %v,\nPermissionVerifyResponse: %v,\nStatusCode: %v,\nStatus: %v,\nIsSuccessful: %v,\nErr: %v\n",
2831
resp.RawHttpResponse, resp.PersonResponse, resp.CompanyResponse, resp.CompanySearchResponse, resp.ResolveResponse,
2932
resp.ResolveResponseWithTags, resp.TagsResponse, resp.AudienceResponse, resp.EmailVerificationResponse,
33+
resp.PermissionFindResponse, resp.PermissionCurrentResponse, resp.PermissionVerifyResponse,
3034
resp.StatusCode, resp.Status, resp.IsSuccessful, resp.Err)
3135
}

fc/constants.go

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
package fullcontact
22

33
const (
4-
version = "1.1.1"
4+
version = "1.2.0"
55
userAgent = "FullContact_Go_Client_V" + version
66
FcApiKey = "FC_API_KEY"
77
FCGoClientTestType = "FCGoClientTestType"
@@ -20,4 +20,9 @@ const (
2020
audienceCreateUrl = baseUrl + "audience.create"
2121
audienceDownloadUrl = baseUrl + "audience.download"
2222
emailVerificationUrl = v2BaseUrl + "verification/email"
23+
permissionCreateUrl = baseUrl + "permission.create"
24+
permissionDeleteUrl = baseUrl + "permission.delete"
25+
permissionFindUrl = baseUrl + "permission.find"
26+
permissionCurrentUrl = baseUrl + "permission.current"
27+
permissionVerifyUrl = baseUrl + "permission.verify"
2328
)

0 commit comments

Comments
 (0)