Skip to main content

Module to sync users' profiles

Project description

`pip install middleware_test`

`middleware-active-directory` is required as main provider

**Settings**

All of the settings are specified in config/{env}.conf file

`config/local.conf` will be autocreated after installation
You had to specify all configs there

**Database creation**

`create_db` - creates initial database structure on existing database.
User, password and db name must be specified in config/{env}.conf file

**Installation providers**

`pip install middleware-provider-name`
`provider_name_init` -- creates record in db and child class

then you need to append your class to PROVIDERS_LIST:
PROVIDERS_LIST.append(ActiveDirectoryBase)
PROVIDERS_LIST.append(SlackBase)
PROVIDERS_LIST.append(OfficeVibeBase)

**Running sync***

`from middleware.start_sync import Sync
Sync.run()`

Also command `start_sync` available for this

**Making a report**

`from middleware.make_report import Report
Report.make_report()`

Also command `make_report` available for this


**Possible configuration params**

*Database config*

`middleware_db_name` -- name of database
`mysql_user` -- database user
`mysql_password` -- password to connect to database
`middleware_db_ip` -- db ip

*Active directory settings*

`AD_admin'` - admin profile to connect to Active Director
`AD_password` - password for admin profile
`AD_server` - Active Directory server address
`AD_base_dn` - base dn for Active Directory server

*Slack settings*

`slack_api_tokens_dict` - dict of slack tokens from slack app with read and write permissions for multiply workspaces

*Other settings*

You can setup expiration time of logs in days in 'logs_expires' setting

*Read fields configuration*

Fields which would be read from system you can configure in 'field_read_configuration' table.
There are fields:
(`field_read_configuration_id`, `system_id`, `from_path`, `to_field_name`, `active`, `create_dttm`)

`from_path` should start from '$.'. For example, for this structure:
```
{
"user":
{
"profile":
{
"name": "Test_name"
}
}
}
```
`from_path` would be `$.user.profile.name`

`to_field_name` should be just the single name of the field, the same for the all of systems with equivalent values

Example structure of Active Directory user data:
```
{u'attributes':
{u'manager': u'',
u'departmentNumber': [],
u'telephoneNumber': u'',
u'countryCode': ,
u'physicalDeliveryOfficeName': u'',
u'co': u'',
u'homePhone': u'',
u'streetAddress': u'',
u'title': u'',
u'objectGUID': u'',
u'distinguishedName': u'',
u'name': u'',
u'company': u'',
u'objectClass': [u'top', u'person', u'organizationalPerson', u'user'],
u'street': [],
u'wWWHomePage': u'',
u'comment': [],
u'department': u'',
u'middleName': [],
u'description': [u'Love Python'],
u'initials': u'Y.V.',
u'isDeleted': [],
u'userPrincipalName': u'Some.User@test-octopus.local',
u'c': u'UA',
u'postOfficeBox': [u''],
u'cn': u'Some User',
u'displayName': u'Some User',
u'jpegPhoto': [],
u'mail': u'email@example.com',
u'mobile': u'+380672112999',
u'whenChanged': u'2018-02-27 14:31:38+00:00',
u'sn': u'User',
u'sAMAccountName': u'Some.User',
u'givenName': u'Some',
u'postalAddress': [],
u'facsimileTelephoneNumber': u'',
u'photo': [],
u'st': u'Vinnitsya'},
u'dn': u''}
```

Example of Slack user data
```
{
"ok": true,
"user": {
"id": "",
"team_id": "",
"name": "",
"deleted": ,
"color": "",
"real_name": "",
"tz": "",
"tz_label": "",
"tz_offset": ,
"profile": {
"title": "",
"phone": "",
"skype": "",
"real_name": "",
"real_name_normalized": "",
"display_name": "",
"display_name_normalized": "",
"status_text": "",
"status_emoji": "",
"avatar_hash": "",
"guest_channels": "[]",
"image_original": "",
"email": "",
"first_name": "",
"last_name": "",
"image_24": "",
"image_32": "",
"image_48": "",
"image_72": "",
"image_192": "",
"image_512": "",
"image_1024": "",
"team": ""
},
"is_admin": false,
"is_owner": false,
"is_primary_owner": false,
"is_restricted": true,
"is_ultra_restricted": false,
"is_bot": false,
"updated": ,
"is_app_user": false,
"has_2fa": false,
"enterprise_user": {
"id": "",
"enterprise_id": "",
"enterprise_name": "",
"is_admin": false,
"is_owner": false,
"teams": [
"",
""
]
}
}
}
```

Example of SelectHR user data:
```
{'first_name': '',
'surname': '',
'gender': '',
'mobile_phone_number': '',
'e-mail': '',
'person_number': ,
'birth_date': '',
'updated_at': '',
'initials': '',
'second_name': '',
'nationality': '',
'end_date': '',
'title': '',
'work_phone_number': '',
'biography': '',
'salutation': '',
'post_name': '',
'manager_name': '',
'team': '',
```

!Email and updated_at fields are required for each system

!Person_number is required for SelectHR in `field_read_configuration` and `field_write_configuration`

!Salutation field in SelectHr cannot be updated because, it is a computed field

*Write fields configuration*

Fields which would be read from system you can configure in 'field_write_configuration' table.
There are fields:
(`field_write_configuration_id`, `system_id`, `from_field_name`, `to_path`, `active`, `create_dttm`)

`from_field_name` is a field name from actual_user_data
`to_path` starts from '$.' and configures final field path per system
For example:
`('1', '1', 'first_name', '$.givenName', TRUE, '2017-05-05 12:00:00'), `


For Active Directory and SelectHR structure will be the same as in `field_read_configuration`,
but Slack system allows to configure only profile fields, so structure for configuring will be:
```
"profile": {
"title": "",
"phone": "",
"skype": "",
"real_name": "",
"real_name_normalized": "",
"display_name": "",
"display_name_normalized": "",
"status_text": "",
"status_emoji": "",
"avatar_hash": "",
"guest_channels": "[]",
"image_original": "",
"email": "",
"first_name": "",
"last_name": "",
"image_24": "",
"image_32": "",
"image_48": "",
"image_72": "",
"image_192": "",
"image_512": "",
"image_1024": "",
"team": ""
}
```

*Write forbidden fields*

in `write_forbidden_field` table you can specified field that cannot be updated

Fields
(`write_forbidden_field_id`, `system_id`, `field_name`, `create_dttm`)

Example:

`('1', '3', 'last_name', '2017-05-05 12:00:00'),`


*Write Required Fields*

in `write_required_field` table you can specify field required to update from specified system to other ones

Fields
(`write_required_field_id`, `system_id`, `field_name`, `create_dttm`)

Example:

`('1', '3', 'manager', '2017-05-05 12:00:00'),`



*Write Empty Field By User*

in `write_empty_field_by_user` table you can set up field that would be rewritten in specified system by default value for specified user

Fields
`write_empty_field_by_user_id`, `system_id`, `field_name`, `user_email`, `default_value`, `create_dttm`)

Example:

`('1', '1', 'job_title', 'email@example.com', '', '2017-05-05 12:00:00')`


Platform: UNKNOWN
Classifier: Development Status :: 3 - Alpha
Classifier: Environment :: Web Environment
Classifier: Intended Audience :: Developers
Classifier: License :: OSI Approved :: BSD License
Classifier: Operating System :: OS Independent
Classifier: Programming Language :: Python :: 2

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

middleware_test-2.1.tar.gz (23.4 kB view details)

Uploaded Source

File details

Details for the file middleware_test-2.1.tar.gz.

File metadata

  • Download URL: middleware_test-2.1.tar.gz
  • Upload date:
  • Size: 23.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.11.0 pkginfo/1.4.2 requests/2.18.4 setuptools/28.8.0 requests-toolbelt/0.8.0 tqdm/4.24.0 CPython/2.7.13

File hashes

Hashes for middleware_test-2.1.tar.gz
Algorithm Hash digest
SHA256 fb4fb073d571c74c0771a54a650950eb65635b38c3c752eb30f7df0b78490f52
MD5 0b4a31d55ec83b8c95ad771ab18e2259
BLAKE2b-256 42c5dde4f32ea09d4f000527aab7b1b0076c887d0aa98d129f0616a4dff1ce54

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page