Remove all license code
This commit is contained in:
parent
61cb9d46f7
commit
8866b881db
6 changed files with 2 additions and 118 deletions
|
@ -1,11 +1,11 @@
|
|||
conf/stack
|
||||
screenshots
|
||||
tools
|
||||
test/data/registry
|
||||
venv
|
||||
.git
|
||||
.gitignore
|
||||
Bobfile
|
||||
README.md
|
||||
license.py
|
||||
requirements-nover.txt
|
||||
run-local.sh
|
10
app.py
10
app.py
|
@ -21,7 +21,6 @@ from data.billing import Billing
|
|||
from data.buildlogs import BuildLogs
|
||||
from data.queue import WorkQueue
|
||||
from data.userevent import UserEventsBuilderModule
|
||||
from license import load_license
|
||||
from datetime import datetime
|
||||
|
||||
|
||||
|
@ -50,15 +49,6 @@ else:
|
|||
environ_config = json.loads(os.environ.get(OVERRIDE_CONFIG_KEY, '{}'))
|
||||
app.config.update(environ_config)
|
||||
|
||||
logger.debug('Applying license config from: %s', LICENSE_FILENAME)
|
||||
try:
|
||||
app.config.update(load_license(LICENSE_FILENAME))
|
||||
except IOError:
|
||||
raise RuntimeError('License file %s not found; please check your configuration' % LICENSE_FILENAME)
|
||||
|
||||
if app.config.get('LICENSE_EXPIRATION', datetime.min) < datetime.utcnow():
|
||||
raise RuntimeError('License has expired, please contact support@quay.io')
|
||||
|
||||
features.import_features(app.config)
|
||||
|
||||
Principal(app, use_sessions=False)
|
||||
|
|
13
license.py
13
license.py
|
@ -1,13 +0,0 @@
|
|||
import pickle
|
||||
|
||||
from Crypto.PublicKey import RSA
|
||||
|
||||
n = 24311791124264168943780535074639421876317270880681911499019414944027362498498429776192966738844514582251884695124256895677070273097239290537016363098432785034818859765271229653729724078304186025013011992335454557504431888746007324285000011384941749613875855493086506022340155196030616409545906383713728780211095701026770053812741971198465120292345817928060114890913931047021503727972067476586739126160044293621653486418983183727572502888923949587290840425930251185737996066354726953382305020440374552871209809125535533731995494145421279907938079885061852265339259634996180877443852561265066616143910755505151318370667L
|
||||
e = 65537L
|
||||
|
||||
def load_license(license_path):
|
||||
decryptor = RSA.construct((n, e))
|
||||
with open(license_path, 'rb') as encrypted_license:
|
||||
decrypted_data = decryptor.encrypt(encrypted_license.read(), 0)
|
||||
|
||||
return pickle.loads(decrypted_data[0])
|
BIN
license.pyc
BIN
license.pyc
Binary file not shown.
|
@ -1,38 +0,0 @@
|
|||
import argparse
|
||||
import pickle
|
||||
|
||||
from Crypto.PublicKey import RSA
|
||||
from datetime import datetime, timedelta
|
||||
|
||||
def encrypt(message, output_filename):
|
||||
private_key_file = 'conf/stack/license_key'
|
||||
with open(private_key_file, 'r') as private_key:
|
||||
encryptor = RSA.importKey(private_key)
|
||||
|
||||
encrypted_data = encryptor.decrypt(message)
|
||||
|
||||
with open(output_filename, 'wb') as encrypted_file:
|
||||
encrypted_file.write(encrypted_data)
|
||||
|
||||
parser = argparse.ArgumentParser(description='Create a license file.')
|
||||
parser.add_argument('--users', type=int, default=20,
|
||||
help='Number of users allowed by the license')
|
||||
parser.add_argument('--days', type=int, default=30,
|
||||
help='Number of days for which the license is valid')
|
||||
parser.add_argument('--warn', type=int, default=7,
|
||||
help='Number of days prior to expiration to warn users')
|
||||
parser.add_argument('--output', type=str, required=True,
|
||||
help='File in which to store the license')
|
||||
|
||||
if __name__ == "__main__":
|
||||
args = parser.parse_args()
|
||||
print ('Creating license for %s users for %s days in file: %s' %
|
||||
(args.users, args.days, args.output))
|
||||
|
||||
license_data = {
|
||||
'LICENSE_EXPIRATION': datetime.utcnow() + timedelta(days=args.days),
|
||||
'LICENSE_USER_LIMIT': args.users,
|
||||
'LICENSE_EXPIRATION_WARNING': datetime.utcnow() + timedelta(days=(args.days - args.warn)),
|
||||
}
|
||||
|
||||
encrypt(pickle.dumps(license_data, 2), args.output)
|
|
@ -1,55 +0,0 @@
|
|||
import calendar
|
||||
import sys
|
||||
|
||||
from email.utils import formatdate
|
||||
from apscheduler.schedulers.background import BackgroundScheduler
|
||||
from datetime import datetime, timedelta
|
||||
|
||||
from data import model
|
||||
|
||||
|
||||
class ExpirationScheduler(object):
|
||||
def __init__(self, utc_create_notifications_date, utc_terminate_processes_date):
|
||||
self._scheduler = BackgroundScheduler()
|
||||
self._termination_date = utc_terminate_processes_date
|
||||
|
||||
soon = datetime.now() + timedelta(seconds=1)
|
||||
|
||||
if utc_create_notifications_date > datetime.utcnow():
|
||||
self._scheduler.add_job(model.delete_all_notifications_by_kind, 'date', run_date=soon,
|
||||
args=['expiring_license'])
|
||||
|
||||
local_notifications_date = self._utc_to_local(utc_create_notifications_date)
|
||||
self._scheduler.add_job(self._generate_notifications, 'date',
|
||||
run_date=local_notifications_date)
|
||||
else:
|
||||
self._scheduler.add_job(self._generate_notifications, 'date', run_date=soon)
|
||||
|
||||
local_termination_date = self._utc_to_local(utc_terminate_processes_date)
|
||||
self._scheduler.add_job(self._terminate, 'date', run_date=local_termination_date)
|
||||
|
||||
@staticmethod
|
||||
def _format_date(date):
|
||||
""" Output an RFC822 date format. """
|
||||
if date is None:
|
||||
return None
|
||||
return formatdate(calendar.timegm(date.utctimetuple()))
|
||||
|
||||
@staticmethod
|
||||
def _utc_to_local(utc_dt):
|
||||
# get integer timestamp to avoid precision lost
|
||||
timestamp = calendar.timegm(utc_dt.timetuple())
|
||||
local_dt = datetime.fromtimestamp(timestamp)
|
||||
return local_dt.replace(microsecond=utc_dt.microsecond)
|
||||
|
||||
def _generate_notifications(self):
|
||||
for user in model.get_active_users():
|
||||
model.create_unique_notification('expiring_license', user,
|
||||
{'expires_at': self._format_date(self._termination_date)})
|
||||
|
||||
@staticmethod
|
||||
def _terminate():
|
||||
sys.exit(1)
|
||||
|
||||
def start(self):
|
||||
self._scheduler.start()
|
Reference in a new issue