#!/home/kiri/.local/share/virtualenvs/success2pass-rJwRoDt2/bin/python """ This is a simple example of Success2Pass API. You can customize the command to be excute to suit for yourself. Requirements: Python3.x , Django 1.8 , """ import json import subprocess from django.conf import settings from django.http import HttpResponse from django.conf.urls import url setting = { 'DEBUG': True, 'ROOT_URLCONF': __name__ } settings.configure(**setting) CMD_TEMPLATE = "ufw allow from {}" class JSONResponse(HttpResponse): """ An HttpResponse that renders its content into JSON. """ def __init__(self, data, **kwargs): content = json.dumps(data) kwargs['content_type'] = 'application/json' super(JSONResponse, self).__init__(content, **kwargs) def get_client_ip(request): """ A method to get the cient ip address. """ x_forwarded_for = request.META.get('HTTP_X_FORWARDED_FOR') if x_forwarded_for: ip = x_forwarded_for.split(',')[-1].strip() elif request.META.get('HTTP_X_REAL_IP'): ip = request.META.get('HTTP_X_REAL_IP') else: ip = request.META.get('REMOTE_ADDR') # if you want add range /24 to the rule: # s = ip.split(".") # ip = "{}.{}.{}.0/24".format(s[0], s[1], s[2]) return ip def s2ptestview(request): ip = get_client_ip(request) resp = {"status": 200, "info": "Your ip address is " + ip} return JSONResponse(resp) def s2pview(request): ip = get_client_ip(request) cmd = CMD_TEMPLATE.format(ip, ip) subprocess.call(cmd, shell=True) resp = {"status": 200, "info": "Success! Now your ip " + ip + " is added to the rules."} return JSONResponse(resp) # set any path as you like. urlpatterns = [url('^s2ptest$', s2ptestview, name="s2ptestview"), url('^s2p$', s2pview, name="s2pview")] import os from django.core.wsgi import get_wsgi_application os.environ.setdefault("DJANGO_SETTINGS_MODULE", "setting") application = get_wsgi_application() if __name__ == '__main__': import sys from django.core.management import execute_from_command_line execute_from_command_line(sys.argv)