translate api, code is taken out of dir scripts

master3.3
Спиридонов Денис 12 years ago
parent 9bf96abf76
commit a605747786

@ -0,0 +1,480 @@
#!/usr/bin/python
#-*- coding: utf-8 -*-
# Copyright 2012 Calculate Ltd. http://www.calculate-linux.org
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
from suds import WebFault
from suds.transport import TransportError
from calculate.api.client.client_class import Client_suds
import traceback as tb
import time, logging
import os
import re, threading
from calculate.api.client.function import *
from calculate.api.client.pid_information import *
from calculate.api.client.cert_func import *
from calculate.api.client.cert_verify import get_CRL
from calculate.api.client.sid_func import *
from calculate.lib.cl_datavars import ClDataVars
from calculate.api.cl_api import DataVarsApi
from calculate.api.client.client_class import HTTPSClientCertTransport
t = time
help_ = '''
useradd, cl-unix-useradd - add unix user
template, cl_template - overlay templates
halt, server_shutdown - shutdown server
run, server_start - start server
---- process methods ----
lsp, list-pid - listing all pids for this session
pi, pid-info - get information about select pid (0 for all)
kill, pid-kill - kill select pid
---- sessions methods ----
lss, list-session - listing all sessions in server
si, session-info - get information about select session (sid)
lsr, list-method - listing all accessible methods
q, quit - exit
h, help - display this help and exit
v, version - output version information and exit'''
def client_login (client):
login = raw_input ("Login: ")
password = raw_input ("password: ")
try:
name_re = re.compile("[^a-zA-Z_]")
if name_re.findall(login):
print _("input error")
return 2
print client.service.cl_login(login = login, password = password)
except (Exception) , e:
sys.stdout.flush()
for i in e.message:
sys.stdout.write(str(i) + ' ')
def client_useradd (client):
user_name = raw_input ("User name: ")
try:
name_re = re.compile("[^a-zA-Z_]")
if name_re.findall(user_name):
print _("input error")
return 2
print client.service.cl_unix_useradd(param = user_name)
except:
print _("create error")
def client_userdel (client):
user_name = raw_input ("User name: ")
try:
name_re = re.compile("[^a-zA-Z_]")
if name_re.findall(user_name):
print _("input error")
return 2
print client.service.cl_unix_userdel(param = user_name)
except:
print _("deleted error")
def client_shut (client):
try:
temp = client.service.server_shutdown()
if ( temp == 1):
print _("Server shutting down...")
except:
print _("Connection error! ")
return 1
def client_signal(client):
Vars = DataVarsApi()
Vars.importApi()
Vars.flIniFile()
try:
client_active = Vars.Get('cl_api_client_active_period')
except:
client_active = 15
while True:
if os.path.exists(client.SID_FILE) :
fi = open(client.SID_FILE, 'r')
temp = fi.read()
fi.close()
sid = int(temp)
else:
sid = 0
try:
reply = client.service.active_client(sid)
except:
print _('no connection to server!')
sys.exit()
time.sleep(float(client_active))
#url = 'http://localhost:8888/TestService/?wsdl'
def test(client, com=None):
if not com:
method_name = 'test'
else:
method_name = com
view = client.service[0][method_name + '_view']()
#print '==>', view
cr = create_obj(client, method_name)
#print 'ddd',cr
#print type (cr)
list_param = dir (cr)
param_list = []
for param in list_param:
if not param.startswith('_'):
param_list.append(param)
for Group in view.groups.GroupField:
print "GroupField name : ", Group.name
for field in Group.fields.Field:
if field.element == 'input':
if field.type == 'str':
cr[field.name] = raw_input(field.label)
if field.type == 'int':
while True:
try:
var = raw_input(field.label)
cr[field.name] = int (var)
break
except (TypeError, ValueError):
print 'Это не целое число'
elif field.element == 'bool':
while 1:
bool_var = raw_input(field.label+' (y/n): ')
if bool_var.lower() in ['y','yes']:
cr[field.name] = True
break
if bool_var.lower() in ['n','no']:
cr[field.name] = False
break
print _('Enter "Yes" or "No"!')
elif field.element == 'check':
choice = field.choice[0]
while 1:
print _('Select one: ')
for i in range(1,len(choice)+1):
print choice[i-1], ' - %d' %i
try:
bool_var = int (raw_input(field.label))
if bool_var > 0:
cr[field.name] = choice[bool_var - 1]
print 'your choice %s' %cr[field.name]
break
except:
pass
#field.choice
#print field.help
sid = get_sid(client.SID_FILE)
s = client.service[0][method_name](sid, cr)
analysis(client, sid, s)
import argparse
def parse():
parser = argparse.ArgumentParser()
parser.add_argument(
'-l', '--lang', type=str, dest='lang',
help=_('language for translate'))
parser.add_argument(
'-p', '--port', type=int, default = '8888', dest='port',
help=_('port number'))
#parser.add_argument(
#'--script', type=str, default = '/Server', dest='script_name',
#help='name script in server')
parser.add_argument(
'--host', type=str, default = 'localhost', dest='host',
help=_('host destination'))
parser.add_argument(
'--gen-cert-by', type=str, dest='by_host',
help=_('post request a signed certificate by server'))
parser.add_argument(
'--get-cert-from', type=str, dest='from_host',
help=_('get signed certificate from server'))
parser.add_argument(
'--cert-path', type=str,
default = '~/.calculate/client_cert/',
nargs ='?', dest='path_to_cert',
help=_('path to cert and key file'))
return parser.parse_args()
def https_server(client, signaling):
global url
client_post_auth(client)
signaling.start()
client_list_methods(client)
get_entire_frame(client)
#create_obj(client, "install_system")
while True:
try:
command = raw_input ('\n'+_("Command: "))
except KeyboardInterrupt, e:
print
sys.exit()
if (command == 'halt' or command == 'server_shutdown'):
client_shut(client)
#elif (command == 'say_hello' or command == 'say'):
#client_say_hello(client)
#elif (command == 'say_hello2' or command == 'say2'):
#client_say_hello2(client)
elif (command == 'server_start' or command == 'run'):
if os.path.exists(client.CERT_KEY) and\
os.path.exists(client.CERT_FILE) :
client = Client_suds(url,\
transport = HTTPSClientCertTransport(client.CERT_KEY,\
client.CERT_FILE))
#If the certificate file misses
else:
CERT_FILE = None
CERT_KEY = None
client = Client_suds(url,\
transport = HTTPSClientCertTransport(CERT_KEY, CERT_FILE))
elif (command == 'login' or command == 'cl-login'):
client_login(client)
elif (command == 'useradd' or command == 'cl-unix-useradd'):
client_useradd(client)
elif (command == 'sid-del' or command == 'del-sid'):
client_del_sid(client)
elif (command == 'lsp' or command == 'list-pid'):
client_list_pid(client)
elif (command == 'ins' or command == 'install'):
client_install(client)
elif (command == 'lsr' or command == 'list-method'\
or command == 'list-right'):
client_list_methods(client)
elif (command == 'lss' or command == 'list-session'\
or command == 'sls'):
client_list_sessions(client)
elif (command == 'pi' or command == 'pid-info'):
client_pid_info(client)
elif (command == 'si' or command == 'session-info'):
client_session_info(client)
elif (command == 'kill' or command == 'pid-kill'):
client_pid_kill(client)
elif (command == 'userdel' or command == 'cl-unix-userdel'):
client_userdel(client)
elif (command == 'vcr' or command == 'view-cert-right'):
client_view_cert_right(client)
elif command.split(' ',1)[0] in ['t', 'template', 'cl-template']:
#client_template(client, command)
test(client, 'cl_template')
elif command.lower() in ['test']:
test(client)
elif (command == 'help' or command == 'h'):
print help_
elif command in ['q', 'quit', 'exit']:
print _("Closing\n")
signaling._Thread__stop()
time.sleep(0.3)
num = client_list_pid(client)
if num:
print _('at closing session, '
'data %d processes will be deleted!' %num)
c = raw_input (_("Close your session y/[n]: "))
if c in ['y', 'yes', 'Y', 'YES']:
client_del_sid(client)
#signaling.killed = True
# client_shut(client)
return 0
else:
print _("Input Error")
#t.sleep(1)
#def http_server(client):
#pass
def translate(lang = None):
import locale
import gettext
if lang:
try:
language = gettext.translation ('calculate_api', languages = [lang])
language.install()
return 0
except:
print _("lang %s not supported!") %str(lang)
try:
current_locale, encoding = locale.getdefaultlocale()
language = gettext.translation ('calculate_api', \
languages = [current_locale] )
language.install()
print "set translate", current_locale
return 0
except:
language = gettext.translation ('calculate_api', languages = ['en'] )
language.install()
return 0
def main():
clear()
#password = getpass(prompt="Password: ")
logging.basicConfig(level=logging.FATAL)
logging.getLogger('suds.client').setLevel(logging.FATAL)
logging.getLogger('suds.transport').setLevel(logging.FATAL)
logging.getLogger('suds.transport.http').setLevel(logging.FATAL)
#fmt = '%(asctime)s [%(levelname)s] %(funcName)s() @%(filename)s:%(lineno)d\n%(message)s\n'
#logging.basicConfig(level=logging.INFO, format=fmt)
logging.getLogger('suds.umx.typed').setLevel(logging.ERROR)
clVars = ClDataVars()
clVars.flIniFile()
homePath = clVars.Get('ur_home_path')
print _('path to cert and key file')
args = parse()
# translate
if args.lang:
translate(args.lang)
port = args.port
host = args.host
path_to_cert = args.path_to_cert
path_to_cert = path_to_cert.replace("~",homePath)
getCRL = threading.Thread(target=get_CRL, args = (path_to_cert, ))
getCRL.start()
if args.by_host:
client_post_request (path_to_cert, args)
return 0
if args.from_host:
client_get_cert (path_to_cert, args)
return 0
url = "https://%s:%d/?wsdl" %(host, port)
print "url = %s" %url
#try:
client = Client_suds(url, \
transport = HTTPSClientCertTransport(None,None, path_to_cert))
server_host_name = client.service.get_server_host_name()
del (client)
#except Exception, e:
#print 'get host name error', e
##print _("Connection Error. Failure verification server.")
#sys.exit()
try:
import glob
all_cert_list = glob.glob(path_to_cert + '*.crt')
fit_cert_list = []
for client_cert_path in all_cert_list:
client_cert = client_cert_path.replace(path_to_cert, '')
client_cert_name = client_cert.replace('.crt', '')
if server_host_name.endswith(client_cert_name):
fit_cert_list.append(client_cert_name)
fit_cert_list.sort(key = len)
Connect_Error = 1
for i in range (0, len(fit_cert_list)):
#print 'fit_cert_list = ',fit_cert_list
cert_name = fit_cert_list.pop()
CERT_FILE = path_to_cert + cert_name + '.crt'
CERT_KEY = path_to_cert + cert_name + '.key'
print "cert_name = ",cert_name
try:
client = Client_suds(url,\
transport = HTTPSClientCertTransport(CERT_KEY, CERT_FILE,\
path_to_cert))
client.set_parameters (path_to_cert, CERT_FILE, CERT_KEY)
client_post_cert(client)
Connect_Error = 0
except VerifyError, e:
print e.value
Connect_Error = 1
except Exception, e:
print e
Connect_Error = 1
#sys.exit()
if Connect_Error == 0:
break
#If the certificate file misses
if Connect_Error:
CERT_FILE = None
CERT_KEY = None
client = Client_suds(url,\
transport = HTTPSClientCertTransport(CERT_KEY, CERT_FILE,\
path_to_cert))
client.set_parameters (path_to_cert, CERT_FILE, CERT_KEY)
Vars = DataVarsApi()
Vars.importApi()
Vars.flIniFile()
try:
client.frame_period = Vars.Get('cl_api_get_frame_period')
except:
client.frame_period = 2
signaling = threading.Thread(target=client_signal, args = (client, ))
signaling.setDaemon(True)
https_server(client, signaling)
#----------------------------------------------------
except WebFault, f:
print _("Exception: %s") %f
print f.fault
except TransportError, te:
print _("Exception: %s") %te
except Exception, e:
print _("Exception: %s") %e
tb.print_exc()

@ -195,7 +195,6 @@ class switch(object):
else:
return False
#################API FUNCTION###############################
def show_view(view):
print "+====== show view! ======+"

@ -43,7 +43,7 @@ def client_del_sid(client):
if s[0][0] == "1":
print _("Failed to obtain certificate data!")
return -2
if s[0][0] == _("Permission denied"):
if s[0][0] == "Permission denied":
print _("Permission denied %s") % s[1][1]
return -3
@ -66,7 +66,7 @@ def sid_inf(client, sid):
if s[0][0] == "-2":
print _("Failed to obtain certificate data!")
return -2
if s[0][0] == _("Permission denied"):
if s[0][0] == "Permission denied":
print _("Permission denied %s") % s[0][1]
return -3

@ -55,18 +55,22 @@ def check_server_certificate(cert, key, cert_path, args, port):
name.ST = 'Spb'# (State Name);
name.C = 'En' # (Country);
else:
print _('Do not use space characters and tabs')
host_name = socket.getfqdn()
name.CN = raw_input (_('Host Name [%s] : ') %host_name)
if name.CN in ['', None]:
name.CN = host_name
name.OU = raw_input (_('Organization Unit: '))
name.OU.replace(' ', '_').replace('\t', '_')
name.O = raw_input (_('Organization Name: '))
name.O.replace(' ', '_').replace('\t', '_')
network = _('Full network address (host:port)')
name.L = raw_input (network + ' [%s:%d]: ' \
%(host_name, port))
if name.L in ['', None]:
name.L = host_name + ':' + str(port)
name.ST = raw_input (_('State Name: '))
name.ST.replace(' ', '_').replace('\t', '_')
name.C = raw_input (_('Country (only TWO letters!): '))
cmd = ("openssl req -new -newkey rsa:2048 -nodes -keyout %s -x509 "

@ -0,0 +1,288 @@
#!/usr/bin/python
#-*- coding: utf-8 -*-
# Copyright 2012 Calculate Ltd. http://www.calculate-linux.org
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
import sys, os
import socket, ssl
from cherrypy.wsgiserver import CherryPyWSGIServer, WSGIPathInfoDispatcher
from cherrypy.wsgiserver.ssl_pyopenssl import pyOpenSSLAdapter
from OpenSSL.SSL import Error as SSLError
from OpenSSL import SSL
import OpenSSL
import importlib
from signal import SIGTERM
import threading
from calculate.lib.cl_datavars import ClDataVars
from calculate.api.cl_api import DataVarsApi
from calculate.api.server.clean import clean
import calculate.api.server.cert_cmd as cert_cmd
from calculate.api.server.func import initialization
from calculate.api.server.server_class import ClApplication
class OpenSSLAdapter (pyOpenSSLAdapter):
#def check_cert(self, cert):
#if cert == None:
#return -1
#cert_id = 0
#from func import find_cert_id
#find_cert_id(cert, self.data_path, self.certbase)
## open database with certificates
#if not os.path.exists(self.certbase):
#fc = open(self.certbase,"w")
#fc.close()
#fc = open(self.certbase,"r")
#while 1:
#try:
## read all on one record
#cert_dict = pickle.load(fc)
#except:
#break
## if input and cert from database equal
#if cert == cert_dict["cert"]:
## get certificate id
#cert_id = cert_dict["Id"]
#fc.close()
#return cert_id
def verify_func(self, connection, x509, errnum, errdepth, ok):
# get client certificate
curThread = threading.currentThread()
#print '#######################',errdepth,'####################################'
#if not OpenSSL.crypto.dump_certificate \
#(OpenSSL.crypto.FILETYPE_PEM, x509) in self.ca_certs:
#print '!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!'
#return 0
if errdepth == 0:
curThread.client_cert = OpenSSL.crypto.dump_certificate \
(OpenSSL.crypto.FILETYPE_PEM, x509)
cert = OpenSSL.crypto.load_certificate(OpenSSL.SSL.FILETYPE_PEM,
curThread.client_cert)
subject = cert.get_subject()
if ok:
try:
country = len (subject.get_components()) - 1
language = 1
curThread.lang = subject.get_components()[country][language]
except:
curThread.lang = "En"
return ok
def get_context(self):
"""Return an SSL.Context from self attributes."""
# See http://aspn.activestate.com/ASPN/Cookbook/Python/Recipe/442473
c = SSL.Context(SSL.SSLv23_METHOD)
c.use_privatekey_file(self.private_key)
c.set_verify(SSL.VERIFY_PEER, self.verify_func)
#self.ca_certs = open('/etc/calculate/ca/ca_root.crt','r').read()
if self.certificate_chain:
c.load_verify_locations(self.certificate_chain)
c.use_certificate_file(self.certificate)
return c
def main(*args, **keywords):
# For cleaning of sessions at server reboot
args = cert_cmd.parse()
# translate
if args.lang:
translate(args.lang)
debug = args.debug
import logging
import logging.handlers
if not os.path.exists('/var/log/calculate'):
os.makedirs('/var/log/calculate')
LOG_FILENAME = '/var/log/calculate/logging_cl_api_server.out'
file_logger = logging.getLogger('MyLogger')
file_logger.setLevel(logging.DEBUG)
# Add the log message handler to the logger
handler = logging.handlers.RotatingFileHandler(
LOG_FILENAME, maxBytes=10000000, backupCount=3)
file_logger.addHandler(handler)
# debug
if debug:
logging.basicConfig(level=logging.DEBUG)
logger = logging.getLogger('soaplib.wsgi')
logger.setLevel(logging.DEBUG)
port = args.port
ob = DataVarsApi()
ob.importApi()
# set var env
ob.flIniFile()
cl_wsdl = ob.Get('cl_wsdl')
data_path = ob.Get('cl_api_data')
certbase = ob.Get('cl_api_database')
serv_certbase = ob.Get('cl_api_serv_database')
rights = ob.Get('cl_api_rights')
group_rights = ob.Get('cl_api_group_rights')
sids = ob.Get('cl_api_sids_path')
pids = ob.Get('cl_api_pids_path')
sids_pids = ob.Get('cl_api_sids_pids')
sids_file = ob.Get('cl_api_sids_file')
pids_file = ob.Get('cl_api_pids_file')
max_sid = ob.Get('cl_api_max_sid')
max_pid = ob.Get('cl_api_max_pid')
cert_path = ob.Get('cl_api_cert_path')
cert = ob.Get('cl_api_cert')
key = ob.Get('cl_api_key')
# delete all sid and pid informations file
clean(sids_file, pids_file, sids_pids, sids, pids)
cert_cmd.create_path(data_path, certbase)
#####################
''' view information about client certificates '''
if args.revoke_cert_id:
cert_cmd.revoke_signed_cert(args.revoke_cert_id, data_path, cert_path)
return 0
if args.host or args.gen_root_cert or args.root_host or args.use_root_cert:
cert_cmd.check_server_certificate(cert, key, cert_path, args, port)
return 0
if args.id_client_req:
cert_cmd.sing_req_by_server(args, cert_path, data_path)
return 0
if args.Id:
cert_cmd.view_cert(args, certbase, data_path, rights, group_rights)
return 0
if args.cert_id:
cert_cmd.view_signed_cert(args, serv_certbase, data_path)
return 0
if args.req_id:
cert_cmd.view_client_request(args, certbase, data_path)
return 0
# Sign request by root certificate
if args.id_server_req:
cert_cmd.sing_req_by_root(args, cert_path, data_path)
return 0
if args.id_del_req:
cert_cmd.del_request(args, serv_certbase, data_path)
return 0
#####################
# importing other modules
other_mod = initialization(cl_wsdl)
#try:
pack = "calculate.api.server"
func_metaclass = importlib.import_module('%s.func_metaclass' %pack)
other_mod.append(func_metaclass.Func_MetaClass)
from calculate.api.server.cl_vers_api import VERS
other_mod.append(VERS)
from calculate.api.server.baseClass import Basic
other_mod.append(Basic)
other_mod.append(object)
# make server metaclass
CombinedServerClass = type ("CombinedServerClass", tuple(other_mod), {})
App = ClApplication([CombinedServerClass],'tns', log = file_logger)
tc = App.get_service(CombinedServerClass)
# set all path
tc.set_paths (data_path, certbase, serv_certbase, rights, group_rights, \
sids, pids, sids_pids, sids_file, pids_file, max_sid, \
max_pid, cert_path, cert, key)
max_num = 99999999
dispatcher = WSGIPathInfoDispatcher( { '' : App } )
server = CherryPyWSGIServer(('0.0.0.0', port), dispatcher,\
numthreads = 10, max = max_num, request_queue_size = max_num)
print _("listening to https://0.0.0.0:%d") % (port)
print _("wsdl is at: https://0.0.0.0:%d/?wsdl") %(port)
ca_cert = "/etc/calculate/ca/ca_root.crt"
if not os.path.exists (ca_cert):
ca_cert = None
#sslAdapter = OpenSSLAdapter(cert, key, cert)#"/etc/calculate/ca/ca_root.crt")
sslAdapter = OpenSSLAdapter(cert, key, ca_cert)
sslAdapter.certbase = certbase
#sslAdapter.App = App
#sslAdapter.ClApplication = ClApplication
server.ssl_adapter = sslAdapter
server.certbase = certbase
server.serv_certbase = serv_certbase
server.rights = rights
server.group_rights = group_rights
server.sids = sids
server.pids = pids
server.data_path = data_path
server.cert_path = cert_path
server.ssl_certificate = cert
server.ssl_private_key = key
try:
print _("Server start")
server.start()
except KeyboardInterrupt, SIGTERM:
print _("\nServer stopping")
server.stop()
sys.exit(0)
except socket.error, e:
print e
except SSLError, e:
print '\n',_('Server certificate not found')#, e
print _('use cl-api-server with key --gen-cert-by HOST '
'(--get-cert-from HOST) '
'or --use-root-as-server)')
def translate(lang = None):
import locale
import gettext
if lang:
try:
language = gettext.translation ('calculate_api', languages = [lang])
language.install()
return 0
except:
print "lang %s not supported!" %str(lang)
try:
current_locale, encoding = locale.getdefaultlocale()
language = gettext.translation ('calculate_api', \
languages = [current_locale] )
language.install()
return 0
except:
language = gettext.translation ('calculate_api', languages = ['en'] )
language.install()
return 0
#print _("set locale"), current_locale

@ -46,6 +46,7 @@ def makeRequest(pubkey, pkey, serv_host, port):
name.ST = 'Spb'# (State Name);
name.C = 'En' # (Country);
else:
print _('Do not use space characters and tabs')
host_name = socket.getfqdn()
#if serv_host == host_name:
#print _("\nWant to create self-signed certificate?\n"
@ -65,14 +66,16 @@ def makeRequest(pubkey, pkey, serv_host, port):
if name.CN in ['', None]:
name.CN = result_host_name
name.OU = raw_input (_('Organization Unit: '))
name.OU.replace(' ', '_').replace('\t', '_')
name.O = raw_input (_('Organization Name: '))
name.O.replace(' ', '_').replace('\t', '_')
network = _('Full network address (host:port)')
name.L = raw_input (network + ' [%s:%d]: '\
%(host_name, port))
if name.L in ['', None]:
name.L = host_name + ':' + str(port)
name.ST = raw_input (_('State Name: '))
name.ST.replace(' ', '_').replace('\t', '_')
name.C = raw_input (_('Country (only TWO letters!): '))
req.set_subject_name(name)

Binary file not shown.

@ -2,8 +2,8 @@ msgid ""
msgstr ""
"Project-Id-Version: calculate-api\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2012-03-07 13:29+0300\n"
"PO-Revision-Date: 2012-03-07 13:29+0300\n"
"POT-Creation-Date: 2012-03-07 16:14+0300\n"
"PO-Revision-Date: 2012-03-07 16:16+0300\n"
"Last-Translator: Denis <ds@mail.ru>\n"
"Language-Team: \n"
"Language: \n"
@ -20,8 +20,6 @@ msgstr "ID процесса не найден"
#: /var/calculate/mydir/git/calculate-api/api/client/pid_information.py:30
#: /var/calculate/mydir/git/calculate-api/api/client/template.py:31
#: /var/calculate/mydir/git/calculate-api/api/client/sid_func.py:46
#: /var/calculate/mydir/git/calculate-api/api/client/sid_func.py:69
#: /var/calculate/mydir/git/calculate-api/api/client/cert_func.py:316
msgid "Permission denied"
msgstr "Доступ запрещён"
@ -193,21 +191,117 @@ msgstr "Страна: "
msgid "Clear Cache error! "
msgstr "Ошибка очистки кэша! "
#: /var/calculate/mydir/git/calculate-api/api/client/function.py:284
#: /var/calculate/mydir/git/calculate-api/api/client/function.py:283
msgid "Error"
msgstr "Ошибка"
#: /var/calculate/mydir/git/calculate-api/api/client/function.py:396
#: /var/calculate/mydir/git/calculate-api/api/client/function.py:403
#: /var/calculate/mydir/git/calculate-api/api/client/function.py:395
#: /var/calculate/mydir/git/calculate-api/api/client/function.py:402
#, python-format
msgid "Percent = %s"
msgstr "Процент = %s"
#: /var/calculate/mydir/git/calculate-api/api/client/function.py:401
#: /var/calculate/mydir/git/calculate-api/api/client/function.py:400
#, python-format
msgid "Error task by %d"
msgstr "Ошибка задачи на %d"
#: /var/calculate/mydir/git/calculate-api/api/client/cl_client.py:76
#: /var/calculate/mydir/git/calculate-api/api/client/cl_client.py:89
#: /var/calculate/mydir/git/calculate-api/api/client/cl_client.py:100
msgid "input error"
msgstr "ошибка ввода"
#: /var/calculate/mydir/git/calculate-api/api/client/cl_client.py:93
msgid "create error"
msgstr "ошибка создания"
#: /var/calculate/mydir/git/calculate-api/api/client/cl_client.py:104
msgid "deleted error"
msgstr "ошибка удаления"
#: /var/calculate/mydir/git/calculate-api/api/client/cl_client.py:110
msgid "Server shutting down..."
msgstr "Сервер останавливается..."
#: /var/calculate/mydir/git/calculate-api/api/client/cl_client.py:112
msgid "Connection error! "
msgstr "Ошибка соединения!"
#: /var/calculate/mydir/git/calculate-api/api/client/cl_client.py:134
msgid "no connection to server!"
msgstr "нет соединения с сервером"
#: /var/calculate/mydir/git/calculate-api/api/client/cl_client.py:172
msgid "Это не целое число"
msgstr ""
#: /var/calculate/mydir/git/calculate-api/api/client/cl_client.py:182
msgid "Enter \"Yes\" or \"No\"!"
msgstr "Введите \"Yes\" или \"No\"!"
#: /var/calculate/mydir/git/calculate-api/api/client/cl_client.py:187
msgid "Select one: "
msgstr "Выберите один из: "
#: /var/calculate/mydir/git/calculate-api/api/client/cl_client.py:212
msgid "language for translate"
msgstr "язык для перевода"
#: /var/calculate/mydir/git/calculate-api/api/client/cl_client.py:215
msgid "port number"
msgstr "номер порта"
#: /var/calculate/mydir/git/calculate-api/api/client/cl_client.py:221
msgid "host destination"
msgstr "хост сервера"
#: /var/calculate/mydir/git/calculate-api/api/client/cl_client.py:224
msgid "post request a signed certificate by server"
msgstr "отправить запрос на подписание сертификата серверу (хост сервера)"
#: /var/calculate/mydir/git/calculate-api/api/client/cl_client.py:227
msgid "get signed certificate from server"
msgstr "получить подписанный сертификат с сервера (хост сервера)"
#: /var/calculate/mydir/git/calculate-api/api/client/cl_client.py:232
#: /var/calculate/mydir/git/calculate-api/api/client/cl_client.py:384
msgid "path to cert and key file"
msgstr "путь к сертификату и секретному ключу"
#: /var/calculate/mydir/git/calculate-api/api/client/cl_client.py:245
msgid "Command: "
msgstr "Комманда: "
#: /var/calculate/mydir/git/calculate-api/api/client/cl_client.py:320
msgid "Closing\n"
msgstr "Закрытие\n"
#: /var/calculate/mydir/git/calculate-api/api/client/cl_client.py:325
#, python-format
msgid "at closing session, data %d processes will be deleted!"
msgstr "при закрытии сессии, данные %d процесса(ов) будут удалены!"
#: /var/calculate/mydir/git/calculate-api/api/client/cl_client.py:327
msgid "Close your session y/[n]: "
msgstr "Закрыть Вашу сессию? y/[n]: "
#: /var/calculate/mydir/git/calculate-api/api/client/cl_client.py:334
msgid "Input Error"
msgstr "Ошибка ввода"
#: /var/calculate/mydir/git/calculate-api/api/client/cl_client.py:350
#, python-format
msgid "lang %s not supported!"
msgstr "язык %s не поддерживается!"
#: /var/calculate/mydir/git/calculate-api/api/client/cl_client.py:474
#: /var/calculate/mydir/git/calculate-api/api/client/cl_client.py:477
#: /var/calculate/mydir/git/calculate-api/api/client/cl_client.py:479
#, python-format
msgid "Exception: %s"
msgstr "Исключение: %s"
#: /var/calculate/mydir/git/calculate-api/api/client/sid_func.py:30
msgid " New Session"
msgstr "Новая сессия"
@ -621,17 +715,17 @@ msgid "Enter certificate data by hand? [y]/n: "
msgstr "Ввести данные сертификата вручную? [y]/n: "
#: /var/calculate/mydir/git/calculate-api/api/server/create_cert.py:67
#: /var/calculate/mydir/git/calculate-api/api/server/cert_cmd.py:62
#: /var/calculate/mydir/git/calculate-api/api/server/cert_cmd.py:63
msgid "Organization Unit: "
msgstr "Название отдела: "
#: /var/calculate/mydir/git/calculate-api/api/server/create_cert.py:70
#: /var/calculate/mydir/git/calculate-api/api/server/cert_cmd.py:64
#: /var/calculate/mydir/git/calculate-api/api/server/cert_cmd.py:65
msgid "Full network address (host:port)"
msgstr "Полный сетевой адрес (хост:порт)"
#: /var/calculate/mydir/git/calculate-api/api/server/create_cert.py:76
#: /var/calculate/mydir/git/calculate-api/api/server/cert_cmd.py:70
#: /var/calculate/mydir/git/calculate-api/api/server/cert_cmd.py:71
msgid "Country (only TWO letters!): "
msgstr "Страна (только 2 символа!): "
@ -736,50 +830,54 @@ msgstr "Анти-бот тест"
msgid "Gratulations!"
msgstr "Поздравляю!"
#: /var/calculate/mydir/git/calculate-api/api/server/cert_cmd.py:90
#: /var/calculate/mydir/git/calculate-api/api/server/cert_cmd.py:58
msgid "Do not use space characters and tabs"
msgstr "Не используйте символы пробела и табуляции"
#: /var/calculate/mydir/git/calculate-api/api/server/cert_cmd.py:91
#, python-format
msgid "error write (read) file from directory %s"
msgstr "ошибка записи (чтения) файла в директории %s"
#: /var/calculate/mydir/git/calculate-api/api/server/cert_cmd.py:92
#: /var/calculate/mydir/git/calculate-api/api/server/cert_cmd.py:116
#: /var/calculate/mydir/git/calculate-api/api/server/cert_cmd.py:93
#: /var/calculate/mydir/git/calculate-api/api/server/cert_cmd.py:117
msgid "OK"
msgstr "OK"
#: /var/calculate/mydir/git/calculate-api/api/server/cert_cmd.py:97
#: /var/calculate/mydir/git/calculate-api/api/server/cert_cmd.py:98
msgid "root certificate not found (use cl-api-server with key --gen-root-cert)"
msgstr "корневой сертификат не найден (используйте cl-api-server с ключом --gen-root-cert)"
#: /var/calculate/mydir/git/calculate-api/api/server/cert_cmd.py:141
#: /var/calculate/mydir/git/calculate-api/api/server/cert_cmd.py:142
msgid "Create new secret key and request?"
msgstr "Создать новый секретный ключ и запрос?"
#: /var/calculate/mydir/git/calculate-api/api/server/cert_cmd.py:232
#: /var/calculate/mydir/git/calculate-api/api/server/cert_cmd.py:249
#: /var/calculate/mydir/git/calculate-api/api/server/cert_cmd.py:233
#: /var/calculate/mydir/git/calculate-api/api/server/cert_cmd.py:250
#, python-format
msgid "cannot create directory %s"
msgstr "не удаётся создать директорию %s"
#: /var/calculate/mydir/git/calculate-api/api/server/cert_cmd.py:316
#: /var/calculate/mydir/git/calculate-api/api/server/cert_cmd.py:317
msgid "delete file certificate error!"
msgstr "ошибка удаления сертификата!"
#: /var/calculate/mydir/git/calculate-api/api/server/cert_cmd.py:401
#: /var/calculate/mydir/git/calculate-api/api/server/cert_cmd.py:402
msgid "to change rights certificate number must be integer"
msgstr "для изменения прав сертификата используйте целочисленное значение"
#: /var/calculate/mydir/git/calculate-api/api/server/cert_cmd.py:419
#: /var/calculate/mydir/git/calculate-api/api/server/cert_cmd.py:427
#: /var/calculate/mydir/git/calculate-api/api/server/cert_cmd.py:420
#: /var/calculate/mydir/git/calculate-api/api/server/cert_cmd.py:428
#, python-format
msgid "file %s not found!"
msgstr "файл %s не найден!"
#: /var/calculate/mydir/git/calculate-api/api/server/cert_cmd.py:437
#: /var/calculate/mydir/git/calculate-api/api/server/cert_cmd.py:653
#: /var/calculate/mydir/git/calculate-api/api/server/cert_cmd.py:438
#: /var/calculate/mydir/git/calculate-api/api/server/cert_cmd.py:654
msgid "Fingerprint = "
msgstr "Отпечаток = "
#: /var/calculate/mydir/git/calculate-api/api/server/cert_cmd.py:448
#: /var/calculate/mydir/git/calculate-api/api/server/cert_cmd.py:449
msgid ""
"\n"
"Rights: "
@ -787,70 +885,70 @@ msgstr ""
"\n"
"Права: "
#: /var/calculate/mydir/git/calculate-api/api/server/cert_cmd.py:499
#: /var/calculate/mydir/git/calculate-api/api/server/cert_cmd.py:500
#, python-format
msgid "Certificate id = %s"
msgstr "Номер сертификата = %s"
#: /var/calculate/mydir/git/calculate-api/api/server/cert_cmd.py:507
#: /var/calculate/mydir/git/calculate-api/api/server/cert_cmd.py:508
#, python-format
msgid "Total %d certificates."
msgstr "Всего %d сертификатов."
#: /var/calculate/mydir/git/calculate-api/api/server/cert_cmd.py:511
#: /var/calculate/mydir/git/calculate-api/api/server/cert_cmd.py:512
msgid "Are you sure? Delete all client certificates?"
msgstr "Вы уверенны? Удалить все клиентские сертификаты?"
#: /var/calculate/mydir/git/calculate-api/api/server/cert_cmd.py:520
#: /var/calculate/mydir/git/calculate-api/api/server/cert_cmd.py:521
msgid "certificate number not int and not 'all'"
msgstr "номер сертификата не целочисленный и не 'all'"
#: /var/calculate/mydir/git/calculate-api/api/server/cert_cmd.py:526
#: /var/calculate/mydir/git/calculate-api/api/server/cert_cmd.py:527
msgid "Certificate not found"
msgstr "Сертификат не найден"
#: /var/calculate/mydir/git/calculate-api/api/server/cert_cmd.py:538
#: /var/calculate/mydir/git/calculate-api/api/server/cert_cmd.py:539
msgid "Deleted"
msgstr "Удалено"
#: /var/calculate/mydir/git/calculate-api/api/server/cert_cmd.py:550
#: /var/calculate/mydir/git/calculate-api/api/server/cert_cmd.py:601
#: /var/calculate/mydir/git/calculate-api/api/server/cert_cmd.py:551
#: /var/calculate/mydir/git/calculate-api/api/server/cert_cmd.py:602
msgid "Certificate number (id) must be int"
msgstr "Номер сертификата должен быть целочисленным"
#: /var/calculate/mydir/git/calculate-api/api/server/cert_cmd.py:555
#: /var/calculate/mydir/git/calculate-api/api/server/cert_cmd.py:606
#: /var/calculate/mydir/git/calculate-api/api/server/cert_cmd.py:556
#: /var/calculate/mydir/git/calculate-api/api/server/cert_cmd.py:607
#, python-format
msgid "Signing Request %s not found"
msgstr "Запрос на подпись %s не найден"
#: /var/calculate/mydir/git/calculate-api/api/server/cert_cmd.py:559
#: /var/calculate/mydir/git/calculate-api/api/server/cert_cmd.py:610
#: /var/calculate/mydir/git/calculate-api/api/server/cert_cmd.py:560
#: /var/calculate/mydir/git/calculate-api/api/server/cert_cmd.py:611
#, python-format
msgid "certificate %s already exists"
msgstr "Сертификат %s успешно создан"
#: /var/calculate/mydir/git/calculate-api/api/server/cert_cmd.py:562
#: /var/calculate/mydir/git/calculate-api/api/server/cert_cmd.py:563
msgid "Enter Group new certificate: "
msgstr "Введите группу нового сертификата: "
#: /var/calculate/mydir/git/calculate-api/api/server/cert_cmd.py:584
#: /var/calculate/mydir/git/calculate-api/api/server/cert_cmd.py:637
#: /var/calculate/mydir/git/calculate-api/api/server/cert_cmd.py:585
#: /var/calculate/mydir/git/calculate-api/api/server/cert_cmd.py:638
#, python-format
msgid "certificate %s is signed"
msgstr "Сертификат %s подписан"
#: /var/calculate/mydir/git/calculate-api/api/server/cert_cmd.py:593
#: /var/calculate/mydir/git/calculate-api/api/server/cert_cmd.py:594
msgid "Root certificate or private key not found"
msgstr "Корневой сертификат или секретный ключ не найден"
#: /var/calculate/mydir/git/calculate-api/api/server/cert_cmd.py:594
#: /var/calculate/mydir/git/calculate-api/api/server/cert_cmd.py:595
#, python-format
msgid "look at %s"
msgstr "смотрите %s"
#: /var/calculate/mydir/git/calculate-api/api/server/cert_cmd.py:676
#: /var/calculate/mydir/git/calculate-api/api/server/cert_cmd.py:716
#: /var/calculate/mydir/git/calculate-api/api/server/cert_cmd.py:677
#: /var/calculate/mydir/git/calculate-api/api/server/cert_cmd.py:717
msgid ""
"\n"
"request sent from:"
@ -858,173 +956,161 @@ msgstr ""
"\n"
"запрос на подпись отправлен от:"
#: /var/calculate/mydir/git/calculate-api/api/server/cert_cmd.py:679
#: /var/calculate/mydir/git/calculate-api/api/server/cert_cmd.py:719
#: /var/calculate/mydir/git/calculate-api/api/server/cert_cmd.py:680
#: /var/calculate/mydir/git/calculate-api/api/server/cert_cmd.py:720
msgid "date"
msgstr "дата"
#: /var/calculate/mydir/git/calculate-api/api/server/cert_cmd.py:683
#: /var/calculate/mydir/git/calculate-api/api/server/cert_cmd.py:684
msgid "Certificate not found!"
msgstr "Сертификат не найден!"
#: /var/calculate/mydir/git/calculate-api/api/server/cert_cmd.py:722
#: /var/calculate/mydir/git/calculate-api/api/server/cert_cmd.py:723
msgid "Request not found!"
msgstr "Запрос на подпись не найден!"
#: /var/calculate/mydir/git/calculate-api/api/server/cert_cmd.py:749
#: /var/calculate/mydir/git/calculate-api/api/server/cert_cmd.py:789
#: /var/calculate/mydir/git/calculate-api/api/server/cert_cmd.py:750
#: /var/calculate/mydir/git/calculate-api/api/server/cert_cmd.py:790
#, python-format
msgid "Request \t%s - not signed"
msgstr "Запрос \t%s - не подписан"
#: /var/calculate/mydir/git/calculate-api/api/server/cert_cmd.py:751
#: /var/calculate/mydir/git/calculate-api/api/server/cert_cmd.py:791
#: /var/calculate/mydir/git/calculate-api/api/server/cert_cmd.py:752
#: /var/calculate/mydir/git/calculate-api/api/server/cert_cmd.py:792
#, python-format
msgid "Request \t%s"
msgstr "Запрос \t%s"
#: /var/calculate/mydir/git/calculate-api/api/server/cert_cmd.py:754
#: /var/calculate/mydir/git/calculate-api/api/server/cert_cmd.py:794
#: /var/calculate/mydir/git/calculate-api/api/server/cert_cmd.py:755
#: /var/calculate/mydir/git/calculate-api/api/server/cert_cmd.py:795
msgid "Certificates or requests not found!"
msgstr "Сертификат или запрос не найден!"
#: /var/calculate/mydir/git/calculate-api/api/server/cert_cmd.py:760
#: /var/calculate/mydir/git/calculate-api/api/server/cert_cmd.py:800
#: /var/calculate/mydir/git/calculate-api/api/server/cert_cmd.py:761
#: /var/calculate/mydir/git/calculate-api/api/server/cert_cmd.py:801
msgid "certificate (request) number not int and not 'all'"
msgstr "номер сертификата (запроса) не целочисленный и не 'all'"
#: /var/calculate/mydir/git/calculate-api/api/server/cert_cmd.py:785
#: /var/calculate/mydir/git/calculate-api/api/server/cert_cmd.py:786
msgid "Certificate \t"
msgstr "Сертификат \t"
#: /var/calculate/mydir/git/calculate-api/api/server/cert_cmd.py:810
#: /var/calculate/mydir/git/calculate-api/api/server/cert_cmd.py:811
msgid "id must be int"
msgstr "идентификатор должен быть целочисленным"
#: /var/calculate/mydir/git/calculate-api/api/server/cert_cmd.py:819
#: /var/calculate/mydir/git/calculate-api/api/server/cert_cmd.py:820
#, python-format
msgid "Request or certificate with id = %s not found!"
msgstr "Запрос или сертификат с идентификатором = %s не найден!"
#: /var/calculate/mydir/git/calculate-api/api/server/cert_cmd.py:823
#: /var/calculate/mydir/git/calculate-api/api/server/cert_cmd.py:824
#, python-format
msgid "request %s not found!"
msgstr "запрос %s не найден!"
#: /var/calculate/mydir/git/calculate-api/api/server/cert_cmd.py:826
#: /var/calculate/mydir/git/calculate-api/api/server/cert_cmd.py:827
msgid "This request has already been signed"
msgstr "Запрос успешно подписан"
#: /var/calculate/mydir/git/calculate-api/api/server/cert_cmd.py:827
#: /var/calculate/mydir/git/calculate-api/api/server/cert_cmd.py:828
msgid "Delete certificate and request? y/[n]: "
msgstr "Удалить сертификат и запрос на подпись? y/[n]: "
#: /var/calculate/mydir/git/calculate-api/api/server/cert_cmd.py:829
#: /var/calculate/mydir/git/calculate-api/api/server/cert_cmd.py:830
msgid "Not deleted"
msgstr "Не удалён"
#: /var/calculate/mydir/git/calculate-api/api/server/cert_cmd.py:856
#: /var/calculate/mydir/git/calculate-api/api/server/cert_cmd.py:857
msgid "request deleted"
msgstr "запрос на подпись сертификата удалён"
#: /var/calculate/mydir/git/calculate-api/api/server/cert_cmd.py:859
#: /var/calculate/mydir/git/calculate-api/api/server/cert_cmd.py:860
msgid "certificate deleted"
msgstr "сертификат удалён"
#: /var/calculate/mydir/git/calculate-api/api/server/cert_cmd.py:860
#: /var/calculate/mydir/git/calculate-api/api/server/cert_cmd.py:861
msgid "successfully removed"
msgstr "успешно удалено"
#: /var/calculate/mydir/git/calculate-api/api/server/cert_cmd.py:862
#: /var/calculate/mydir/git/calculate-api/api/server/cert_cmd.py:863
msgid "delete file error!"
msgstr "ошибка удаления файла!"
#: /var/calculate/mydir/git/calculate-api/api/server/cert_cmd.py:876
#: /var/calculate/mydir/git/calculate-api/api/server/cert_cmd.py:877
msgid "CRL deleted"
msgstr "Список отзыва сертификатов удалён"
#: /var/calculate/mydir/git/calculate-api/api/server/cert_cmd.py:878
#: /var/calculate/mydir/git/calculate-api/api/server/cert_cmd.py:879
msgid "CRL not exists"
msgstr "Список отзыва сертификатов не создан"
#: /var/calculate/mydir/git/calculate-api/api/server/cert_cmd.py:884
#: /var/calculate/mydir/git/calculate-api/api/server/cert_cmd.py:885
msgid "Id revocation certificate must be integer!"
msgstr "Номер отзываемого сертификата должен быть целочисленным!"
#: /var/calculate/mydir/git/calculate-api/api/server/cert_cmd.py:889
#: /var/calculate/mydir/git/calculate-api/api/server/cert_cmd.py:890
#, python-format
msgid "Certificate %s not found"
msgstr "Сертификат %s не найден"
#: /var/calculate/mydir/git/calculate-api/api/server/cert_cmd.py:941
msgid "language for translate"
msgstr "язык для перевода"
#: /var/calculate/mydir/git/calculate-api/api/server/cert_cmd.py:945
msgid "port number"
msgstr "номер порта"
#: /var/calculate/mydir/git/calculate-api/api/server/cert_cmd.py:948
#: /var/calculate/mydir/git/calculate-api/api/server/cert_cmd.py:949
msgid "operations with certificates (number or \"all\"). Server not run"
msgstr "операции с сертификатами (номер или \"all\"). Сервер не запускается"
#: /var/calculate/mydir/git/calculate-api/api/server/cert_cmd.py:951
#: /var/calculate/mydir/git/calculate-api/api/server/cert_cmd.py:952
msgid "view clients requests (number or \"all\")"
msgstr "просмотр клиентских запросов (номер или \"all\")"
#: /var/calculate/mydir/git/calculate-api/api/server/cert_cmd.py:954
#: /var/calculate/mydir/git/calculate-api/api/server/cert_cmd.py:955
msgid "view servers certificates (number or \"all\"). Server not run"
msgstr "просмотр серверных сертификатов (номер или \"all\"). Сервер не запускается"
#: /var/calculate/mydir/git/calculate-api/api/server/cert_cmd.py:957
#: /var/calculate/mydir/git/calculate-api/api/server/cert_cmd.py:958
msgid "dump (using with -c [ID])"
msgstr "дамп (используйте с ключом -c [ID])"
#: /var/calculate/mydir/git/calculate-api/api/server/cert_cmd.py:960
#: /var/calculate/mydir/git/calculate-api/api/server/cert_cmd.py:961
msgid "debug"
msgstr "режим отладки (debug)"
#: /var/calculate/mydir/git/calculate-api/api/server/cert_cmd.py:963
#: /var/calculate/mydir/git/calculate-api/api/server/cert_cmd.py:964
msgid "remove selected certificate (using with -c [ID])"
msgstr "удалить выбранный сертификат (используйте с ключом -c [ID])"
#: /var/calculate/mydir/git/calculate-api/api/server/cert_cmd.py:966
#: /var/calculate/mydir/git/calculate-api/api/server/cert_cmd.py:967
msgid "Add right for certificate (or list via ',') (using with -c [ID])"
msgstr "добавить права для сертификата (или списка через ',') (используйте с ключом -c [ID])"
#: /var/calculate/mydir/git/calculate-api/api/server/cert_cmd.py:969
#: /var/calculate/mydir/git/calculate-api/api/server/cert_cmd.py:970
msgid "Delete right(s) for certificate (using with -c [ID])"
msgstr "удаление прав сертификата (используйте с -c [ID])"
#: /var/calculate/mydir/git/calculate-api/api/server/cert_cmd.py:972
#: /var/calculate/mydir/git/calculate-api/api/server/cert_cmd.py:973
msgid "generate a root (CA) certificate"
msgstr "генерировать корневой сертификат (сертификат удостоверяющего центра)"
#: /var/calculate/mydir/git/calculate-api/api/server/cert_cmd.py:975
#: /var/calculate/mydir/git/calculate-api/api/server/cert_cmd.py:976
msgid "post request a signed root certificate"
msgstr "отправить запрос на подписание корневого сертификата"
#: /var/calculate/mydir/git/calculate-api/api/server/cert_cmd.py:978
msgid "get signed certificate from server"
msgstr "получить подписанный сертификат с сервера"
#: /var/calculate/mydir/git/calculate-api/api/server/cert_cmd.py:981
#: /var/calculate/mydir/git/calculate-api/api/server/cert_cmd.py:982
msgid "use root certificate as server cert"
msgstr "использовать корневой сертификат как сертификат сервера"
#: /var/calculate/mydir/git/calculate-api/api/server/cert_cmd.py:984
#: /var/calculate/mydir/git/calculate-api/api/server/cert_cmd.py:985
msgid "sign client's request by server certificate"
msgstr "подписать запрос на подписание сертификата клиента сертификатом сервера"
#: /var/calculate/mydir/git/calculate-api/api/server/cert_cmd.py:987
#: /var/calculate/mydir/git/calculate-api/api/server/cert_cmd.py:988
msgid "sign server's request by root certificate"
msgstr "подписать запрос на подписание сертификата сервера корневым сертификатом"
#: /var/calculate/mydir/git/calculate-api/api/server/cert_cmd.py:990
#: /var/calculate/mydir/git/calculate-api/api/server/cert_cmd.py:991
msgid "refuse to sign request"
msgstr "отвергнуть запрос на подпись сертификата"
#: /var/calculate/mydir/git/calculate-api/api/server/cert_cmd.py:993
#: /var/calculate/mydir/git/calculate-api/api/server/cert_cmd.py:994
msgid "revoke early signed server (or ca) certificate. rm to remove CRL"
msgstr "отозвать ранее подписанный сертификат сервера (удостоверяющего центра). rm для удаления списка отзыва."
@ -1085,3 +1171,36 @@ msgstr ""
msgid "Error. May be a server cert or secret key not valid!"
msgstr "Ошибка. Может быть сертификат сервера и секретный ключ неверны!"
#: /var/calculate/mydir/git/calculate-api/api/server/cl_server.py:223
#, python-format
msgid "listening to https://0.0.0.0:%d"
msgstr "сервер прослушивает https://0.0.0.0:%d"
#: /var/calculate/mydir/git/calculate-api/api/server/cl_server.py:224
#, python-format
msgid "wsdl is at: https://0.0.0.0:%d/?wsdl"
msgstr "wsdl находится на: https://0.0.0.0:%d/?wsdl"
#: /var/calculate/mydir/git/calculate-api/api/server/cl_server.py:251
msgid "Server start"
msgstr "Сервер запущен"
#: /var/calculate/mydir/git/calculate-api/api/server/cl_server.py:254
msgid ""
"\n"
"Server stopping"
msgstr ""
"\n"
"Сервер остановлен"
#: /var/calculate/mydir/git/calculate-api/api/server/cl_server.py:260
msgid "Server certificate not found"
msgstr "Сертификат сервера не найден"
#: /var/calculate/mydir/git/calculate-api/api/server/cl_server.py:261
msgid "use cl-api-server with key --gen-cert-by HOST (--get-cert-from HOST) or --use-root-as-server)"
msgstr "используйте cl-api-server с ключом --gen-cert-by HOST (--get-cert-from HOST) или --use-root-as-server)"
#, fuzzy
#~ msgid "get signed signed certificate from server"
#~ msgstr "получить подписанный сертификат с сервера"

@ -15,277 +15,7 @@
# See the License for the specific language governing permissions and
# limitations under the License.
import sys, os
import socket, ssl
from cherrypy.wsgiserver import CherryPyWSGIServer, WSGIPathInfoDispatcher
from cherrypy.wsgiserver.ssl_pyopenssl import pyOpenSSLAdapter
from OpenSSL.SSL import Error as SSLError
from OpenSSL import SSL
import OpenSSL
import importlib
from signal import SIGTERM
import threading
from calculate.lib.cl_datavars import ClDataVars
from calculate.api.cl_api import DataVarsApi
from calculate.api.server.clean import clean
import calculate.api.server.cert_cmd as cert_cmd
from calculate.api.server.func import initialization
from calculate.api.server.server_class import ClApplication
class OpenSSLAdapter (pyOpenSSLAdapter):
#def check_cert(self, cert):
#if cert == None:
#return -1
#cert_id = 0
#from func import find_cert_id
#find_cert_id(cert, self.data_path, self.certbase)
## open database with certificates
#if not os.path.exists(self.certbase):
#fc = open(self.certbase,"w")
#fc.close()
#fc = open(self.certbase,"r")
#while 1:
#try:
## read all on one record
#cert_dict = pickle.load(fc)
#except:
#break
## if input and cert from database equal
#if cert == cert_dict["cert"]:
## get certificate id
#cert_id = cert_dict["Id"]
#fc.close()
#return cert_id
def verify_func(self, connection, x509, errnum, errdepth, ok):
# get client certificate
curThread = threading.currentThread()
#print '#######################',errdepth,'####################################'
#if not OpenSSL.crypto.dump_certificate \
#(OpenSSL.crypto.FILETYPE_PEM, x509) in self.ca_certs:
#print '!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!'
#return 0
if errdepth == 0:
curThread.client_cert = OpenSSL.crypto.dump_certificate \
(OpenSSL.crypto.FILETYPE_PEM, x509)
cert = OpenSSL.crypto.load_certificate(OpenSSL.SSL.FILETYPE_PEM,
curThread.client_cert)
subject = cert.get_subject()
if ok:
try:
country = len (subject.get_components()) - 1
language = 1
curThread.lang = subject.get_components()[country][language]
except:
curThread.lang = "En"
return ok
def get_context(self):
"""Return an SSL.Context from self attributes."""
# See http://aspn.activestate.com/ASPN/Cookbook/Python/Recipe/442473
c = SSL.Context(SSL.SSLv23_METHOD)
c.use_privatekey_file(self.private_key)
c.set_verify(SSL.VERIFY_PEER, self.verify_func)
#self.ca_certs = open('/etc/calculate/ca/ca_root.crt','r').read()
if self.certificate_chain:
c.load_verify_locations(self.certificate_chain)
c.use_certificate_file(self.certificate)
return c
def main(*args, **keywords):
# For cleaning of sessions at server reboot
args = cert_cmd.parse()
# translate
if args.lang:
translate(args.lang)
debug = args.debug
import logging
import logging.handlers
if not os.path.exists('/var/log/calculate'):
os.makedirs('/var/log/calculate')
LOG_FILENAME = '/var/log/calculate/logging_cl_api_server.out'
file_logger = logging.getLogger('MyLogger')
file_logger.setLevel(logging.DEBUG)
# Add the log message handler to the logger
handler = logging.handlers.RotatingFileHandler(
LOG_FILENAME, maxBytes=10000000, backupCount=3)
file_logger.addHandler(handler)
# debug
if debug:
logging.basicConfig(level=logging.DEBUG)
logger = logging.getLogger('soaplib.wsgi')
logger.setLevel(logging.DEBUG)
port = args.port
ob = DataVarsApi()
ob.importApi()
# set var env
ob.flIniFile()
cl_wsdl = ob.Get('cl_wsdl')
data_path = ob.Get('cl_api_data')
certbase = ob.Get('cl_api_database')
serv_certbase = ob.Get('cl_api_serv_database')
rights = ob.Get('cl_api_rights')
group_rights = ob.Get('cl_api_group_rights')
sids = ob.Get('cl_api_sids_path')
pids = ob.Get('cl_api_pids_path')
sids_pids = ob.Get('cl_api_sids_pids')
sids_file = ob.Get('cl_api_sids_file')
pids_file = ob.Get('cl_api_pids_file')
max_sid = ob.Get('cl_api_max_sid')
max_pid = ob.Get('cl_api_max_pid')
cert_path = ob.Get('cl_api_cert_path')
cert = ob.Get('cl_api_cert')
key = ob.Get('cl_api_key')
# delete all sid and pid informations file
clean(sids_file, pids_file, sids_pids, sids, pids)
cert_cmd.create_path(data_path, certbase)
#####################
''' view information about client certificates '''
if args.revoke_cert_id:
cert_cmd.revoke_signed_cert(args.revoke_cert_id, data_path, cert_path)
return 0
if args.host or args.gen_root_cert or args.root_host or args.use_root_cert:
cert_cmd.check_server_certificate(cert, key, cert_path, args, port)
return 0
if args.id_client_req:
cert_cmd.sing_req_by_server(args, cert_path, data_path)
return 0
if args.Id:
cert_cmd.view_cert(args, certbase, data_path, rights, group_rights)
return 0
if args.cert_id:
cert_cmd.view_signed_cert(args, serv_certbase, data_path)
return 0
if args.req_id:
cert_cmd.view_client_request(args, certbase, data_path)
return 0
# Sign request by root certificate
if args.id_server_req:
cert_cmd.sing_req_by_root(args, cert_path, data_path)
return 0
if args.id_del_req:
cert_cmd.del_request(args, serv_certbase, data_path)
return 0
#####################
# importing other modules
other_mod = initialization(cl_wsdl)
#try:
pack = "calculate.api.server"
func_metaclass = importlib.import_module('%s.func_metaclass' %pack)
other_mod.append(func_metaclass.Func_MetaClass)
from calculate.api.server.cl_vers_api import VERS
other_mod.append(VERS)
from calculate.api.server.baseClass import Basic
other_mod.append(Basic)
other_mod.append(object)
# make server metaclass
CombinedServerClass = type ("CombinedServerClass", tuple(other_mod), {})
App = ClApplication([CombinedServerClass],'tns', log = file_logger)
tc = App.get_service(CombinedServerClass)
# set all path
tc.set_paths (data_path, certbase, serv_certbase, rights, group_rights, \
sids, pids, sids_pids, sids_file, pids_file, max_sid, \
max_pid, cert_path, cert, key)
max_num = 99999999
dispatcher = WSGIPathInfoDispatcher( { '' : App } )
server = CherryPyWSGIServer(('0.0.0.0', port), dispatcher,\
numthreads = 10, max = max_num, request_queue_size = max_num)
print _("listening to https://0.0.0.0:%d") % (port)
print _("wsdl is at: https://0.0.0.0:%d/?wsdl") %(port)
ca_cert = "/etc/calculate/ca/ca_root.crt"
if not os.path.exists (ca_cert):
ca_cert = None
#sslAdapter = OpenSSLAdapter(cert, key, cert)#"/etc/calculate/ca/ca_root.crt")
sslAdapter = OpenSSLAdapter(cert, key, ca_cert)
sslAdapter.certbase = certbase
#sslAdapter.App = App
#sslAdapter.ClApplication = ClApplication
server.ssl_adapter = sslAdapter
server.certbase = certbase
server.serv_certbase = serv_certbase
server.rights = rights
server.group_rights = group_rights
server.sids = sids
server.pids = pids
server.data_path = data_path
server.cert_path = cert_path
server.ssl_certificate = cert
server.ssl_private_key = key
try:
print _("Server start")
server.start()
except KeyboardInterrupt, SIGTERM:
print _("\nServer stopping")
server.stop()
sys.exit(0)
except socket.error, e:
print e
except SSLError, e:
print '\n',_('Server certificate not found')#, e
print _('use cl-api-server with key --gen-cert-by HOST '
'(--get-cert-from HOST) '
'or --use-root-as-server)')
def translate(lang = None):
import locale
import gettext
if lang:
try:
language = gettext.translation ('calculate_api', languages = [lang])
language.install()
return 0
except:
print "lang %s not supported!" %str(lang)
try:
current_locale, encoding = locale.getdefaultlocale()
language = gettext.translation ('calculate_api', \
languages = [current_locale] )
language.install()
return 0
except:
language = gettext.translation ('calculate_api', languages = ['en'] )
language.install()
return 0
#print _("set locale"), current_locale
from calculate.api.server.cl_server import translate, main
if __name__=='__main__':
translate()

@ -14,496 +14,8 @@
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
from suds import WebFault
from suds.transport import TransportError, Request
from calculate.api.client.client_class import Client_suds
import traceback as tb
from getpass import getpass
import time, logging
import glob, os
from OpenSSL.crypto import load_certificate, FILETYPE_PEM
import re, threading
from calculate.api.client.function import *
from calculate.api.client.pid_information import *
from calculate.api.client.cert_func import *
from calculate.api.client.cert_verify import get_CRL
from calculate.api.client.sid_func import *
from calculate.api.client.template import client_template
from calculate.lib.cl_datavars import ClDataVars
from calculate.api.cl_api import DataVarsApi
from calculate.api.client.client_class import HTTPSClientCertTransport
t = time
help_ = '''
useradd, cl-unix-useradd - add unix user
template, cl_template - overlay templates
halt, server_shutdown - shutdown server
run, server_start - start server
---- process methods ----
lsp, list-pid - listing all pids for this session
pi, pid-info - get information about select pid (0 for all)
kill, pid-kill - kill select pid
---- sessions methods ----
lss, list-session - listing all sessions in server
si, session-info - get information about select session (sid)
lsr, list-method - listing all accessible methods
q, quit - exit
h, help - display this help and exit
v, version - output version information and exit'''
#def client_say_hello(client):
##try:
#name = raw_input ("Enter your name: ")
#times = raw_input ("Enter number repeating (1-100): ")
#if (not name.isalpha()):
#print _("Name input Error!")
#return 2
#try:
#times = int(times)
#except:
#print _("Number repeating input Error!")
#return 2
#if times < 1 or times > 100:
#print _("Number repeating must be > 0 and < 100")
#return 2
##get sid
#sid = get_sid(client.SID_FILE)
#try:
#s = client.service.say_hello(sid, name, times)
#analysis(client, sid, s)
#return 0
#except Exception, e:
#print e
##print _("SAYS ERROR")
#return 1
#def client_say_hello2(client):
##try:
##name = raw_input ("Enter your name: ")
#times = raw_input ("Enter number repeating (1-100): ")
##if (not name.isalpha()):
##return 2
#try:
#times = int(times)
#except:
#print _("Number repeating input Error!")
#return 2
#if times < 1 or times > 100:
#print _("Number repeating must be > 0 and < 100")
#return 2
##get sid
#sid = get_sid(client.SID_FILE)
#try:
#s = client.service.say_hello(sid = sid, times = times)
#analysis(client, sid, s)
#return 0
#except:
#print _("SAYS ERROR")
#return 1
def client_login (client):
login = raw_input ("Login: ")
password = raw_input ("password: ")
try:
name_re = re.compile("[^a-zA-Z_]")
if name_re.findall(login):
print _("input error")
return 2
param = ""
print client.service.cl_login(login = login, password = password)
except (Exception) , e:
sys.stdout.flush()
for i in e.message:
sys.stdout.write(str(i) + ' ')
def client_useradd (client):
user_name = raw_input ("User name: ")
try:
name_re = re.compile("[^a-zA-Z_]")
if name_re.findall(user_name):
print _("input error")
return 2
param = ""
print client.service.cl_unix_useradd(param = user_name)
except:
print _("create error")
def client_userdel (client):
user_name = raw_input ("User name: ")
try:
name_re = re.compile("[^a-zA-Z_]")
if name_re.findall(user_name):
print _("input error")
return 2
param = ""
print client.service.cl_unix_userdel(param = user_name)
except:
print _("deleted error")
def client_shut (client):
import soaplib
try:
temp = client.service.server_shutdown()
if ( temp == 1):
print _("Server shutting down...")
except:
print _("Connection error! ")
return 1
def client_signal(client):
Vars = DataVarsApi()
Vars.importApi()
Vars.flIniFile()
try:
client_active = Vars.Get('cl_api_client_active_period')
except:
client_active = 15
while True:
if os.path.exists(client.SID_FILE) :
fi = open(client.SID_FILE, 'r')
temp = fi.read()
fi.close()
sid = int(temp)
else:
sid = 0
try:
reply = client.service.active_client(sid)
except:
print _('no connection to server!')
sys.exit()
time.sleep(float(client_active))
import argparse
def parse():
parser = argparse.ArgumentParser()
parser.add_argument(
'-p', '--port', type=int, default = '8888', dest='port',
help='port number')
#parser.add_argument(
#'--script', type=str, default = '/Server', dest='script_name',
#help='name script in server')
parser.add_argument(
'--host', type=str, default = 'localhost', dest='host',
help='host destination')
parser.add_argument(
'--gen-cert-by', type=str, dest='by_host',
help='post request a signed server certificate')
parser.add_argument(
'--get-cert-from', type=str, dest='from_host',
help='get signed signed certificate from server')
parser.add_argument(
'--cert-path', type=str,
default = '~/.calculate/client_cert/',
nargs ='?', dest='path_to_cert',
help='path to cert and key file')
return parser.parse_args()
#url = 'http://localhost:8888/TestService/?wsdl'
def test(client, com=None):
if not com:
method_name = 'test'
else:
method_name = com
view = client.service[0][method_name + '_view']()
#print '==>', view
cr = create_obj(client, method_name)
#print 'ddd',cr
#print type (cr)
list_param = dir (cr)
param_list = []
for param in list_param:
if not param.startswith('_'):
param_list.append(param)
for Group in view.groups.GroupField:
print "GroupField name : ", Group.name
for field in Group.fields.Field:
if field.element == 'input':
if field.type == 'str':
cr[field.name] = raw_input(field.label)
if field.type == 'int':
while True:
try:
var = raw_input(field.label)
cr[field.name] = int (var)
break
except (TypeError, ValueError):
print _('Это не целое число')
elif field.element == 'bool':
while 1:
bool_var = raw_input(field.label+' (y/n): ')
if bool_var.lower() in ['y','yes']:
cr[field.name] = True
break
if bool_var.lower() in ['n','no']:
cr[field.name] = False
break
print _('Enter "Yes" or "No"!')
elif field.element == 'check':
choice = field.choice[0]
while 1:
print _('Select one: ')
for i in range(1,len(choice)+1):
print choice[i-1], ' - %d' %i
try:
bool_var = int (raw_input(field.label))
if bool_var > 0:
cr[field.name] = choice[bool_var - 1]
print 'your choice %s' %cr[field.name]
break
except:
pass
#field.choice
#print field.help
sid = get_sid(client.SID_FILE)
s = client.service[0][method_name](sid, cr)
analysis(client, sid, s)
def https_server(client, signaling):
global url
client_post_auth(client)
signaling.start()
client_list_methods(client)
get_entire_frame(client)
#create_obj(client, "install_system")
while True:
try:
command = raw_input ("\nCommand: ")
except KeyboardInterrupt, e:
print
sys.exit()
if (command == 'halt' or command == 'server_shutdown'):
client_shut(client)
#elif (command == 'say_hello' or command == 'say'):
#client_say_hello(client)
#elif (command == 'say_hello2' or command == 'say2'):
#client_say_hello2(client)
elif (command == 'server_start' or command == 'run'):
if os.path.exists(client.CERT_KEY) and\
os.path.exists(client.CERT_FILE) :
client = Client_suds(url,\
transport = HTTPSClientCertTransport(client.CERT_KEY,\
client.CERT_FILE))
#If the certificate file misses
else:
CERT_FILE = None
CERT_KEY = None
client = Client_suds(url,\
transport = HTTPSClientCertTransport(CERT_KEY, CERT_FILE))
elif (command == 'login' or command == 'cl-login'):
client_login(client)
elif (command == 'useradd' or command == 'cl-unix-useradd'):
client_useradd(client)
elif (command == 'sid-del' or command == 'del-sid'):
client_del_sid(client)
elif (command == 'lsp' or command == 'list-pid'):
client_list_pid(client)
elif (command == 'ins' or command == 'install'):
client_install(client)
elif (command == 'lsr' or command == 'list-method'\
or command == 'list-right'):
client_list_methods(client)
elif (command == 'lss' or command == 'list-session'\
or command == 'sls'):
client_list_sessions(client)
elif (command == 'pi' or command == 'pid-info'):
client_pid_info(client)
elif (command == 'si' or command == 'session-info'):
client_session_info(client)
elif (command == 'kill' or command == 'pid-kill'):
client_pid_kill(client)
elif (command == 'userdel' or command == 'cl-unix-userdel'):
client_userdel(client)
elif (command == 'vcr' or command == 'view-cert-right'):
client_view_cert_right(client)
elif command.split(' ',1)[0] in ['t', 'template', 'cl-template']:
#client_template(client, command)
test(client, 'cl_template')
elif command.lower() in ['test']:
test(client)
elif (command == 'help' or command == 'h'):
print help_
elif command in ['q', 'quit', 'exit']:
print _("Closing\n")
signaling._Thread__stop()
time.sleep(0.3)
num = client_list_pid(client)
if num:
print _('at closing session, '
'data %d processes will be deleted!' %num)
c = raw_input (_("Close your session y/[n]: "))
if c in ['y', 'yes', 'Y', 'YES']:
client_del_sid(client)
#signaling.killed = True
# client_shut(client)
return 0
else:
print _("Input Error")
#t.sleep(1)
#def http_server(client):
#pass
def main():
clear()
#password = getpass(prompt="Password: ")
logging.basicConfig(level=logging.FATAL)
logging.getLogger('suds.client').setLevel(logging.FATAL)
logging.getLogger('suds.transport').setLevel(logging.FATAL)
logging.getLogger('suds.transport.http').setLevel(logging.FATAL)
#fmt = '%(asctime)s [%(levelname)s] %(funcName)s() @%(filename)s:%(lineno)d\n%(message)s\n'
#logging.basicConfig(level=logging.INFO, format=fmt)
logging.getLogger('suds.umx.typed').setLevel(logging.ERROR)
clVars = ClDataVars()
clVars.flIniFile()
homePath = clVars.Get('ur_home_path')
args = parse()
port = args.port
host = args.host
path_to_cert = args.path_to_cert
path_to_cert = path_to_cert.replace("~",homePath)
getCRL = threading.Thread(target=get_CRL, args = (path_to_cert, ))
getCRL.start()
if args.by_host:
client_post_request (path_to_cert, args)
return 0
if args.from_host:
client_get_cert (path_to_cert, args)
return 0
url = "https://%s:%d/?wsdl" %(host, port)
print "url = %s" %url
#try:
client = Client_suds(url, \
transport = HTTPSClientCertTransport(None,None, path_to_cert))
server_host_name = client.service.get_server_host_name()
del (client)
#except Exception, e:
#print 'get host name error', e
##print _("Connection Error. Failure verification server.")
#sys.exit()
try:
import glob
all_cert_list = glob.glob(path_to_cert + '*.crt')
fit_cert_list = []
for client_cert_path in all_cert_list:
client_cert = client_cert_path.replace(path_to_cert, '')
client_cert_name = client_cert.replace('.crt', '')
if server_host_name.endswith(client_cert_name):
fit_cert_list.append(client_cert_name)
fit_cert_list.sort(key = len)
Connect_Error = 1
for i in range (0, len(fit_cert_list)):
#print 'fit_cert_list = ',fit_cert_list
cert_name = fit_cert_list.pop()
CERT_FILE = path_to_cert + cert_name + '.crt'
CERT_KEY = path_to_cert + cert_name + '.key'
print "cert_name = ",cert_name
try:
client = Client_suds(url,\
transport = HTTPSClientCertTransport(CERT_KEY, CERT_FILE,\
path_to_cert))
client.set_parameters (path_to_cert, CERT_FILE, CERT_KEY)
client_post_cert(client)
Connect_Error = 0
except VerifyError, e:
print e.value
Connect_Error = 1
except Exception, e:
print e
Connect_Error = 1
#sys.exit()
if Connect_Error == 0:
break
#If the certificate file misses
if Connect_Error:
CERT_FILE = None
CERT_KEY = None
client = Client_suds(url,\
transport = HTTPSClientCertTransport(CERT_KEY, CERT_FILE,\
path_to_cert))
client.set_parameters (path_to_cert, CERT_FILE, CERT_KEY)
Vars = DataVarsApi()
Vars.importApi()
Vars.flIniFile()
try:
client.frame_period = Vars.Get('cl_api_get_frame_period')
except:
client.frame_period = 2
signaling = threading.Thread(target=client_signal, args = (client, ))
signaling.setDaemon(True)
https_server(client, signaling)
#----------------------------------------------------
except WebFault, f:
print _("Exception: %s") %f
print f.fault
except TransportError, te:
print _("Exception: %s") %te
except Exception, e:
print _("Exception: %s") %e
tb.print_exc()
from calculate.api.client.cl_client import translate, main
if __name__=='__main__':
translate()
main()

Loading…
Cancel
Save