//
// 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.
//
Apache Unomi provides an endpoint to manage visitor privacy. You will find in this section information about what it
includes as well as how to use it.

=== Setting up access to the privacy endpoint

The privacy endpoint is a bit special, because despite being protected by basic authentication as the rest of the REST
API is is actually designed to be available to end-users.

So in effect it should usually be proxied so that public internet users can access the endpoint but the proxy should
also check if the profile ID wasn't manipulated in some way.

Apache Unomi doesn't provide (for the moment) such a proxy, but basically it should do the following:

1. check for potential attack activity (could be based on IDS policies or even rate detection), and at the minimum check
that the profile ID cookie seems authentic (for example by checking that it is often coming from the same IP or the same
geographic location)
2. proxy to /cxs/privacy

=== Anonymizing a profile

It is possible to anonymize a profile, meaning it will remove all "identifying" property values from the profile.
Basically all properties with the tag `personalIdentifierProperties` will be purged from the profile.

Here's an example of a request to anonymize a profile:

[source]
----
curl -X POST http://localhost:8181/cxs/privacy/profiles/{profileID}/anonymize?scope=ASCOPE
----

where `{profileID}` must be replaced by the actual identifier of a profile
and `ASCOPE` must be replaced by a scope identifier.

=== Downloading profile data

It is possible to download the profile data of a user. This will only download the profile for a user using the
specified ID as a cookie value.

Warning: this operation can also be sensitive so it would be better to protected with a proxy that can perform some
validation on the requests to make sure no one is trying to download a profile using some kind of "guessing" of profile
IDs.

[source]
----
curl -X GET http://localhost:8181/cxs/client/myprofile.[json,csv,yaml,text] \
--cookie "context-profile-id=PROFILE-ID"
----

where `PROFILE-ID` is the profile identifier for which to download the profile.

=== Deleting a profile

It is possible to delete a profile, but this works a little differently than you might expect. In all cases the data
contained in the profile will be completely erased. If the `withData` optional flag is set to true, all past event and
session data will also be detached from the current profile and anonymized.

[source]
----
curl -X DELETE http://localhost:8181/cxs/privacy/profiles/{profileID}?withData=false --user karaf:karaf
----

where `{profileID}` must be replaced by the actual identifier of a profile
and the `withData` specifies whether the data associated with the profile must be anonymized or not

=== Related

You might also be interested in the <<Consent API>> section that describe how to manage profile consents.
