summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSimeon Simeonov2013-06-04 20:27:11 +0200
committerSimeon Simeonov2013-06-04 20:27:11 +0200
commit751ab339ba5a38cbcd3a17620ab78e973fd5664f (patch)
treef8f3d3b73f27957c663b256c3a7dc3f3680b084d
parent3fcb4d9fbcc80b7bb2669eb03f838bb15fa9d5c6 (diff)
Beinc structure and design developed
-rw-r--r--beinc_server.json23
-rwxr-xr-xbeinc_server.py167
-rw-r--r--cert.crt21
-rwxr-xr-xkey.pem28
4 files changed, 239 insertions, 0 deletions
diff --git a/beinc_server.json b/beinc_server.json
new file mode 100644
index 0000000..0604d36
--- /dev/null
+++ b/beinc_server.json
@@ -0,0 +1,23 @@
1{
2 "server": {
3 "general": {
4 "ssl_module": "pyopenssl",
5 "ssl_private_key": "key.pem",
6 "ssl_certificate": "cert.crt"
7 },
8
9 "instances": [
10 {
11 "name": "test",
12 "password": "changeme",
13 "osd_system": "none",
14 "queue_size": 4
15 }
16 ]
17 },
18
19 "client": {},
20
21 "config_version": 1
22
23}
diff --git a/beinc_server.py b/beinc_server.py
new file mode 100755
index 0000000..a39dd05
--- /dev/null
+++ b/beinc_server.py
@@ -0,0 +1,167 @@
1#!/usr/bin/env python
2# -*- coding: utf-8 -*-
3
4import argparse
5import getpass
6import json
7import os
8import sys
9
10import cherrypy
11
12
13__author__ = 'Simeon Simeonov'
14__version__ = '1.0-beta'
15__license__ = "GPL3"
16
17
18
19class WebNotifyServer(object):
20
21 def __init__(self, config):
22 """
23 """
24 self.__config = config
25 self.__instances = dict()
26 self.__queues = dict()
27
28 try:
29 for instance in self.__config['server']['instances']:
30 self.__queues[instance['name']] = list()
31 self.__instances[instance['name']] = instance
32
33 except Exception as e:
34 sys.stderr.write('Unable to initialize queues: {0}'.format(e))
35 sys.exit(1)
36
37
38 @cherrypy.expose
39 def index(self):
40 """
41 default dispatcher
42 """
43 return 'index'
44
45
46 @cherrypy.expose
47 def default(self, *args):
48 """
49 default dispatcher
50 """
51 return 'default'
52
53
54 @cherrypy.expose
55 def push(self, *args, **kwargs):
56
57 if not args:
58 raise cherrypy.HTTPError(400)
59
60 print('args: {0}'.format(args))
61 print('kwargs: {0}'.format(kwargs))
62
63 instance = self.__get_instance(args[0])
64
65 if not kwargs.get('password') == instance['password']:
66 raise cherrypy.HTTPError('403 Forbidden',
67 'Wrong instance or password')
68
69 return 'OK'
70
71
72 def __get_instance(self, name):
73 """
74 returns a matching 'instance' dictionary
75
76 cherrypy.HTTPError - "403 Forbidden" is raised if no
77 instance matches 'name'
78 """
79
80 try:
81 for instance in self.__config['server']['instances']:
82 if name == instance['name']:
83 return instance
84
85 except Exception as e:
86 raise cherrypy.HTTPError('403 Forbidden',
87 'Wrong instance or password: {0}'.format(e))
88
89 raise cherrypy.HTTPError("403 Forbidden", "Wrong instance or password")
90
91
92 # mappings = [
93 # (r'^/push/', push),
94 # (r'^.*$', default),
95 # ]
96
97
98def main():
99
100 parser = argparse.ArgumentParser(description='The following options are available')
101
102
103 parser.add_argument('-d',
104 action='store_true',
105 dest='daemonize',
106 default=False,
107 help='daemonize the server process')
108
109 parser.add_argument('-H', '--hostname',
110 metavar='HOSTNAME',
111 type=str,
112 dest='hostname',
113 default='127.0.0.1',
114 help="Server IP / hostname")
115
116 parser.add_argument('-p', '--port',
117 metavar='PORT',
118 type=int,
119 dest='port',
120 default=9998,
121 help="Server port")
122
123 parser.add_argument('-c', '--config-file',
124 metavar='FILE',
125 type=str,
126 default=os.path.expanduser('~/.beinc_server.json'),
127 dest='config_file',
128 help="config file")
129
130 parser.add_argument('-v', '--version',
131 action='version',
132 version='%(prog)s {0}'.format(__version__),
133 help='display program-version and exit')
134
135 args = parser.parse_args()
136
137
138 try:
139 with open(args.config_file, 'r') as fp:
140 config_dict = json.load(fp)
141
142 except Exception as e:
143 sys.stderr.write('Unable to parse {0}: {1}'.format(args.config_file, e))
144
145
146 cherrypy.config.update({
147 'server.socket_host': args.hostname,
148 'server.socket_port': args.port,
149 'server.ssl_module': config_dict['server']['general']['ssl_module'].encode('utf-8'),
150 'server.ssl_certificate': config_dict['server']['general']['ssl_certificate'],
151 'server.ssl_private_key': config_dict['server']['general']['ssl_private_key'],
152 })
153
154 try:
155 cherrypy.quickstart(WebNotifyServer(config_dict))
156
157 except Exception as e:
158 sys.stderr.write("WebServer error: {0}".format(e))
159 sys.exit(1)
160
161
162 sys.exit(0)
163
164
165if __name__ == "__main__":
166 main()
167
diff --git a/cert.crt b/cert.crt
new file mode 100644
index 0000000..a6cd46f
--- /dev/null
+++ b/cert.crt
@@ -0,0 +1,21 @@
1-----BEGIN CERTIFICATE-----
2MIIDZzCCAk+gAwIBAgIJAKp5myihOHJnMA0GCSqGSIb3DQEBBQUAMEoxCzAJBgNV
3BAYTAk5PMRMwEQYDVQQIDApTb21lLVN0YXRlMRAwDgYDVQQKDAdQaWNob3ZlMRQw
4EgYDVQQDDAtwaWNob3ZlLm9yZzAeFw0xMzA1MjUxOTU5MTVaFw0xNDA1MjUxOTU5
5MTVaMEoxCzAJBgNVBAYTAk5PMRMwEQYDVQQIDApTb21lLVN0YXRlMRAwDgYDVQQK
6DAdQaWNob3ZlMRQwEgYDVQQDDAtwaWNob3ZlLm9yZzCCASIwDQYJKoZIhvcNAQEB
7BQADggEPADCCAQoCggEBANVajAPF6iiyOLpk4Wp+3PgXcWHIeDNipbZRoCc6Kkk0
8TPpk/6T3GllamLdIAXEbpuAi+Fq1z00aUbZbZnZVVwp+08beLYwc7eeFxZTpp0kE
9/QOs6BEexR97Dets0KuRwqN849wX51wLHQ5pvyroN+8XM8l7dNB7zmi49POvRaKo
103qx8vKT3lCJV5sLX+lCtH7osgrKkVUlH2PYPQzEqZ8LlYaEgMFpEcgjKFNAV5+8p
116HEVZV2OJmflqFKhsyTu1mpM9wMlK4zhGS6rcjbIC35ZWKuETXPJ5BcAdQB2LuDc
12GhNN6pplGvfFxEt78CCTugL//TsHTLP7ILhOPs9nTS8CAwEAAaNQME4wHQYDVR0O
13BBYEFKLuAZYbfEW1ZQ1VI2y8ofm63PRfMB8GA1UdIwQYMBaAFKLuAZYbfEW1ZQ1V
14I2y8ofm63PRfMAwGA1UdEwQFMAMBAf8wDQYJKoZIhvcNAQEFBQADggEBAF0iuli+
15L7gfxXzkzKLa8U9B0N8VFxdQCUpEe+6Myh89nBrIoFhMewEUR+zQK2jhlR6VJDd7
16cexn4F/rk0hM9VTGK1aKjvonbz9af6Oa5l/0hyp1vmLNLi7k5G397/5r4eZvcugv
17h3FzxNl6ASa/7t4VnmwGp1xLwaMRbAl5KbojH32CpZwPmhDlG2svObe40Vy+6L32
18/8B0C5UpHEbIICXKsOlCqDHCmWBj1C7WzlihJlT+ZQrWsbLvhZ8lrNGR48lPL0DC
19F88yjBB5bnt7MXbmbvRxFHCwLmuNSn84dgBtOTC95BAupr5DNrcr2V82OUEJ7TXt
20xGrl/TwhhdzFRbE=
21-----END CERTIFICATE-----
diff --git a/key.pem b/key.pem
new file mode 100755
index 0000000..84eaab4
--- /dev/null
+++ b/key.pem
@@ -0,0 +1,28 @@
1-----BEGIN PRIVATE KEY-----
2MIIEwAIBADANBgkqhkiG9w0BAQEFAASCBKowggSmAgEAAoIBAQDVWowDxeoosji6
3ZOFqftz4F3FhyHgzYqW2UaAnOipJNEz6ZP+k9xpZWpi3SAFxG6bgIvhatc9NGlG2
4W2Z2VVcKftPG3i2MHO3nhcWU6adJBP0DrOgRHsUfew3rbNCrkcKjfOPcF+dcCx0O
5ab8q6DfvFzPJe3TQe85ouPTzr0WiqN6sfLyk95QiVebC1/pQrR+6LIKypFVJR9j2
6D0MxKmfC5WGhIDBaRHIIyhTQFefvKehxFWVdjiZn5ahSobMk7tZqTPcDJSuM4Rku
7q3I2yAt+WVirhE1zyeQXAHUAdi7g3BoTTeqaZRr3xcRLe/Agk7oC//07B0yz+yC4
8Tj7PZ00vAgMBAAECggEBAJNR2557Wc3SClPCdtg3U1NHtLXFXCJ3Ol+jC0gq5Kn5
9oDHB7bg2HA6Y/RyJbt1wL5FS9FSGd+cQhl25zQ1mrhyEKK2IGsFF9IxKlXzWvfkw
10pZiVGwU/TvQG3zyxvYDKvDBxe1EtfEbVMbITGLqC8KR6S/sS8T1IT+WF2TYuz5GZ
11cCXPZlW54lqQWgzzFOHbqQrerwihFb+/+3qEYMQRKSONf5vZWhQ/SFK2xJQb1Kx+
12VYQGrBDTuyHILu3xIYbqfuzUMSkrqnmXqmSc0Q9w4hq0EVz/V3SXSTseZrBAqPEI
13FhHAtl0Q7cxZNO7qaLZgoDJiKbUFvWWjF3rxNJwyA/ECgYEA96IBmsHL0wtvK62k
14pVKQWp7mSr+qIsT4gfddyMq4Z+r+2G3wlvoAKSBze24POkfkrQ6ihaZyyfIb9U8c
15jEM1b4X5sn/BaGnZusguvkIvIT6jiqjq8nhnXR7sFjM60B4w9PCLprzwV+yvzyBq
16Wc9QAVbcVMHZbcSO284gM3U6pbcCgYEA3JAHwtBQirSTwrIPM39UEvwPX6j7ZP2C
17QJWYxxc6xhYOlN5YzNFznUhyKhpmQYiL+UeNy6E591qTVhnh2hNDX5kbpyR2/iCf
18rKuQiGrGLJ1MzC1IjX6UawVRuPR2ObD5F+v3L7uV4odwk7C6B2jOshlNT4mMWmM8
191XnGf+ciVEkCgYEA7ZMNDQceYERZDMOT8VQrz/UgpdgKBz+H11CWNlxe3Lv0cXnQ
20V1hULSDICkQF8fklZ+5hd+2/tQVFU2zpy5tzOaKEc37j9CORUwRY7AmdI7zvs8jp
21V2SybgGLqKTPqPk+KNBaesZLo18dMI892Rnu/MnzqpEr44avNCwmcpfmgzMCgYEA
22j/phZpWPjgv0zMppS+eZXU83Re3MNY+bIEfHVGdgkYBCgoFmnEU54HkzNTLIf40A
23OniwIjYb3dE9jp4UpcOfXl9XAtO17YwkT5YrIjH5LZR9VmdVDjCL+BSf1UmXh290
24G16InJsqa5aYMYDS3xVWoEIOCpayjSpswrncjw+1hCkCgYEArE8gRlH4u+rptm6Y
25TR2PStesol78CAnx6ZTgiHIzOLxbvBkSfjH2aFsLDjLwjQ86snIQKn2irwaPOH/h
26eSaYt4/iT22mnEMfpp570m8Vz7T9fYazKGcXsXIuzJ0vYbymHBnd4b9Kqjx9T+k6
27+vWfcsVHZY/VtN4W/6r6CnQ60ic=
28-----END PRIVATE KEY-----