Security News
Research
Data Theft Repackaged: A Case Study in Malicious Wrapper Packages on npm
The Socket Research Team breaks down a malicious wrapper package that uses obfuscation to harvest credentials and exfiltrate sensitive data.
aioalfacrm - is an asynchronous implementation for the AlfaCRM API
$ pip install aioalfacrm
Example:
import asyncio
from aioalfacrm import AlfaClient
from aioalfacrm.entities import Location
HOSTNAME = 'demo.s20.online'
EMAIL = 'api-email@email.example'
API_KEY = 'user-api-token'
BRANCH_ID = 1
async def main():
alfa_client = AlfaClient(
hostname=HOSTNAME,
email=EMAIL,
api_key=API_KEY,
branch_id=BRANCH_ID,
)
try:
# Check auth (Optionaly)
if not await alfa_client.check_auth():
print('Authentification error')
return
# Get branches
branches = await alfa_client.branch.list(page=0, count=20)
# Edit branch
for branch in branches:
branch.name = f'{branch.name} - Edited'
# Save branch
await alfa_client.branch.save(branch)
# Create location
location = Location(
branch_id=1,
is_active=True,
name='New location',
)
await alfa_client.location.save(location)
finally:
# Close session
await alfa_client.close()
asyncio.set_event_loop_policy(asyncio.WindowsSelectorEventLoopPolicy()) # For Windows
asyncio.run(main())
# Get all entities
for page in alfa_client. < object >.get_paginator():
objects = page.items
To work with custom fields, do the following
from aioalfacrm import entities
from aioalfacrm import fields
from typing import Optional
# Extend existing model
class CustomCustomer(entities.Customer):
custom_field: Optional[int] = fields.Integer()
# For IDE init support
def __init__(
self,
custom_field: Optional[int] = None,
*args,
**kwargs,
):
super(CustomCustomer, self).__init__(custom_field=custom_field, *args, **kwargs)
# Create custom alfa client with new model
from aioalfacrm import AlfaClient
from aioalfacrm import managers
class CustomAlfaClient(AlfaClient):
def __init__(self, *args, **kwargs):
super(CustomAlfaClient, self).__init__(*args, **kwargs)
self.customer = managers.Customer(
api_client=self.api_client,
entity_class=CustomCustomer,
)
# Create custom alfa client
import asyncio
HOSTNAME = 'demo.s20.online'
EMAIL = 'api-email@email.example'
API_KEY = 'user-api-token'
BRANCH_ID = 1
async def main():
alfa_client = CustomAlfaClient(hostname=HOSTNAME, email=EMAIL, api_key=API_KEY, branch_id=BRANCH_ID)
try:
customers = await alfa_client.customer.list()
for customer in customers:
print(customer.custom_field)
finally:
await alfa_client.close()
asyncio.set_event_loop_policy(asyncio.WindowsSelectorEventLoopPolicy()) # For Windows
asyncio.run(main())
FAQs
Is an asynchronous implementation for AlfaCRM API
We found that aioalfacrm demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Security News
Research
The Socket Research Team breaks down a malicious wrapper package that uses obfuscation to harvest credentials and exfiltrate sensitive data.
Research
Security News
Attackers used a malicious npm package typosquatting a popular ESLint plugin to steal sensitive data, execute commands, and exploit developer systems.
Security News
The Ultralytics' PyPI Package was compromised four times in one weekend through GitHub Actions cache poisoning and failure to rotate previously compromised API tokens.