Ejemplo n.º 1
0
class Command(db.Model):
    __tablename__ = "Command"
    Id = db.Column(db.Integer, primary_key=True)
    Name = db.Column(db.String)
    Description = db.Column(db.String)
    Help = db.Column(db.String)
    MitreReference = db.Column(db.String)
    OpsecSafe = db.Column(db.Boolean)
    ModuleId = db.Column(db.Integer, db.ForeignKey('Module.Id'))
    AgentTypeId = db.Column(db.Integer, db.ForeignKey('AgentType.Id'))
    Parameters = db.relationship('CommandParameter', backref='Command', lazy=True)
Ejemplo n.º 2
0
class SetupModel(db.Model):
    __tablename__ = 'setup'

    setup_id = db.Column(UUID(as_uuid=True),
                         primary_key=True,
                         default=uuid.uuid4,
                         unique=True,
                         nullable=False)

    training_id = db.Column(UUID(as_uuid=True),
                            db.ForeignKey('training.training_id'),
                            nullable=False)
    bike_id = db.Column(UUID(as_uuid=True),
                        db.ForeignKey('bike.bike_id'),
                        nullable=False)

    operating_hours = db.Column(db.Float, nullable=False)
    weather_current = db.Column(JSON, nullable=True)
    slick_pressure_front = db.Column(db.Float, nullable=True)
    slick_pressure_rear = db.Column(db.Float, nullable=True)
    rain_pressure_front = db.Column(db.Float, nullable=True)
    rain_pressure_rear = db.Column(db.Float, nullable=True)
    setup = db.Column(JSON, nullable=True)
    comment = db.Column(db.Text, nullable=True)

    datetime_created = db.Column(db.DateTime,
                                 nullable=False,
                                 default=db.utcnow)
    datetime_last_modified = db.Column(db.DateTime,
                                       nullable=False,
                                       default=db.utcnow,
                                       onupdate=db.utcnow)
    datetime_display = db.Column(db.DateTime,
                                 nullable=False,
                                 default=db.utcnow)

    bike = db.relationship('BikeModel',
                           backref=db.backref(
                               'setups',
                               order_by='SetupModel.datetime_display.asc()'))
    training = db.relationship(
        'TrainingModel',
        backref=db.backref('setups',
                           order_by='SetupModel.datetime_display.asc()'))

    def __repr__(self):
        return f"Setup[" \
               f"'{self.setup_id}': (" \
               f"'{self.operating_hours}', " \
               f"'{self.comment}', " \
               f"'{self.datetime_display}', " \
               f"training_id: '{self.training_id}', " \
               f"bike_id: '{self.bike_id}'" \
               f")]"
Ejemplo n.º 3
0
class SessionModel(db.Model):
    __tablename__ = 'session'

    session_id = db.Column(UUID(as_uuid=True),
                           primary_key=True,
                           default=uuid.uuid4,
                           unique=True,
                           nullable=False)

    training_id = db.Column(UUID(as_uuid=True),
                            db.ForeignKey('training.training_id'),
                            nullable=False)
    setup_id = db.Column(UUID(as_uuid=True),
                         db.ForeignKey('setup.setup_id'),
                         nullable=True)
    bike_id = db.Column(UUID(as_uuid=True),
                        db.ForeignKey('bike.bike_id'),
                        nullable=True)

    application = db.Column(db.String(50), nullable=True)

    datetime_created = db.Column(db.DateTime,
                                 nullable=False,
                                 default=db.utcnow)
    datetime_last_modified = db.Column(db.DateTime,
                                       nullable=False,
                                       default=db.utcnow,
                                       onupdate=db.utcnow)
    datetime_display = db.Column(db.DateTime,
                                 nullable=False,
                                 default=db.utcnow)

    bike = db.relationship('BikeModel',
                           backref=db.backref(
                               'sessions',
                               order_by='SessionModel.datetime_display.asc()'))
    training = db.relationship(
        'TrainingModel',
        backref=db.backref('sessions',
                           order_by='SessionModel.datetime_display.asc()'))
    setup = db.relationship(
        'SetupModel',
        backref=db.backref('sessions',
                           order_by='SessionModel.datetime_display.asc()'))

    def __repr__(self):
        return f"Session[" \
               f"'{self.session_id}': (" \
               f"'{self.datetime_display}', " \
               f"training_id: '{self.training_id}', " \
               f"bike_id: '{self.bike_id}', " \
               f"setup_id: '{self.setup_id}', " \
               f")]"
Ejemplo n.º 4
0
class AgentTaskUpdate(db.Model):
    __tablename__ = "AgentTaskUpdate"
    Id = db.Column(db.Integer, primary_key=True)
    AgentId = db.Column(db.Integer, db.ForeignKey('Agent.Id'))
    TaskId = db.Column(db.Integer, db.ForeignKey('AgentTask.Id'))
    Message = db.Column(db.String)
    Complete = db.Column(db.Boolean)
    Success = db.Column(db.Boolean)
    Received = db.Column(db.DateTime)
    IOCs = db.relationship("IOC", backref='AgentTaskUpdate', lazy=True)

    def __repr__(self):
        return '<AgentTaskUpdate: %s>' % str(self.Id)
Ejemplo n.º 5
0
class AgentTaskMessage(db.Model):
    __tablename__ = "AgentTaskMessage"
    Id = db.Column(db.Integer, primary_key=True)
    AgentId = db.Column(db.Integer, db.ForeignKey('Agent.Id'))
    AgentTaskId = db.Column(db.Integer, db.ForeignKey('AgentTask.Id'))
    IV = db.Column(db.String)
    HMAC = db.Column(db.String)
    Message = db.Column(db.String)
    Sent = db.Column(db.Boolean)
    Created = db.Column(db.DateTime)

    def __repr__(self):
        return '<TaskMessage: %s>' % str(self.Id)
Ejemplo n.º 6
0
class FactionFile(db.Model):
    __tablename__ = "FactionFile"
    Id = db.Column(db.Integer, primary_key=True)
    Name = db.Column(db.String)
    Hash = db.Column(db.String)
    HashMatch = db.Column(db.Boolean)
    UserId = db.Column(db.Integer, db.ForeignKey('User.Id'))
    AgentId = db.Column(db.Integer, db.ForeignKey('Agent.Id'))
    Created = db.Column(db.DateTime)
    LastDownloaded = db.Column(db.DateTime)
    Visible = db.Column(db.Boolean)

    def __repr__(self):
        return '<FactionFile: %s>' % str(self.Id)
Ejemplo n.º 7
0
class Agent(db.Model):
    __tablename__ = "Agent"
    Id = db.Column(db.Integer, primary_key=True)
    Name = db.Column(db.String)
    StagingId = db.Column(db.String)
    AesPassword = db.Column(db.String)
    Username = db.Column(db.String)
    Hostname = db.Column(db.String)
    PID = db.Column(db.Integer)
    OperatingSystem = db.Column(db.String)
    Admin = db.Column(db.Boolean)
    AgentTypeId = db.Column(db.Integer,
                            db.ForeignKey('AgentType.Id'),
                            nullable=False)
    StagingResponseId = db.Column(db.Integer,
                                  db.ForeignKey('StagingMessage.Id'),
                                  nullable=False)
    PayloadId = db.Column(db.Integer,
                          db.ForeignKey('Payload.Id'),
                          nullable=False)
    TransportId = db.Column(db.Integer,
                            db.ForeignKey('Transport.Id'),
                            nullable=False)
    InternalIP = db.Column(db.String)
    ExternalIP = db.Column(db.String)
    InitialCheckin = db.Column(db.DateTime)
    LastCheckin = db.Column(db.DateTime)
    BeaconInterval = db.Column(db.Integer)
    Jitter = db.Column(db.Float)
    Tasks = db.relationship('AgentTask', backref='Agent', lazy=True)
    ConsoleMessages = db.relationship("ConsoleMessage",
                                      backref='Agent',
                                      lazy=True)
    AvailableTransports = db.relationship('Transport',
                                          secondary=AgentsTransportsXREF,
                                          lazy='subquery',
                                          backref=db.backref('AvailableAgents',
                                                             lazy=True))
    AvailableModules = db.relationship('Module',
                                       secondary=AgentModulesXREF,
                                       lazy='subquery',
                                       backref=db.backref('AvailableAgents',
                                                          lazy=True))
    Visible = db.Column(db.Boolean)

    def __repr__(self):
        if self.Name:
            return '<Agent: %s>' % self.Name
        else:
            return '<Agent: %s>' % str(self.Id)
Ejemplo n.º 8
0
class StagingResponse(db.Model):
    __tablename__ = "StagingResponse"
    Id = db.Column(db.Integer, primary_key=True)
    AgentId = db.Column(db.Integer, db.ForeignKey('Agent.Id'), nullable=False)
    StagingMessageId = db.Column(db.Integer,
                                 db.ForeignKey('StagingMessageId.Id'),
                                 nullable=False)
    IV = db.Column(db.String)
    HMAC = db.Column(db.String)
    Message = db.Column(db.String)
    Sent = db.Column(db.Boolean)

    def __repr__(self):
        return '<StagingResponse: %s>' % str(self.Id)
Ejemplo n.º 9
0
class ConsoleMessage(db.Model):
    __tablename__ = "ConsoleMessage"
    Id = db.Column(db.Integer, primary_key=True)
    AgentId = db.Column(db.Integer, db.ForeignKey('Agent.Id'), nullable=False)
    AgentTaskId = db.Column(db.Integer,
                            db.ForeignKey('AgentTask.Id'),
                            nullable=False)
    UserId = db.Column(db.Integer, db.ForeignKey('User.Id'), nullable=False)
    Type = db.Column(db.String)
    Content = db.Column(db.String)
    Display = db.Column(db.String)
    Received = db.Column(db.DateTime)

    def __repr__(self):
        return '<ConsoleCommand: %s>' % str(self.Id)
Ejemplo n.º 10
0
Archivo: ioc.py Proyecto: s3b4stian/API
class IOC(db.Model):
    __tablename__ = "IOC"
    Id = db.Column(db.Integer, primary_key=True)
    Description = db.Column(db.String)
    Type = db.Column(db.String)
    Identifier = db.Column(db.String)
    Action = db.Column(db.String)
    Hash = db.Column(db.String)
    UserId = db.Column(db.Integer, db.ForeignKey('User.Id'))
    AgentTaskUpdateId = db.Column(db.Integer,
                                  db.ForeignKey('AgentTaskUpdate.Id'))
    Timestamp = db.Column(db.DateTime)

    def __repr__(self):
        return '<IOC: %s>' % str(self.Id)
Ejemplo n.º 11
0
class ApiKey(db.Model):
    __tablename__ = "ApiKey"
    Id = db.Column(db.Integer, primary_key=True)
    UserId = db.Column(db.Integer, db.ForeignKey('User.Id'))
    OwnerId = db.Column(db.Integer)
    TransportId = db.Column(db.Integer, db.ForeignKey('Transport.Id'))
    Name = db.Column(db.String, unique=True)
    Type = db.Column(db.String)
    Key = db.Column(db.LargeBinary)
    Created = db.Column(db.DateTime)
    LastUsed = db.Column(db.DateTime)
    Enabled = db.Column(db.Boolean)
    Visible = db.Column(db.Boolean)

    def __repr__(self):
        return '<ApiKey: %s>' % str(self.Id)
Ejemplo n.º 12
0
class SparepartitemModel(db.Model):
    __tablename__ = 'sparepartitem'

    sparepartitem_id = db.Column(UUID(as_uuid=True),
                                 primary_key=True,
                                 default=uuid.uuid4,
                                 unique=True,
                                 nullable=False)
    sparepart_id = db.Column(UUID(as_uuid=True),
                             db.ForeignKey('sparepart.sparepart_id'),
                             nullable=False)

    condition = db.Column(db.String, nullable=False)
    description = db.Column(db.String, nullable=False)
    stock = db.Column(db.Integer, nullable=False)

    datetime_created = db.Column(db.DateTime,
                                 nullable=False,
                                 default=db.utcnow)
    datetime_last_modified = db.Column(db.DateTime,
                                       nullable=False,
                                       default=db.utcnow,
                                       onupdate=db.utcnow)
    datetime_display = db.Column(db.DateTime,
                                 nullable=False,
                                 default=db.utcnow)

    def __repr__(self):
        return f"Sparepartitem[" \
               f"'{self.sparepartitem_id}': (" \
               f"'{self.condition}', " \
               f"'{self.description}', " \
               f"'{self.datetime_display}'" \
               f")]"
Ejemplo n.º 13
0
class Module(db.Model):
    __tablename__ = "Module"
    Id = db.Column(db.Integer, primary_key=True)
    Name = db.Column(db.String)
    Description = db.Column(db.String)
    BuildCommand = db.Column(db.String)
    BuildLocation = db.Column(db.String)
    LanguageId = db.Column(db.Integer, db.ForeignKey('Language.Id'))
Ejemplo n.º 14
0
class AgentTask(db.Model):
    __tablename__ = "AgentTask"
    Id = db.Column(db.Integer, primary_key=True)
    Name = db.Column(db.String)
    AgentId = db.Column(db.Integer, db.ForeignKey('Agent.Id'), nullable=False)
    ConsoleMessageId = db.Column(db.Integer,
                                 db.ForeignKey('ConsoleMessage.Id'),
                                 nullable=True)
    AgentTaskUpdates = db.relationship('AgentTaskUpdate',
                                       backref='AgentTask',
                                       lazy=True)
    Action = db.Column(db.String)
    Command = db.Column(db.String)
    Created = db.Column(db.DateTime)

    def __repr__(self):
        return '<Task: %s>' % str(self.Id)
Ejemplo n.º 15
0
class HistoryModel(db.Model):
    __tablename__ = 'history'

    history_id = db.Column(UUID(as_uuid=True),
                           primary_key=True,
                           default=uuid.uuid4,
                           unique=True,
                           nullable=False)

    maintenance_id = db.Column(UUID(as_uuid=True),
                               db.ForeignKey('maintenance.maintenance_id'),
                               nullable=False)
    bike_id = db.Column(UUID(as_uuid=True),
                        db.ForeignKey('bike.bike_id'),
                        nullable=False)

    operating_hours = db.Column(db.Float, nullable=False)
    comment = db.Column(db.Text, nullable=True)
    tags = db.Column(ARRAY(db.String), nullable=True)

    datetime_created = db.Column(db.DateTime,
                                 nullable=False,
                                 default=db.utcnow)
    datetime_last_modified = db.Column(db.DateTime,
                                       nullable=False,
                                       default=db.utcnow,
                                       onupdate=db.utcnow)
    datetime_display = db.Column(db.DateTime,
                                 nullable=False,
                                 default=db.utcnow)

    bike = db.relationship('BikeModel', backref=db.backref('history'))
    maintenance = db.relationship(
        'MaintenanceModel',
        backref=db.backref('history',
                           order_by='HistoryModel.operating_hours.desc()'))

    def __repr__(self):
        return f"History[" \
               f"'{self.history_id}': (" \
               f"'{self.operating_hours}', " \
               f"'{self.comment}', " \
               f"'{self.datetime_display}', " \
               f"mtn_id: '{self.maintenance_id}'," \
               f"bike_id: '{self.bike_id}'" \
               f")]"
Ejemplo n.º 16
0
class CommandParameter(db.Model):
    __tablename__ = "CommandParameter"
    Id = db.Column(db.Integer, primary_key=True)
    Name = db.Column(db.String)
    Help = db.Column(db.String)
    Required = db.Column(db.Boolean)
    Position = db.Column(db.Integer)
    Values = db.Column(db.String)
    CommandId = db.Column(db.Integer, db.ForeignKey('Command.Id'))
Ejemplo n.º 17
0
class AgentCheckin(db.Model):
    __tablename__ = "AgentCheckin"
    Id = db.Column(db.Integer, primary_key=True)
    AgentId = db.Column(db.Integer, db.ForeignKey('Agent.Id'))
    IV = db.Column(db.String)
    HMAC = db.Column(db.String)
    Message = db.Column(db.String)
    Received = db.Column(db.DateTime)

    def __repr__(self):
        return '<AgentCheckin: %s>' % str(self.Id)
Ejemplo n.º 18
0
class StagingMessage(db.Model):
    __tablename__ = "StagingMessage"
    Id = db.Column(db.Integer, primary_key=True)
    AgentName = db.Column(db.String)
    SourceIp = db.Column(db.String)
    PayloadName = db.Column(db.String)
    PayloadId = db.Column(db.Integer,
                          db.ForeignKey('Payload.Id'),
                          nullable=False)
    TransportId = db.Column(db.Integer,
                            db.ForeignKey('Transport.Id'),
                            nullable=False)
    StagingId = db.Column(db.String)
    IV = db.Column(db.String)
    HMAC = db.Column(db.String)
    Message = db.Column(db.String)
    Received = db.Column(db.DateTime)

    def __repr__(self):
        return '<StagingMessage: %s>' % str(self.Id)
Ejemplo n.º 19
0
class TireModel(db.Model):
    __tablename__ = 'tire'

    tire_id = db.Column(UUID(as_uuid=True),
                        primary_key=True,
                        default=uuid.uuid4,
                        unique=True,
                        nullable=False)

    bike_id = db.Column(UUID(as_uuid=True),
                        db.ForeignKey('bike.bike_id'),
                        nullable=False)

    active = db.Column(db.Boolean, nullable=True, default=False)
    rim = db.Column(db.String(15), nullable=True)

    category = db.Column(db.String(5), nullable=False)
    manufacturer = db.Column(db.String(15), nullable=False)
    name = db.Column(db.String(25), nullable=True)
    compound = db.Column(db.String(10), nullable=True)
    axis = db.Column(db.String(5), nullable=False)
    dimension = db.Column(db.String(15), nullable=True)
    dot = db.Column(db.String(4), nullable=False)

    condition = db.Column(JSON,
                          nullable=False,
                          default={
                              "left_outer": 1.0,
                              "left_middle": 1.0,
                              "center": 1.0,
                              "right_middle": 1.0,
                              "right_outer": 1.0
                          })
    operating_hours = db.Column(db.Float, nullable=False)

    comment = db.Column(db.Text, nullable=True)

    datetime_created = db.Column(db.DateTime,
                                 nullable=False,
                                 default=db.utcnow)
    datetime_last_modified = db.Column(db.DateTime,
                                       nullable=False,
                                       default=db.utcnow,
                                       onupdate=db.utcnow)

    def __repr__(self):
        return f"Maintenance[" \
               f"'{self.maintenance_id}': (" \
               f"'{self.category}', " \
               f"'{self.name}', " \
               f"'{self.interval_amount}', " \
               f"'{self.interval_unit}', " \
               f"'{self.interval_type}'" \
               f")]"
class Session(db.Model):
    __tablename__ = 'session'

    id = db.Column(UUIDType(), primary_key=True)
    uid = db.Column(UUIDType(), db.ForeignKey('user.id'), nullable=False)
    user = db.relationship('User', backref=db.backref('sessions', lazy=True))
    expire = db.Column(db.DateTime(), nullable=False)

    @staticmethod
    def new_session(username, expire=None) -> 'Session':
        if expire == None:
            expire = datetime.now() + timedelta(hours=3)
        if type(expire) in (int, float):
            expire = datetime.fromtimestamp(expire)

        user = User.get_by_username(username)
        return Session(
            id=uuid4(),
            user=user,
            expire=expire,
        )

    @staticmethod
    def get_by_id(id) -> 'Session':
        if type(id) != UUID:
            try:
                id = UUID(id)
            except:
                raise AttributeError("Invalid UUID")

        query = Session.query.filter_by(id=id)

        if query.count() == 0:
            raise ValueError(f"Session {str(id)} not found.")

        session = query.first()

        if session.expired():
            db.session.delete(session)
            db.session.commit()
            raise ValueError(f"Session {str(id)} not found.")

        return session

    def json(self) -> dict:
        return {
            "id": str(self.id),
            "user": self.user.json(),
            "expire": int(self.expire.timestamp()),
        }

    def expired(self) -> bool:
        return self.expire < datetime.now()
Ejemplo n.º 21
0
class AgentTypeOperatingSystem(db.Model):
    __tablename__ = "AgentTypeOperatingSystem"
    Id = db.Column(db.Integer, primary_key=True)
    Name = db.Column(db.String)
    AgentTypeId = db.Column(db.Integer, db.ForeignKey('AgentType.Id'), nullable=False)
    Payloads = db.relationship('Payload', backref='AgentTypeOperatingSystem', lazy=True)

    def __repr__(self):
        if self.Name:
            return '<AgentTypeOperatingSystem: %s>' % self.Name
        else:
            return '<AgentTypeOperatingSystem: %s>' % str(self.Id)
Ejemplo n.º 22
0
class Payload(db.Model):
    __tablename__ = "Payload"
    Id = db.Column(db.Integer, primary_key=True)
    Name = db.Column(db.String, unique=True)
    Description = db.Column(db.String)
    Key = db.Column(db.String)

    Built = db.Column(db.Boolean)
    BuildToken = db.Column(db.String)
    Filename = db.Column(db.String)

    AgentTypeId = db.Column(db.Integer,
                            db.ForeignKey('AgentType.Id'),
                            nullable=False)
    AgentTypeArchitectureId = db.Column(
        db.Integer, db.ForeignKey('AgentTypeArchitecture.Id'), nullable=False)
    AgentTypeConfigurationId = db.Column(
        db.Integer, db.ForeignKey('AgentTypeConfiguration.Id'), nullable=False)
    AgentTypeOperatingSystemId = db.Column(
        db.Integer,
        db.ForeignKey('AgentTypeOperatingSystem.Id'),
        nullable=False)
    AgentTypeVersionId = db.Column(db.Integer,
                                   db.ForeignKey('AgentTypeVersion.Id'),
                                   nullable=False)
    AgentTypeFormatId = db.Column(db.Integer,
                                  db.ForeignKey('AgentTypeFormat.Id'),
                                  nullable=False)
    AgentTransportTypeId = db.Column(db.Integer,
                                     db.ForeignKey('AgentTransportType.Id'),
                                     nullable=False)
    TransportId = db.Column(db.Integer,
                            db.ForeignKey('Transport.Id'),
                            nullable=False)

    BeaconInterval = db.Column(db.Integer)
    Jitter = db.Column(db.Float)
    Created = db.Column(db.DateTime)
    LastDownloaded = db.Column(db.DateTime)
    ExpirationDate = db.Column(db.DateTime)
    Enabled = db.Column(db.Boolean)

    Agents = db.relationship('Agent', backref='Payload', lazy=True)
    StagingMessages = db.relationship("StagingMessage",
                                      backref='StagingConfig',
                                      lazy=True)
    Visible = db.Column(db.Boolean)

    def __repr__(self):
        return '<Payload: %s>' % str(self.Id)
Ejemplo n.º 23
0
class AgentTransportType(db.Model):
    __tablename__ = "AgentTransportType"
    Id = db.Column(db.Integer, primary_key=True)
    Name = db.Column(db.String)
    TransportTypeGuid = db.Column(db.String)
    BuildCommand = db.Column(db.String)
    BuildLocation = db.Column(db.String)
    AgentTypeId = db.Column(db.Integer,
                            db.ForeignKey('AgentType.Id'),
                            nullable=False)
    Payloads = db.relationship('Payload',
                               backref='AgentTransportType',
                               lazy=True)

    def __repr__(self):
        return '<AgentType: %s>' % str(self.Id)
Ejemplo n.º 24
0
class LaptimeModel(db.Model):
    __tablename__ = 'laptime'

    lap_id = db.Column(UUID(as_uuid=True),
                       primary_key=True,
                       default=uuid.uuid4,
                       unique=True,
                       nullable=False)

    session_id = db.Column(UUID(as_uuid=True),
                           db.ForeignKey('session.session_id'),
                           nullable=False)

    lap_no = db.Column(db.Integer, nullable=False)
    valid = db.Column(db.Boolean, nullable=False, default=True)
    track_layout = db.Column(db.String, nullable=False, default="A")
    laptime_seconds = db.Column(db.Float, nullable=False)
    sectors = db.Column(JSON, nullable=False)

    datetime_created = db.Column(db.DateTime,
                                 nullable=False,
                                 default=db.utcnow)
    datetime_last_modified = db.Column(db.DateTime,
                                       nullable=False,
                                       default=db.utcnow,
                                       onupdate=db.utcnow)
    datetime_display = db.Column(db.DateTime,
                                 nullable=False,
                                 default=db.utcnow)

    session = db.relationship(
        'SessionModel',
        backref=db.backref('laptimes',
                           order_by='LaptimeModel.datetime_display.asc()'))

    def __repr__(self):
        return f"Lap time[" \
               f"'{self.lap_id}': (" \
               f"'{self.datetime_display}', " \
               f"training_id: '{self.training_id}', " \
               f"bike_id: '{self.bike_id}', " \
               f"setup_id: '{self.setup_id}', " \
               f")]"
Ejemplo n.º 25
0
class Transport(db.Model):
    __tablename__ = "Transport"
    Id = db.Column(db.Integer, primary_key=True)
    Name = db.Column(db.String)
    TransportType = db.Column(db.String)
    Guid = db.Column(db.String)
    Created = db.Column(db.DateTime)
    LastCheckin = db.Column(db.DateTime)
    Configuration = db.Column(db.String)
    ApiKeyId = db.Column(db.Integer,
                         db.ForeignKey('ApiKey.Id'),
                         nullable=False)
    Enabled = db.Column(db.Boolean)
    Visible = db.Column(db.Boolean)
    Agents = db.relationship('Agent', backref='Transport', lazy=True)
    Payloads = db.relationship('Payload', backref='Transport', lazy=True)

    def __repr__(self):
        return '<Transport: %s>' % str(self.Id)
Ejemplo n.º 26
0
class MaintenanceModel(db.Model):
    __tablename__ = 'maintenance'

    maintenance_id = db.Column(UUID(as_uuid=True),
                               primary_key=True,
                               default=uuid.uuid4,
                               unique=True,
                               nullable=False)

    bike_id = db.Column(UUID(as_uuid=True),
                        db.ForeignKey('bike.bike_id'),
                        nullable=False)

    category = db.Column(db.String(20), nullable=False)
    name = db.Column(db.String(100), unique=True, nullable=False)
    interval_type = db.Column(db.String(25), nullable=False)
    interval_amount = db.Column(db.Float, nullable=True)
    interval_unit = db.Column(db.String(25), nullable=True)
    tags_default = db.Column(ARRAY(db.String), nullable=True)

    datetime_created = db.Column(db.DateTime,
                                 nullable=False,
                                 default=db.utcnow)
    datetime_last_modified = db.Column(db.DateTime,
                                       nullable=False,
                                       default=db.utcnow,
                                       onupdate=db.utcnow)

    def __repr__(self):
        return f"Maintenance[" \
               f"'{self.maintenance_id}': (" \
               f"'{self.category}', " \
               f"'{self.name}', " \
               f"'{self.interval_amount}', " \
               f"'{self.interval_unit}', " \
               f"'{self.interval_type}'" \
               f")]"
Ejemplo n.º 27
0
from backend.database import db
from models.transport import Transport
from models.module import Module
from models.agent_type import AgentType
from models.agent_task import AgentTask

AgentsTransportsXREF = db.Table(
    'AgentsTransportsXREF',
    db.Column('AgentId',
              db.Integer,
              db.ForeignKey('Agent.Id'),
              primary_key=True),
    db.Column('TransportId',
              db.Integer,
              db.ForeignKey('Transport.Id'),
              primary_key=True))

AgentModulesXREF = db.Table(
    'AgentModulesXREF',
    db.Column('AgentId',
              db.Integer,
              db.ForeignKey('Agent.Id'),
              primary_key=True),
    db.Column('ModuleId',
              db.Integer,
              db.ForeignKey('Module.Id'),
              primary_key=True))


class Agent(db.Model):
    __tablename__ = "Agent"
Ejemplo n.º 28
0
class User(db.Model):
    __tablename__ = "User"
    Id = db.Column(db.Integer, primary_key=True)
    Username = db.Column(db.String, unique=True)
    Password = db.Column(db.LargeBinary)
    RoleId = db.Column(db.Integer, db.ForeignKey('UserRole.Id'), nullable=False)
    ApiKeys = db.relationship("ApiKey", backref='User', lazy=True)
    Authenticated = db.Column(db.Boolean, default=False)
    ConsoleMessages = db.relationship("ConsoleMessage", backref='User', lazy=True)
    Files = db.relationship("FactionFile", backref='User', lazy=True)
    Created = db.Column(db.DateTime)
    LastLogin = db.Column(db.DateTime)
    Enabled = db.Column(db.Boolean)
    Visible = db.Column(db.Boolean)


    def is_active(self):
        """True, as all users are active."""
        return True

    def get_id(self):
        """Return the email address to satisfy Flask-Login's requirements."""
        return self.Username

    def is_authenticated(self):
        """Return True if the user is authenticated."""
        return self.Authenticated

    def is_anonymous(self):
        """False, as anonymous users aren't supported."""
        return False

    def change_password(self, current_password, new_password):
        log("change_password", "Got password change request")
        if bcrypt.checkpw(current_password.encode('utf-8'), self.Password) and self.Enabled:
            self.Password = bcrypt.hashpw(new_password.encode('utf-8'), bcrypt.gensalt())
            db.session.add(self)
            db.session.commit()
            log("change_password", "Password changed")
            return dict({
                "Success": True,
                "Message": 'Changed password for user: {0}'.format(self.Username)
            })
        log("change_password", "Current password incorrect")
        return {
            'Success':False,
            'Message':'Invalid username or password.'
        }

    def get_api_keys(self):
        api_keys = self.ApiKeys
        log("get_api_keys", "Got api keys: {0}".format(str(api_keys)))
        results = []
        for api_key in api_keys:
            result = dict()
            result['Id'] = api_key.Id
            result['Name'] = api_key.Name
            result['Created'] = None
            result['LastUsed'] = None
            result['Type'] = api_key.Type
            if api_key.Created:
                result['Created'] = api_key.Created.isoformat()
            if api_key.LastUsed:
                result['LastUsed'] = api_key.LastUsed.isoformat()
            results.append(result)
        return {
            'Success':True,
            'Results':results
        }

    def delete_api_key(self, api_key_id):
        api_keys = self.ApiKeys
        for api_key in api_keys:
            if api_key.Id == api_key_id:
                db.session.delete(api_key)
                db.session.commit()
                return {
                    'Success':True,
                    'Message':"Api Key {0} deleted".format(api_key.Name)
                }
        return {
            'Success':False,
            'Message':"Api Key ID: {0} not found".format(api_key_id)
            }