bin/iro-adduser
author Sandro Knauß <bugs@sandroknauss.de>
Tue, 15 Apr 2025 01:22:19 +0200
changeset 316 63c681b8e92c
parent 299 047e4b4760aa
permissions -rw-r--r--
fix link to about.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
299
047e4b4760aa adding iroadduser
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
     1
#!/usr/bin/env python2.7
047e4b4760aa adding iroadduser
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
     2
047e4b4760aa adding iroadduser
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
     3
# Copyright (c) 2012 netzguerilla.net <iro@netzguerilla.net>
047e4b4760aa adding iroadduser
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
     4
#
047e4b4760aa adding iroadduser
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
     5
# This file is part of Iro.
047e4b4760aa adding iroadduser
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
     6
#
047e4b4760aa adding iroadduser
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
     7
# Permission is hereby granted, free of charge, to any person obtaining a copy of
047e4b4760aa adding iroadduser
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
     8
# this software and associated documentation files (the "Software"), to deal in
047e4b4760aa adding iroadduser
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
     9
# the Software without restriction, including without limitation the rights to use,
047e4b4760aa adding iroadduser
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    10
# copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the
047e4b4760aa adding iroadduser
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    11
# #Software, and to permit persons to whom the Software is furnished to do so,
047e4b4760aa adding iroadduser
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    12
# subject to the following conditions:
047e4b4760aa adding iroadduser
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    13
#
047e4b4760aa adding iroadduser
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    14
# The above copyright notice and this permission notice shall be included in
047e4b4760aa adding iroadduser
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    15
# all copies or substantial portions of the Software.
047e4b4760aa adding iroadduser
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    16
#
047e4b4760aa adding iroadduser
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    17
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
047e4b4760aa adding iroadduser
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    18
# INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A
047e4b4760aa adding iroadduser
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    19
# PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
047e4b4760aa adding iroadduser
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    20
# HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
047e4b4760aa adding iroadduser
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    21
# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
047e4b4760aa adding iroadduser
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    22
# SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
047e4b4760aa adding iroadduser
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    23
047e4b4760aa adding iroadduser
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    24
from twisted.python import log
047e4b4760aa adding iroadduser
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    25
047e4b4760aa adding iroadduser
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    26
from sqlalchemy import create_engine, pool
047e4b4760aa adding iroadduser
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    27
from sqlalchemy.exc import ArgumentError
047e4b4760aa adding iroadduser
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    28
import sys,os
047e4b4760aa adding iroadduser
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    29
import random
047e4b4760aa adding iroadduser
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    30
047e4b4760aa adding iroadduser
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    31
import logging
047e4b4760aa adding iroadduser
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    32
047e4b4760aa adding iroadduser
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    33
from iro.controller.pool import dbPool
047e4b4760aa adding iroadduser
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    34
from iro import config, __version__, install
047e4b4760aa adding iroadduser
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    35
from iro.model.schema import Offer, User, Userright
047e4b4760aa adding iroadduser
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    36
from iro.model.utils import WithSession
047e4b4760aa adding iroadduser
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    37
047e4b4760aa adding iroadduser
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    38
observer = log.PythonLoggingObserver()
047e4b4760aa adding iroadduser
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    39
observer.start()
047e4b4760aa adding iroadduser
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    40
047e4b4760aa adding iroadduser
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    41
logging.basicConfig(level=logging.DEBUG, format='%(asctime)s %(name)s(%(processName)s)-%(levelname)s: %(message)s')
047e4b4760aa adding iroadduser
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    42
047e4b4760aa adding iroadduser
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    43
import argparse
047e4b4760aa adding iroadduser
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    44
047e4b4760aa adding iroadduser
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    45
parser = argparse.ArgumentParser(description='Iro adduser.')
047e4b4760aa adding iroadduser
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    46
parser.add_argument('-v', '--version', action='version', version="%s %s"%(os.path.basename(sys.argv[0]),__version__))
047e4b4760aa adding iroadduser
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    47
parser.add_argument('name', help="username")
047e4b4760aa adding iroadduser
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    48
parser.add_argument('offers', nargs='+', help="offers for user")
047e4b4760aa adding iroadduser
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    49
args = parser.parse_args()
047e4b4760aa adding iroadduser
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    50
047e4b4760aa adding iroadduser
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    51
if not install.checkConfig():
047e4b4760aa adding iroadduser
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    52
    logging.error("iro.conf is not in right format.")
047e4b4760aa adding iroadduser
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    53
    logging.info("Please edit iro.conf")
047e4b4760aa adding iroadduser
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    54
    sys.exit(1)
047e4b4760aa adding iroadduser
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    55
047e4b4760aa adding iroadduser
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    56
config.init()
047e4b4760aa adding iroadduser
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    57
047e4b4760aa adding iroadduser
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    58
try:
047e4b4760aa adding iroadduser
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    59
    engine = create_engine(config.main.dburl,
047e4b4760aa adding iroadduser
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    60
           poolclass = pool.SingletonThreadPool,  pool_size=dbPool.maxthreads, )
047e4b4760aa adding iroadduser
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    61
except ArgumentError:
047e4b4760aa adding iroadduser
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    62
    logging.error("Can't connect to database")
047e4b4760aa adding iroadduser
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    63
    logging.info("Please edit iro.conf")
047e4b4760aa adding iroadduser
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    64
    sys.exit(1)
047e4b4760aa adding iroadduser
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    65
047e4b4760aa adding iroadduser
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    66
047e4b4760aa adding iroadduser
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    67
if not install.checkDatabaseConnection():
047e4b4760aa adding iroadduser
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    68
    logging.error("Can't connect to database")
047e4b4760aa adding iroadduser
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    69
    logging.info("Please edit iro.conf")
047e4b4760aa adding iroadduser
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    70
    sys.exit(1)
047e4b4760aa adding iroadduser
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    71
047e4b4760aa adding iroadduser
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    72
if not install.checkDatabase():
047e4b4760aa adding iroadduser
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    73
    logging.error("Database not in right format.")
047e4b4760aa adding iroadduser
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    74
    logging.info("Please edit iro.conf and run iro-install --install")
047e4b4760aa adding iroadduser
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    75
    sys.exit(1)
047e4b4760aa adding iroadduser
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    76
047e4b4760aa adding iroadduser
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    77
047e4b4760aa adding iroadduser
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    78
#test offers
047e4b4760aa adding iroadduser
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    79
with WithSession(engine) as session:
047e4b4760aa adding iroadduser
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    80
        available_offers = [i[0] for i in session.query(Offer.name)]
047e4b4760aa adding iroadduser
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    81
047e4b4760aa adding iroadduser
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    82
error = False
047e4b4760aa adding iroadduser
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    83
for o in args.offers:
047e4b4760aa adding iroadduser
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    84
    if o not in available_offers:
047e4b4760aa adding iroadduser
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    85
        logging.error("Unknown offer: '%s'"%o)
047e4b4760aa adding iroadduser
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    86
	error = True
047e4b4760aa adding iroadduser
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    87
047e4b4760aa adding iroadduser
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    88
if error:
047e4b4760aa adding iroadduser
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    89
    sys.exit(1)
047e4b4760aa adding iroadduser
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    90
047e4b4760aa adding iroadduser
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    91
#create apikey
047e4b4760aa adding iroadduser
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    92
apikey = "".join([random.choice("0123456789abcdef") for i in range(15)])
047e4b4760aa adding iroadduser
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    93
047e4b4760aa adding iroadduser
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    94
#adduser to database
047e4b4760aa adding iroadduser
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    95
with WithSession(engine, False) as session:
047e4b4760aa adding iroadduser
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    96
    u = User(name=args.name, apikey=apikey)
047e4b4760aa adding iroadduser
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    97
    session.add(u)
047e4b4760aa adding iroadduser
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    98
    for i,offer in enumerate(args.offers):
047e4b4760aa adding iroadduser
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    99
        o = session.query(Offer).filter_by(name=offer).first()
047e4b4760aa adding iroadduser
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
   100
        u.rights.append(Userright(o,default=i+1))
047e4b4760aa adding iroadduser
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
   101
    session.commit()
047e4b4760aa adding iroadduser
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
   102
logging.info("created user %s:"% args.name)
047e4b4760aa adding iroadduser
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
   103
logging.info("apikey = %s"% apikey)
047e4b4760aa adding iroadduser
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
   104
logging.info("offers = %s"% ", ".join(args.offers))