sql_app: data: collect user connection times
Signed-off-by: HeshamTB <hishaminv@gmail.com>
This commit is contained in:
		
							parent
							
								
									d9f3a9da4e
								
							
						
					
					
						commit
						2eed2db77e
					
				@ -163,3 +163,9 @@ def increment_door_access_list_counter(db: Session, iot_entity: models.IotEntity
 | 
			
		||||
    db.add(iot_entity)
 | 
			
		||||
    db.commit()
 | 
			
		||||
    db.refresh(iot_entity)
 | 
			
		||||
 | 
			
		||||
def record_user_connection(db: Session, user: models.User, time: datetime):
 | 
			
		||||
    entry = models.UserConnectionHistory(user_id=user.id, timestamp=time)
 | 
			
		||||
    db.add(entry)
 | 
			
		||||
    db.commit()
 | 
			
		||||
    db.refresh(entry)
 | 
			
		||||
 | 
			
		||||
@ -77,11 +77,13 @@ def create_user(user: schemas.UserCreate, db: Session = Depends(get_db)):
 | 
			
		||||
        data={"sub": db_user.username}, expires_delta=timedelta(minutes=15)
 | 
			
		||||
    )
 | 
			
		||||
    crud.set_user_last_token(db, db_user.username, access_token)
 | 
			
		||||
 | 
			
		||||
    crud.record_user_connection(db, db_user, datetime.now())
 | 
			
		||||
    return db_user 
 | 
			
		||||
 | 
			
		||||
@app.get("/users/me/", response_model=schemas.User, tags=['Users'])
 | 
			
		||||
def get_user_details(current_user: schemas.User = Depends(get_current_active_user)):
 | 
			
		||||
def get_user_details(db: Session = Depends(get_db),
 | 
			
		||||
                     current_user: schemas.User = Depends(get_current_active_user)):
 | 
			
		||||
    crud.record_user_connection(db, current_user, datetime.now())
 | 
			
		||||
    return current_user
 | 
			
		||||
 | 
			
		||||
@app.post("/users/open", tags=['Users'])
 | 
			
		||||
@ -102,6 +104,8 @@ def issue_open_door_command(command: schemas.OpenDoorRequestTime,
 | 
			
		||||
                                             command="OPEN",
 | 
			
		||||
                                             timestamp=datetime.now())
 | 
			
		||||
            crud.record_door_access_log(db, log_entry)
 | 
			
		||||
            crud.record_user_connection(db, current_user, datetime.now())
 | 
			
		||||
 | 
			
		||||
            return device
 | 
			
		||||
    raise err
 | 
			
		||||
 | 
			
		||||
@ -122,6 +126,8 @@ def issue_close_door_command(command: schemas.CloseDoorRequest,
 | 
			
		||||
                                             command="CLOSE",
 | 
			
		||||
                                             timestamp=datetime.now())
 | 
			
		||||
            crud.record_door_access_log(db, log_entry)
 | 
			
		||||
            crud.record_user_connection(db, current_user, datetime.now())
 | 
			
		||||
 | 
			
		||||
            return device
 | 
			
		||||
 | 
			
		||||
@app.post("/users/tkn", response_model=schemas.Token, tags=['Users'])
 | 
			
		||||
@ -139,6 +145,7 @@ def login_for_access_token(form_data: OAuth2PasswordRequestForm = Depends(), db:
 | 
			
		||||
        data={"sub": form_data.username}, expires_delta=timedelta(minutes=15)
 | 
			
		||||
    )
 | 
			
		||||
    crud.set_user_last_token(db, form_data.username, access_token)
 | 
			
		||||
    crud.record_user_connection(db, user, datetime.now())
 | 
			
		||||
    return {"access_token": access_token, "token_type": "bearer"}
 | 
			
		||||
 | 
			
		||||
@app.get("/users/acesslist/", response_model=List[schemas.RoomOverview], tags=['Users'])
 | 
			
		||||
@ -162,6 +169,7 @@ def get_iot_access_list_for_user(db: Session = Depends(get_db), current_user: sc
 | 
			
		||||
            smoke_sensor_reading=sensors.smoke_sensor_reading
 | 
			
		||||
        )
 | 
			
		||||
        access_list.append(entry)
 | 
			
		||||
    crud.record_user_connection(db, user, datetime.now())
 | 
			
		||||
    return access_list
 | 
			
		||||
 | 
			
		||||
@app.get("/admin/users/", response_model=List[schemas.User], tags=['Admin'])
 | 
			
		||||
 | 
			
		||||
@ -14,7 +14,7 @@ class User(Base):
 | 
			
		||||
    passwd_salt = Column(String, nullable=False)
 | 
			
		||||
    is_active = Column(Boolean, default=True, nullable=False)
 | 
			
		||||
    last_token = Column(String, nullable=True)
 | 
			
		||||
 | 
			
		||||
    connections = relationship("UserConnectionHistory")
 | 
			
		||||
    authorized_devices = relationship("IotEntity", secondary="user_iot_link", back_populates="authorized_users")
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -57,4 +57,10 @@ class RoomSensorData(Base):
 | 
			
		||||
    smoke_sensor_reading = Column(Integer)
 | 
			
		||||
    timestamp = Column(DateTime)
 | 
			
		||||
 | 
			
		||||
class UserConnectionHistory(Base):
 | 
			
		||||
    __tablename__ = "user_connection_history"
 | 
			
		||||
 | 
			
		||||
    reading_id = Column(Integer, primary_key=True)
 | 
			
		||||
    user_id = Column(Integer,ForeignKey("user_accounts.id"), index=True)
 | 
			
		||||
    timestamp = Column(DateTime)
 | 
			
		||||
# TODO: Add table to store active sessions. May periodically clear.
 | 
			
		||||
		Loading…
	
		Reference in New Issue
	
	Block a user