Beispiel #1
0
class User(UserMixin, db.Model):
    id = db.Column(db.Integer, primary_key=True)
    username = db.Column(db.String(64), index=True, unique=True)
    email = db.Column(db.String(120), index=True, unique=True)
    password_hash = db.Column(db.String(128))
    posts = db.relationship('Post', backref='author', lazy='dynamic')
    about_me = db.Column(db.String(140))

    def __repr__(self):
        """
		Returns the User as an account on the application.
		"""
        return '<User {}>'.format(self.username)

    def set_password(self, password):
        """
		Generates a hash to track the pasword for 'self' aka the user.
		"""
        self.password_hash = generate_password_hash(password)

    def check_password(self, password):
        """
		Checks the hash corresponding to the pasword for 'self' aka the user.
		"""
        return check_password_hash(self.password_hash, password)
Beispiel #2
0
class User(db.Model):
    """ Build in function to modify

        Returns:
            print variable in string

        Changelog:
            4/19 Ali
            
            5/3 Dylan: Added events relationship
            5/10 Dylan: Added salt
        """
    id = db.Column(db.Integer, primary_key=True)
    username = db.Column(db.String(64), index=True, unique=True)
    email = db.Column(db.String(128), index=True, unique=True)
    salt = db.Column(db.String(32))
    password_hash = db.Column(db.String(256), default = 'fatal-error')
    start_time = db.Column(db.Time, default=datetime.time(9, 0))
    end_time = db.Column(db.Time, default=datetime.time(22, 0))
    meeting_length = db.Column(db.Integer, default=30)


    events = db.relationship('Event', backref='creator', lazy='dynamic')
    
    def __repr__(self):
        return '<User {}>'.format(self.username)
Beispiel #3
0
class Users(db.Model, UserMixin):

    # __tablename__ = 'User'

    id = db.Column(db.Integer, primary_key=True)
    login = db.Column(db.String(120), nullable=False, unique=True)
    password = db.Column(db.String(255), nullable=False)
class Availability(UserMixin, db.Model):
    """
       Creates variable for user availability. 
    """
    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String(64), unique=True)
    time_Range = db.Column(db.String(128))
    meeting_Length = db.Column(db.String(128))
class User(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    username = db.Column(db.String(64), index=True, unique=True)
    email = db.Column(db.String(128), index=True, unique=True)
    password_hash = db.Column(db.String(128))

    def set_password(self, password):
        self.password_hash = generate_password_hash(password)
Beispiel #6
0
class User(db.Model, UserMixin):
    id = db.Column(db.Integer, primary_key=True)
    username = db.Column(db.String(20), unique=True, nullable=False)
    email = db.Column(db.String(120), unique=True, nullable=False)
    password = db.Column(db.String(60), nullable=False)
    posts = db.relationship('Post', backref='author', lazy=True)

    def __repr__(self):
        return f"User('{self.username}')"
class Message(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    userMessage = db.Column(db.String(512), index=True)
    username = db.Column(db.String(64), index=True)
    user_id = db.Column(db.Integer, db.ForeignKey('user.id'))
    userFrom = db.Column(db.String(64), index=True)

    def __repr__(self):
        return '<User {}>'.format(self.username)
Beispiel #8
0
class listOfMeetings(UserMixin, db.Model):
    id = db.Column(db.Integer, primary_key=True)
    meetingDate = db.Column(db.String)
    meetingTime = db.Column(db.String)
    descriptionOfMeeting = db.Column(db.String(150))
    participants = db.Column(db.String(64))
    user_id = db.Column(db.Integer, db.ForeignKey('user.id'))

    def __repr__(self):
        return '<Appointment with{}, on {} from {}>'.format(self.participants, self.meetingDate, self.meetingTime)
class User(UserMixin, db.Model):
    """
        Creates the ID, username, email, and password_hash variables for each user. 
    """
    id = db.Column(db.Integer, primary_key=True)
    username = db.Column(db.String(64), index=True, unique=True)
    email = db.Column(db.String(128), index=True, unique=True)
    password_hash = db.Column(db.String(128))

    def set_password(self, password):
        self.password_hash = generate_password_hash(password, method='sha256')
Beispiel #10
0
class Appointments(db.Model):
    """
       Creates the variables for user appointments. 
    """
    id = db.Column(db.Integer, primary_key=True)
    creator = db.Column(db.String(64))
    name = db.Column(db.String(64))
    email = db.Column(db.String(64))
    time = db.Column(db.String(16))

    def __repr__(self):
        return '<Appointments: {}>'.format(self.body)
class User(UserMixin, db.Model):
    id = db.Column(db.Integer, primary_key=True)
    username = db.Column(db.String(64), index=True, unique=True)
    family = db.Column(db.String(64), nullable=False)
    password_hash = db.Column(db.String(128))
    messages = db.relationship("Message", uselist=False, backref="user")

    def __repr__(self):
        return '<User {}>'.format(self.username)

    def set_password(self, password):
        self.password_hash = generate_password_hash(password)

    def check_password(self, password):
        return check_password_hash(self.password_hash, password)
Beispiel #12
0
class Meetings(UserMixin, db.Model):
	id = db.Column(db.Integer, primary_key=True)
	length = db.Column(db.String(7), index=True, default=datetime.utcnow)
	user_id = db.Column(db.Integer, db.ForeignKey('user.id'))

	def __repr__(self):
		return '<Meetings length {}>'.format(self.length)
Beispiel #13
0
class UserCache(db.Model):
    """
    DB Model that holds member IDs in cached. Relationship with User (1) to many
    """
    __tablename__ = "usercache"
    cache_id = db.Column(db.String(16), primary_key=True)
    active = db.Column(db.Boolean, default=False)
    friendly_id = db.Column(db.Text)
    # We want a backref here so that any updates to user as well as UserCache are reflected on both ends
    user_id = db.Column(db.Integer, db.ForeignKey('users.id'))
    profiles = db.relationship('LinkedInRecord', secondary=Cache_Records, lazy=True,
                               backref=db.backref('caches', lazy=True))
    created = db.Column(db.DateTime, default=datetime.now())

    def __init__(self):
        self.cache_id = self.generate_string

    @property
    def generate_string(self):
        """

        :return: Random ascii letters (string)
        """
        l = ascii_letters
        holder = []
        for i in range(16):
            holder.append(l[random.randrange(0, len(l))])
        return ''.join(holder)
Beispiel #14
0
class Tag(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    text = db.Column(db.String(32), nullable=False)

    message_id = db.Column(db.Integer,
                           db.ForeignKey('message.id'),
                           nullable=False)
    message = db.relationship('Message', backref=db.backref('tags', lazy=True))
Beispiel #15
0
class Post(UserMixin, db.Model):
    id = db.Column(db.Integer, primary_key=True)
    body = db.Column(db.String(256))
    timestamp = db.Column(db.DateTime, index=True, default=datetime.utcnow)
    user_id = db.Column(db.Integer, db.ForeignKey('user.id'))

    def __repr__(self):
        return '<Posts {}>'.format(self.body)
Beispiel #16
0
class Post(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    title = db.Column(db.String(100), nullable=False)
    date_posted = db.Column(db.DateTime,
                            nullable=False,
                            default=datetime.utcnow)
    content = db.Column(db.Text, nullable=False)
    user_id = db.Column(db.Integer, db.ForeignKey('user.id'), nullable=False)

    def __repr__(self):
        return f"Post('{self.title}', '{self.date_posted}')"
Beispiel #17
0
class Message(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    text = db.Column(db.String(1024), nullable=False)
    create_date = db.Column(db.DateTime,
                            nullable=False,
                            default=datetime.utcnow)

    # date = db.Column(db.DateTime, onupdate=datetime.utcnow)

    def __init__(self, text, tags):  #, date):
        self.text = text.strip()
        self.tags = [Tag(text=tag.strip()) for tag in tags.split(',')]
Beispiel #18
0
class Event(db.Model):
    '''
    Event database
    @id unique id required for database
    @user_id user's id that the event is for
    @datetime date and time of the meeting
    @guest_name name input by the person requesting the meeting
    @description description of the meeting

    Changelog:
        5/3 Dylan: Initial Implementation
    '''

    id = db.Column(db.Integer, primary_key=True)
    user_id = db.Column(db.Integer, db.ForeignKey('user.id'), index=True)
    datetime = db.Column(db.DateTime(), index=True)
    guest_name = db.Column(db.String(64), index=True)
    description = db.Column(db.String(256), default = '')

    def __repr(self):
        return f'<Datetime: {datetime}, Guest: {guest_name}>'
Beispiel #19
0
class User(db.Model, UserMixin):
    id = db.Column(db.Integer, primary_key=True)
    username = db.Column(db.String(20), unique=True, nullable=False)
    email = db.Column(db.String(120), unique=True, nullable=False)
    password = db.Column(db.String(60), nullable=False)
    posts = db.relationship('Post', backref='author', lazy=True)

    def get_reset_token(self, expires_sec=1800):
        s = Serializer(app.config['SECRET_KEY'], expires_sec)
        return s.dumps({'user_id': self.id}).decode('utf-8')

    @staticmethod
    def verify_reset_token(token):
        s = Serializer(app.config['SECRET_KEY'])
        try:
            user_id = s.loads(token)['user_id']
        except:
            return None
        return User.query.get(user_id)

    def __repr__(self):
        return f"User('{self.username}', '{self.email}', '{self.image_file}')"
Beispiel #20
0
class Food(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String(100), nullable=False)
    date = db.Column(db.Date, nullable=False)
    quantity = db.Column(db.Integer, nullable=False)
    calories = db.Column(db.Integer, nullable=False)
    carbon = protein = db.Column(db.Integer, nullable=True)
    protein = db.Column(db.Integer, nullable=True)
    fat = db.Column(db.Integer, nullable=True)
    user_id = db.Column(db.Integer, db.ForeignKey('user.id'), nullable=False)

    def __repr__(self):
        return f"Food('{self.name}', '{self.date}','{self.calories}','{self.quantity}')"
Beispiel #21
0
class Post(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    body = db.Column(db.String(256))
    timestamp = db.Column(db.DateTime, index=True, default=datetime.utcnow)
    user_id = db.Column(db.Integer, db.ForeignKey('user.id'))

    def __repr__(self):
        ''' This function formats post.

            Returns:
                Will return a format.
        '''
        return '<Posts {}>'.format(self.body)
Beispiel #22
0
class User(UserMixin, db.Model):
    '''This class models a user of this application and will hold a users Username and password hash'''
    id = db.Column(db.Integer, primary_key=True)
    username = db.Column(db.String(64), index=True, unique=True)
    email = db.Column(db.String(128), index=True, unique=True)
    sendEmailConfirm = db.Column(db.String(128))
    password_hash = db.Column(db.String(128))
    availability = db.relationship("Availability", uselist=False, backref="user")
    meetings = db.relationship("Meetings", uselist=False, backref="user")
    appointments = db.relationship("listOfMeetings", uselist=False, backref="user")
    usercal = db.relationship("CustomHTMLCalendar", uselist=False, backref="user")
    posts = db.relationship('Post', backref="user")

    def __repr__(self):
        return '<User {}>'.format(self.username)

    def print_username(self):
        return '{}'.format(self.username)

    def set_password(self, password):
        ''' This functions generates a hash based on a users account password.

            Args:
                 password (String) : The password that a user chooses to associate with their account.
        '''
        self.password_hash = generate_password_hash(password)

    def check_password(self, password):
        ''' This function checks if a input password corresponds with the hash associated with the account.

            Args:
                 password (String) : The password that will be checked.

            Returns:
                    True if the password corresponds with the hash associated with the users account.
        '''
        return check_password_hash(self.password_hash, password)
Beispiel #23
0
class Event(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    username = db.Column(db.String(64), index=True)
    eventDate = db.Column(db.String(32), index=True)
    eventTime = db.Column(db.String(32), index=True)
    militaryTime = db.Column(db.String(32), index=True)
    guestname = db.Column(db.String(64), index=True)
    description = db.Column(db.String(128), index=True)

    def __repr__(self):
        ''' This function will format username
        
            Returns:
                Will return a username.
        '''
        return '<User {}>'.format(self.username)
Beispiel #24
0
class User(UserMixin, db.Model):
    id = db.Column(db.Integer, primary_key=True)
    username = db.Column(db.String(64), index=True, unique=True)
    email = db.Column(db.String(128), index=True, unique=True)
    password_hash = db.Column(db.String(128))
    emailConfirmation = db.Column(db.String(2), index=True)
    meetingLength = db.Column(db.String(32), index=True)
    availabilityStart = db.Column(db.String(32), index=True)
    availabilityEnd = db.Column(db.String(32), index=True)

    posts = db.relationship('Post', backref='author', lazy='dynamic')

    def __repr__(self):
        ''' This function will format username
        
            Returns:
                Will return a username.
        '''
        return '<User {}>'.format(self.username)

    def set_password(self, password):
        ''' This function will generate a password hash.

            Args:
                password (string) : The user's password
        '''
        self.password_hash = generate_password_hash(password)

    def check_password(self, password):
        ''' This function will check if password is valid
        
            Args:
                password (string) : The user's password

            Returns:
                Will return true or false depending on if the password is valid.
        '''
        return check_password_hash(self.password_hash, password)
Beispiel #25
0
class User(UserMixin, db.Model):
    """Contain the user details."""

    id = db.Column(db.Integer, primary_key=True)
    username = db.Column(db.String(256), unique=True)
Beispiel #26
0
class OAuth(db.Model, OAuthConsumerMixin):
    """Contain the associated Oauth."""

    provider_user_id = db.Column(db.String(256), unique=True)
    user_id = db.Column(db.Integer, db.ForeignKey(User.id))
    user = db.relationship(User)
Beispiel #27
0
class LinkedInRecord(db.Model):
    """
    DB Model for Profile Data
    """
    __tablename__ = 'profiles'
    member_id = db.Column(db.Integer, primary_key=True)
    first_name = db.Column(db.String(128))
    last_name = db.Column(db.String(128))
    summary = db.Column(db.Text)

    metro = db.Column(db.Text)
    postal_code = db.Column(db.Text)
    country_code = db.Column(db.Text)
    language = db.Column(db.Text)
    industry = db.Column(db.Text)
    skills = db.Column(db.Text)

    companyName_0 = db.Column(db.Text)
    companyUrl_0 = db.Column(db.Text)
    title_0 = db.Column(db.Text)
    start_date_0 = db.Column(db.Date)
    end_date_0 = db.Column(db.Date)
    summary_0 = db.Column(db.Text)

    companyName_1 = db.Column(db.Text)
    companyUrl_1 = db.Column(db.Text)
    title_1 = db.Column(db.Text)
    start_date_1 = db.Column(db.Date)
    end_date_1 = db.Column(db.Date)
    summary_1 = db.Column(db.Text)

    companyName_2 = db.Column(db.Text)
    companyUrl_2 = db.Column(db.Text)
    title_2 = db.Column(db.Text)
    start_date_2 = db.Column(db.Date)
    end_date_2 = db.Column(db.Date)
    summary_2 = db.Column(db.Text)

    created = db.Column(db.Date, default=date.today())
    updated = db.Column(db.Date, default=None)

    education_school = db.Column(db.Text)
    education_start = db.Column(db.Date)
    education_end = db.Column(db.Date)
    education_degree = db.Column(db.Text)
    education_study_field = db.Column(db.Text)

    first_graduation_date = db.Column(db.Date)

    public_url = db.Column(db.Text)
    recruiter_url = db.Column(db.Text)

    isCompanyFollower = db.Column(db.Boolean)
    careerInterests = db.Column(db.Boolean)

    contacts = db.relationship("Contact")

    def __init__(self, LinkedInProfile):
        """
        :param LinkedInProfile:
        """
        for k, v in LinkedInProfile.__dict__.items():
            if k[0] == '_':  # Include or exclude properties based on _prop naming convention
                continue
            if v:
                pass  # Avoids overwriting data with None
            else:
                continue
            try:
                setattr(self, k, v)
            except AttributeError:
                self._set_entry(k, v)

    def _set_entry(self, k, v):
        # Handles if Table object is intended to be internal
        k_ = "_" + k
        setattr(self, k_, v)
Beispiel #28
0
class User(UserMixin, db.Model):

    __tablename__ = "users"

    id = db.Column(db.Integer, primary_key=True)
    user_type = db.Column(db.Text, default='normal')
    username = db.Column(db.String(128))
    password_hash = db.Column(db.Text)
    api_key = db.Column(db.Text)
    current_session_user = db.Column(db.Integer, default=0)
    caches = db.relationship('UserCache', backref='user', lazy='dynamic')
    records = db.relationship('LinkedInRecord', secondary=User_Records, lazy=True,
                              backref=db.backref('users', lazy=True))
    activities = db.relationship('UserActivity', backref='user', lazy='dynamic')
    allowance = db.Column(db.Integer, default=450)  # New records allowed per day
    # Generating a random key to return to Extension after login success

    @staticmethod
    def verify_auth_token(token):
        s = Serializer(app_run.config['SECRET_KEY'])
        try:
            data = s.loads(token)
        except SignatureExpired:
            print("Expired Token")
            return None  # valid token, but expired
        except BadSignature:
            print("Bad Signature")
            return None  # invalid token
        user = User.query.get(data['id'])
        if user:
            token_session = data['session']
            if token_session == user.current_session_user:
                return user
            else:
                print("Session does not match for user {}, generate new token".format(user.id))
                return None
        else:
            return False

    def check_password(self, password):
        return check_password_hash(self.password_hash, password)

    def get_id(self):
        return self.id

    def get_activity(self):
        """
        Queries a User for associated UserActivities.
        Filters to UserActivities that are active=true
        If UserActivity is active, but older than 1 day, it is set active=false

        :return: UserActivity or False if no active, UserActivity < 1 day are found
        """

        active_trackers = self.activities.filter_by(active=True).all()
        if active_trackers:
            pass
        else:
            return False  # No active tracker
        current_trackers = []
        for t in active_trackers:
            if (datetime.now() - t.created).days > 0:
                t.active = False
                db.session.add(t)
                db.session.commit()
                continue
            else:
                current_trackers.append(t)
        if current_trackers:
            return current_trackers[0]
        else:  # Will occur if 1 or more active trackers must be set inactive
            return False

    def generate_new_password(self, new_password):
        self.password_hash = generate_password_hash(new_password)
        self.current_session_user = self.current_session_user + 1
Beispiel #29
0
from flask_login import UserMixin
from itsdangerous import (TimedJSONWebSignatureSerializer
                          as Serializer, BadSignature, SignatureExpired)
from werkzeug.security import check_password_hash, generate_password_hash

from app_folder import app_run, db
from app_folder import login

User_Records = db.Table('user_records',
                        db.Column('user_id', db.Integer, db.ForeignKey('users.id'), primary_key=True),
                        db.Column('member_id', db.Integer, db.ForeignKey('profiles.member_id'), primary_key=True)
                        )

Cache_Records = db.Table('cache_records',
                         db.Column('cache_id', db.String(16), db.ForeignKey('usercache.cache_id'), primary_key=True),
                         db.Column('member_id', db.Integer, db.ForeignKey('profiles.member_id'), primary_key=True)
                         )


class LinkedInRecord(db.Model):
    """
    DB Model for Profile Data
    """
    __tablename__ = 'profiles'
    member_id = db.Column(db.Integer, primary_key=True)
    first_name = db.Column(db.String(128))
    last_name = db.Column(db.String(128))
    summary = db.Column(db.Text)

    metro = db.Column(db.Text)
Beispiel #30
0
class Availability(UserMixin, db.Model):
    id = db.Column(db.Integer, primary_key=True)
    from_time = db.Column(db.String(7), index=True, default=datetime.utcnow)
    to_time = db.Column(db.String(7), index=True, default=datetime.utcnow)
    user_id = db.Column(db.Integer, db.ForeignKey('user.id'))

    def __repr__(self):
        return '<Availability from  {} to {}>'.format(self.from_time,self.to_time)

    # calculates the endtime of an appointment based off of the start time and meeting duration
    def calculateEndTime(self, apptStartTime, meetingLength):
        splitTime = apptStartTime.split(':')
        splitMeetingminutes = meetingLength.split(':')
        if int(splitMeetingminutes[0]) == 1:
            endHour = int(splitTime[0]) + 1
            endTime = str(endHour) + ':' + str(splitTime[1])
        else:
            endMinutes = int(splitTime[1]) + int(splitMeetingminutes[1])
            if endMinutes >= 60:
                endMinutes = endMinutes - 60
                endHour = int(splitTime[0]) + 1
                if endMinutes < 10 and endMinutes != 0:
                    endTime = str(endHour) + ':0' + str(endMinutes)
                elif endMinutes == 0:
                    endTime = str(endHour) + ':00'
                else:
                    endTime = str(endHour) + ':' + str(endMinutes)
            else:
                endHour = splitTime[0]
                endTime = str(endHour) + ':' + str(endMinutes)
        return endTime

    # checks to see if the endtime is not past the user's available times
    def in_range(self, availableEndTime, apptEndTime):
        splitAvailEnd = availableEndTime.split(':')
        splitApptEnd = apptEndTime.split(':')
        # comparing end times of availability and appointment
        endAvailInt = int(splitAvailEnd[0]) * 100 + int(splitAvailEnd[1])
        endApptInt = int(splitApptEnd[0]) * 100 + int(splitApptEnd[1])
        if endAvailInt < endApptInt:
            return False
        else:
            return True


    # add to an array to hold all the possible meeting intervals
    def set_available_times(
        self,
        start_time,
        incrementAmount,
        end_time,
        ):
        availAppts = []
        apptEndTime = self.calculateEndTime(start_time, incrementAmount)
        apptStartTime = start_time
        while self.in_range(end_time, apptEndTime):
            appointmentTime = apptStartTime + ' - ' + apptEndTime
            availAppts.append((appointmentTime, appointmentTime))
            apptStartTime = apptEndTime
            apptEndTime = self.calculateEndTime(apptStartTime, incrementAmount)
        return availAppts

    def remove_busy_times(self, apptArray, listOfMadeMeetingsArray):
        #this gets an array of the appointments that that user has on that day
        something = []
        for times in listOfMadeMeetingsArray:
            if ((times.meetingTime, times.meetingTime)) in apptArray:
                apptArray.remove((times.meetingTime, times.meetingTime))
        return apptArray