Commit 451ae504 by Owo Sugiana

Kali pertama

0 parents
dist
*egg-info
*.pyc
0.1 2019-01-22
--------------
- Kali pertama.
include *.txt *.rst
recursive-include opensipkd *.py
Hal JSON-RPC
============
Kumpulan konstanta, class, dan fungsi terkait pembuatan JSON-RPC server maupun
client.
File mode changed
from random import choice
def get_random_number(width=12):
return ''.join(choice(digits) for _ in range(width))
def get_jsonrpc(method, params):
return dict(jsonrpc='2.0', method=method, params=params, id=get_random_number(6))
import sys
from datetime import datetime
import hmac
import hashlib
import base64
from .exc import (
JsonRpcInvalidTime,
JsonRpcInvalidLogin,
)
begin_unix_time = datetime(1970, 1, 1)
def get_seconds():
durasi = datetime.utcnow() - begin_unix_time
return int(durasi.total_seconds())
# Fungsi ini digunakan untuk membuat header dan authentikasi pada rpc client
def get_header(userid, password, time_stamp):
msg = '&'.join([str(userid), str(time_stamp)])
msg = msg.encode('utf-8')
if sys.version_info.major == 2:
if isinstance(password, unicode):
password = str(password)
elif isinstance(password, str):
password = password.encode('utf-8')
signature = hmac.new(password, msg=msg, digestmod=hashlib.sha256)
signature = signature.digest()
if sys.version_info.major == 2:
s = base64.encodestring(signature)
else:
s = base64.encodebytes(signature)
if isinstance(s, bytes):
s = str(s)
s = s.replace('\n', '')
return dict(userid=userid, signature=s, key=time_stamp)
lima_menit = 600
# env = request.env
class Auth:
def __init__(self, env):
self.env = env
self.validate_env()
self.validate_time()
def validate_env(self):
if not ('HTTP_USERID' in self.env and
'HTTP_SIGNATURE' in self.env and
'HTTP_KEY' in self.env):
raise JsonRpcInvalidLogin()
def validate_time(self):
self.time_stamp = int(self.env['HTTP_KEY'])
now = get_seconds()
if abs(now - self.time_stamp) > lima_menit:
raise JsonRpcInvalidTime()
def validate_signature(self, api_key):
header = get_header(self.env['HTTP_USERID'], api_key, self.time_stamp)
if header['signature'] != self.env['HTTP_SIGNATURE']:
raise JsonRpcInvalidLogin()
from pyramid_rpc.jsonrpc import JsonRpcError
############
# Database #
############
class JsonRpcDbUrlNotFound(JsonRpcError):
code = -40001
message = 'Database URL tidak ada'
class JsonRpcDbConnection(JsonRpcError):
code = -40002
message = 'Koneksi database gagal'
class JsonRpcDataNotFound(JsonRpcError):
code = -40003
message = 'Data tidak ditemukan'
######################################################
# Authentication (login) & Authorization (hak akses) #
######################################################
class JsonRpcInvalidLogin(JsonRpcError):
code = -41001
message = 'User / password tidak benar'
class JsonRpcInvalidNik(JsonRpcError):
code = -41002
message = 'NIK tidak benar'
class JsonRpcNikFound(JsonRpcError):
code = -41003
message = 'NIK sudah ada'
class JsonRpcMobileFound(JsonRpcError):
code = -41004
message = 'No HP sudah digunakan'
class JsonRpcInvalidMobile(JsonRpcError):
code = -41004
message = 'No HP tidak benar'
class JsonRpcInvalidData(JsonRpcError):
code = -41005
message = 'Data tidak benar'
class JsonRpcdEmailFound(JsonRpcError):
code = -41006
message = 'Email sudah digunakan'
class JsonRpcInvalidEmail(JsonRpcError):
code = -41007
message = 'Email tidak benar'
class JsonRpcMail(JsonRpcError):
code = -41008
message = 'Gagal login mail server'
class JsonRpcUserFound(JsonRpcError):
code = -41009
message = 'User sudah digunakan'
class JsonRpcRegisterFail(JsonRpcError):
code = -41010
message = 'Gagal registrasi user'
class JsonRpcProfileFail(JsonRpcError):
code = -41011
message = 'Gagal update profile'
class JsonRpcGetPassword(JsonRpcError):
code = -41012
message = 'Gagal request password'
class JsonRpcUserNotFound(JsonRpcError):
code = -41013
message = 'User tidak ada'
class JsonRpcInvalidTime(JsonRpcError):
code = -41013
message = 'Periksa Date Time Server'
#############
# Transaksi #
#############
class JsonRpcBankNotFound(JsonRpcError):
code = -51001
message = 'Bank not found'
class JsonRpcBillNotFound(JsonRpcError):
code = -52001
message = 'Bill not found'
class JsonRpcBillAlreadyPaid(JsonRpcError):
code = -52002
message = 'Tagihan sudah lunas'
class JsonRpcBillDifferent(JsonRpcError):
code = -52003
message = 'Bill amount different'
class JsonRpcNtbNotFound(JsonRpcError):
code = -53001
message = 'NTB not found'
class JsonRpcNtbNotValid(JsonRpcError):
code = -53002
message = 'NTB not valid'
class JsonRpcPaymentNotFound(JsonRpcError):
code = -54001
message = 'Payment not found'
class JsonRpcBillerNotFound(JsonRpcError):
code = -55001
message = 'Biller not found'
class JsonRpcBillerNetwork(JsonRpcError):
code = -55002
message = 'Biller network unrecognized'
class JsonRpcProductNotFound(JsonRpcError):
code = -56001
message = 'Product not found'
class JsonRpcInvalidParams(JsonRpcError):
code = -32602
message = 'Invalid method parameters'
import os
from setuptools import setup
here = os.path.abspath(os.path.dirname(__file__))
with open(os.path.join(here, 'README.rst')) as f:
README = f.read()
with open(os.path.join(here, 'CHANGES.txt')) as f:
CHANGES = f.read()
line = CHANGES.splitlines()[0]
version = line.split()[0]
requires = [
'pyramid_rpc',
]
setup(
name='opensipkd-jsonrpc',
version=version,
description='Berbagai hal yang dibutuhkan untuk membuat JSON-RPC',
long_description=README + '\n\n' + CHANGES,
author='Owo Sugiana',
author_email='sugiana@gmail.com',
license='PostgreSQL License',
packages=['opensipkd.jsonrpc'],
install_requires=requires,
zip_safe=False,
)
Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!