An open API service indexing awesome lists of open source software.

https://github.com/shizacat/aionic

Async Python library for the API of Russian DNS registrar Ru-Center (a.k.a. NIC.RU)
https://github.com/shizacat/aionic

aiohttp aiohttp-client python

Last synced: 11 months ago
JSON representation

Async Python library for the API of Russian DNS registrar Ru-Center (a.k.a. NIC.RU)

Awesome Lists containing this project

README

          

NIC.RU API Python library
==========================

The package is the async library for the API of Russian DNS registrator
Ru-Center (a.k.a. NIC.RU). It provides classes for managing DNS services,
zones and records.

This project bases on: https://github.com/andr1an/nic-api

Installation
------------

Using ``pip``::

pip install aionic

Usage
-----

Initialization
~~~~~~~~~~~~~~

To start using the API, you should get a pair of OAuth application login and
password from NIC.RU. Here is the registration page:
https://www.nic.ru/manager/oauth.cgi?step=oauth.app_register

.. code:: python

import asyncio
from nic_api import NICApi

def print_token(token: dict):
print("Token:", token)

api = NICApi(
client_id = "---",
client_secret = "---",
username = "---/NIC-D",
password = "---",
scope = "GET:/dns-master/.+",
token_updater=print_token
)

# First you need to get token
async def main():
await api.get_token()

asyncio.run(main)

Get token
~~~~~~~~~

Call the ``get_token()`` method:

.. code:: python

# First you need to get token
async def main():
await api.get_token()

asyncio.run(main)

Now you are ready to use the API.

A token can be saved anywhere, for example, to a file, using the callback:
``token_updater``. It also could be used for authorization.
Neither password nor username is required as long as the token is valid.

Viewing services and DNS zones
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

On ``nic.ru`` DNS zones are located in "services":

.. code:: python

api.services()

Usually there is one service per account. Let's view available zones in the
service ``MY_SERVICE``:

.. code:: python

async def main():
await api.zones('MY_SERVICE')

asyncio.run(main)

**When starting a modification make sure that there is no any uncommited
changes in the zone, cause they would be applied on commit.**

Getting DNS records
~~~~~~~~~~~~~~~~~~~

One has to specify both service and DNS zone name to view or modify a record:

.. code:: python

async def main():
await api.records('MY_SERIVCE', 'example.com')

asyncio.run(main)

Creating a record
~~~~~~~~~~~~~~~~~

To add a record, create an instance of one of the ``nic_api.models.DNSRecord``
subclasses, i.e. ``ARecord``:

.. code:: python

import aionic.models as nic_models
record_www = nic_models.ARecord(name='www', a='8.8.8.8', ttl=3600)

Add this record to the zone and commit the changes:

.. code:: python

async def main():
await api.add_record(record_www, 'MY_SERVICE', 'example.com')
await api.commit('MY_SERVICE', 'example.com')

asyncio.run(main)

Deleting a record
~~~~~~~~~~~~~~~~~

Every record in the zone has an unique ID, and it's accessible via
``DNSRecord.id`` property. When you got the ID, pass it to the
``delete_record`` method:

.. code:: python

async def main():
await api.delete_record(10, 'MY_SERVICE', 'example.com')
await api.commit('MY_SERVICE', 'example.com')

asyncio.run(main)

Do not forget to always commit the changes!