TIP: You can type at any time to perform a new search.

Security findings

Repository
OCA/social · module folder · Try on Runboat
Module version
1.0.0
Category
Social Network
Folder size
0.36 MB
License
AGPL-3
Application
No
Auto-installable
Yes
Website
https://github.com/OCA/social
Last tracking update
2026-10-08 03:00:01
Authors
Odoo Community Association (OCA), Binhex
Maintainers
Odoo Community Association (OCA), Binhex
Committers
OCA-git-bot, oca-ci, Edilio Escalona Almira
Odoo dependencies
Python dependencies
None
System dependencies
None
Required by
None
Description
This module brings back into Odoo what a LinkedIn page already published: the
posts themselves, the figures each of them collected, and their comments and
reactions.

It is the LinkedIn half of *Social Media Sync*, split from *Social Media
Linkedin* along the same line: what a call costs. The connector asks LinkedIn
for a fixed number of things per account — publish, delete, the daily figures
of the whole page — and that number does not change whether the page
published once or ten thousand times. Everything whose cost grows with the
history of the page lives here: reading the feed one page at a time, asking
LinkedIn about the publications missing from it a hundred URNs at a time, and
one call per comment thread. The figures of the publications are read by
*Social Media Linkedin*, in as many calls as the 4 KB limit of the query
string needs, whoever hands it the identifiers.

An Odoo that only publishes on LinkedIn installs *Social Media Linkedin*
alone and pays for none of it.

Main features:

- Import of the publications of the page and of the statistics each of them
  collected, on demand and through the scheduled actions of *Social Media
  Sync*.
- Full resynchronization of a page, the only pass that notices a publication
  deleted on LinkedIn. Missing from the feed never marks anything on its own:
  LinkedIn is asked about each suspect by its URN, one call per hundred of
  them, and only a `404` writes the deletion. The
  [Posts API](https://learn.microsoft.com/en-us/linkedin/marketing/community-management/shares/posts-api)
  publishes asynchronously (`PUBLISH_REQUESTED`), answers the author finder in
  reader context, and states that a page returning fewer results than asked is
  not the end of the feed — so a publication that is alive can be absent from a
  listing read whole.
- Publications deleted on LinkedIn recognised while the dashboard is being
  used: a reaction or a comment answered with a `404` makes Odoo ask
  LinkedIn about the publication itself, and only its confirmation marks the
  line as deleted.
- Comment threads read from the dashboard, with their replies, and *Recommend*
  on a publication and on each of its comments, which also withdraws the
  reaction it made.
- Detection of pages that moved since the last import, which puts a notice on
  the dashboard inviting the user to press *Update*. It costs at most two
  calls per account, and reuses the daily figures the connector already read
  on the same pass instead of asking LinkedIn for the same days twice.

Code Analysis info_outline

Views touched (1)
XML IDNameModelTypeStatus
social_account_view_form_inherit_sync_linkedin social.account.view.form.inherit.sync.linkedin social.account form Inherits social_media_linkedin.social_account_view_form_inherit
HTTP endpoints (0)

No HTTP endpoints found for this module.

Models touched (2)

New fields (3)
  • linkedin_missing_sync_scopes Char
    compute='_compute_linkedin_missing_sync_scopes' help='The scopes the token of this account was not granted and the import of its history needs. A token keeps the scopes it was issued with, so an account associated before this module was installed has to be authorized again.'
  • linkedin_statistics_checkpoint Json
    copy=False groups='base.group_system' help='The daily figures LinkedIn reported for the whole page over the last days, as of the last time the publications were imported. The check for updates compares the page against it instead of reading the statistics of every publication.' string='Statistics Checkpoint'
  • linkedin_sync_scopes_notified Boolean
    copy=False default=False help='Whether the responsible user was already told that this account has to be authorized again before its history can be imported. Kept so the check that runs every two hours warns once and not on every pass.'
Public methods (0)

No public methods.

New fields (0)

No new fields.

Public methods (8)
  • action_like_comment(self, comment_ref=None, author_urn=None)
  • action_like_post(self, author_urn=None)
  • action_unlike_comment(self, comment_ref=None, author_urn=None)
  • action_unlike_post(self, author_urn=None)
  • create_comment(self, post_data, context=None)
  • delete_comment(self, comment_ref)
    Delete one comment of the thread of this publication. LinkedIn honours the deletion for the author of the comment and for the owner of the publication, and the owner is what this account is: moderating a comment of somebody else on its own post is the ordinary case. Which of the two the call acts as is read from the account, not from the caller, or an RPC could choose whom the deletion is attributed to. :param comment_ref: id of the comment to delete, inside this thread. :rtype: dict
  • get_comment_replies(self, comment_ref)
  • get_comments(self)