added api rework files
This commit is contained in:
		
							parent
							
								
									66da0b87cf
								
							
						
					
					
						commit
						643ddec430
					
				
					 3 changed files with 139 additions and 0 deletions
				
			
		
							
								
								
									
										75
									
								
								onionr/apimanager.py
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										75
									
								
								onionr/apimanager.py
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,75 @@ | |||
| ''' | ||||
|     Onionr - P2P Anonymous Storage Network | ||||
| 
 | ||||
|     Handles api data exchange, interfaced by both public and client http api | ||||
| ''' | ||||
| ''' | ||||
|     This program is free software: you can redistribute it and/or modify | ||||
|     it under the terms of the GNU General Public License as published by | ||||
|     the Free Software Foundation, either version 3 of the License, or | ||||
|     (at your option) any later version. | ||||
| 
 | ||||
|     This program is distributed in the hope that it will be useful, | ||||
|     but WITHOUT ANY WARRANTY; without even the implied warranty of | ||||
|     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the | ||||
|     GNU General Public License for more details. | ||||
| 
 | ||||
|     You should have received a copy of the GNU General Public License | ||||
|     along with this program.  If not, see <https://www.gnu.org/licenses/>. | ||||
| ''' | ||||
| import config, apipublic, apiprivate, core, socket, random, threading, time | ||||
| config.reload() | ||||
| 
 | ||||
| PRIVATE_API_VERSION = 0 | ||||
| PUBLIC_API_VERSION = 1 | ||||
| 
 | ||||
| DEV_MODE = config.get('general.dev_mode') | ||||
| 
 | ||||
| def getOpenPort(): | ||||
|     '''Get a random open port''' | ||||
|     p = socket.socket(socket.AF_INET, socket.SOCK_STREAM) | ||||
|     p.bind(("127.0.0.1",0)) | ||||
|     p.listen(1) | ||||
|     port = s.getsockname()[1] | ||||
|     p.close() | ||||
|     return port | ||||
| 
 | ||||
| def getRandomLocalIP(): | ||||
|     '''Get a random local ip address''' | ||||
|     hostOctets = [str(127), str(random.randint(0x02, 0xFF)), str(random.randint(0x02, 0xFF)), str(random.randint(0x02, 0xFF))] | ||||
|     host = '.'.join(hostOctets) | ||||
|     return host | ||||
| 
 | ||||
| class APIManager: | ||||
|     def __init__(self, coreInst): | ||||
|         assert isinstance(coreInst, core.Core) | ||||
|         self.core = core | ||||
|         self.utils = core._utils | ||||
|         self.crypto = core._crypto | ||||
|          | ||||
|         # if this gets set to true, both the public and private apis will shutdown | ||||
|         self.shutdown = False | ||||
|          | ||||
|         publicIP = '127.0.0.1' | ||||
|         privateIP = '127.0.0.1' | ||||
|         if DEV_MODE: | ||||
|             # set private and local api servers bind IPs to random localhost (127.x.x.x), make sure not the same | ||||
|             privateIP = getRandomLocalIP() | ||||
|             while True: | ||||
|                 publicIP = getRandomLocalIP() | ||||
|                 if publicIP != privateIP: | ||||
|                     break | ||||
|          | ||||
|         # Make official the IPs and Ports | ||||
|         self.publicIP = publicIP | ||||
|         self.privateIP = privateIP | ||||
|         self.publicPort = getOpenPort() | ||||
|         self.privatePort = getOpenPort() | ||||
| 
 | ||||
|         # Run the API servers in new threads | ||||
|         self.publicAPI = apipublic.APIPublic() | ||||
|         self.privateAPI = apiprivate.privateAPI() | ||||
|         threading.Thread(target=self.publicAPI.run).start() | ||||
|         threading.Thread(target=self.privateAPI.run).start() | ||||
|         while not self.shutdown: | ||||
|             time.sleep(1) | ||||
							
								
								
									
										32
									
								
								onionr/apiprivate.py
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										32
									
								
								onionr/apiprivate.py
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,32 @@ | |||
| ''' | ||||
|     Onionr - P2P Anonymous Storage Network | ||||
| 
 | ||||
|     Handle incoming commands from the client. Intended for localhost use | ||||
| ''' | ||||
| ''' | ||||
|     This program is free software: you can redistribute it and/or modify | ||||
|     it under the terms of the GNU General Public License as published by | ||||
|     the Free Software Foundation, either version 3 of the License, or | ||||
|     (at your option) any later version. | ||||
| 
 | ||||
|     This program is distributed in the hope that it will be useful, | ||||
|     but WITHOUT ANY WARRANTY; without even the implied warranty of | ||||
|     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the | ||||
|     GNU General Public License for more details. | ||||
| 
 | ||||
|     You should have received a copy of the GNU General Public License | ||||
|     along with this program.  If not, see <https://www.gnu.org/licenses/>. | ||||
| ''' | ||||
| import flask, apimanager | ||||
| from flask import request, Response, abort, send_from_directory | ||||
| from gevent.pywsgi import WSGIServer | ||||
| 
 | ||||
| class APIPrivate: | ||||
|     def __init__(self, managerInst): | ||||
|         assert isinstance(managerInst, apimanager.APIManager) | ||||
|         self.app = flask.Flask(__name__) # The flask application, which recieves data from the greenlet wsgiserver | ||||
|         self.httpServer = WSGIServer((managerInst.privateIP, managerInst.privatePort), self.app, log=None) | ||||
| 
 | ||||
|     def run(self): | ||||
|         self.httpServer.serve_forever() | ||||
|         return | ||||
							
								
								
									
										32
									
								
								onionr/apipublic.py
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										32
									
								
								onionr/apipublic.py
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,32 @@ | |||
| ''' | ||||
|     Onionr - P2P Anonymous Storage Network | ||||
| 
 | ||||
|     Handle incoming commands from other Onionr nodes, over HTTP | ||||
| ''' | ||||
| ''' | ||||
|     This program is free software: you can redistribute it and/or modify | ||||
|     it under the terms of the GNU General Public License as published by | ||||
|     the Free Software Foundation, either version 3 of the License, or | ||||
|     (at your option) any later version. | ||||
| 
 | ||||
|     This program is distributed in the hope that it will be useful, | ||||
|     but WITHOUT ANY WARRANTY; without even the implied warranty of | ||||
|     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the | ||||
|     GNU General Public License for more details. | ||||
| 
 | ||||
|     You should have received a copy of the GNU General Public License | ||||
|     along with this program.  If not, see <https://www.gnu.org/licenses/>. | ||||
| ''' | ||||
| import flask, apimanager | ||||
| from flask import request, Response, abort, send_from_directory | ||||
| from gevent.pywsgi import WSGIServer | ||||
| 
 | ||||
| class APIPublic: | ||||
|     def __init__(self, managerInst): | ||||
|         assert isinstance(managerInst, apimanager.APIManager) | ||||
|         self.app = flask.Flask(__name__) # The flask application, which recieves data from the greenlet wsgiserver | ||||
|         self.httpServer = WSGIServer((managerInst.publicIP, managerInst.publicPort), self.app, log=None) | ||||
| 
 | ||||
|     def run(self): | ||||
|         self.httpServer.serve_forever() | ||||
|         return | ||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue