65 lines
2.2 KiB
Python
65 lines
2.2 KiB
Python
|
# This program is free software: you can redistribute it and/or modify
|
||
|
# it under the terms of the GNU Affero General Public License as published by
|
||
|
# the Free Software Foundation, either version 3 of the License, or
|
||
|
# (at your option) any later version.
|
||
|
#
|
||
|
# This program is distributed in the hope that it will be useful,
|
||
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||
|
# GNU Affero General Public License for more details.
|
||
|
#
|
||
|
# You should have received a copy of the GNU Affero General Public License
|
||
|
# along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||
|
from typing import List, NamedTuple
|
||
|
|
||
|
from sqlalchemy import Column, ForeignKey, ForeignKeyConstraint, String, Text, or_
|
||
|
from sqlalchemy.engine.base import Engine
|
||
|
from sqlalchemy.ext.declarative import declarative_base
|
||
|
from sqlalchemy.orm import sessionmaker, Session, relationship
|
||
|
|
||
|
from mautrix.types import UserID
|
||
|
|
||
|
AuthInfo = NamedTuple('AuthInfo', server=str, api_token=str)
|
||
|
AliasInfo = NamedTuple('AliasInfo', server=str, alias=str)
|
||
|
Base = declarative_base()
|
||
|
|
||
|
from pprint import pprint
|
||
|
|
||
|
|
||
|
class GCMToken(Base):
|
||
|
__tablename__ = "gcmtoken"
|
||
|
|
||
|
user_id: UserID = Column(String(255), primary_key=True, nullable=False)
|
||
|
api_token = Column(Text, nullable=False)
|
||
|
|
||
|
|
||
|
class Database:
|
||
|
db: Engine
|
||
|
|
||
|
def __init__(self, db: Engine) -> None:
|
||
|
self.db = db
|
||
|
Base.metadata.create_all(db)
|
||
|
self.Session = sessionmaker(bind=self.db)
|
||
|
|
||
|
def add_gcm(self, mxid: UserID, token: str) -> None:
|
||
|
s = self.Session()
|
||
|
s.add(GCMToken(user_id=mxid, api_token=token))
|
||
|
s.commit()
|
||
|
|
||
|
def rm_gcm(self, mxid: UserID) -> None:
|
||
|
s = self.Session()
|
||
|
token = s.query(GCMToken).get((mxid))
|
||
|
s.delete(token)
|
||
|
s.commit()
|
||
|
|
||
|
def has_gcm(self, user_id: UserID) -> bool:
|
||
|
s: Session = self.Session()
|
||
|
return s.query(GCMToken).filter(GCMToken.user_id == user_id).count() > 0
|
||
|
|
||
|
def get_gcm(self, user_id: UserID) -> str:
|
||
|
s = self.Session()
|
||
|
row = s.query(GCMToken).filter(GCMToken.user_id == user_id).scalar()
|
||
|
if row:
|
||
|
return row.api_token
|
||
|
return None
|