Пример #1
0
    def process(self):
        try:
            cursor, conn_id, db_conn, db_cur, argv = utils.readPackage(
                self.package)
            bname, uname = argv[0], cursor.get_uname(conn_id)
            upload_file_name = argv[-1]

            t_idx = argv.index('--title')
            c_idx = argv.index('--content')

            if t_idx < c_idx:
                title = ' '.join(argv[t_idx + 1:c_idx])
            else:
                title = ' '.join(argv[t_idx + 1:])

            db_cur.execute(f'''
                insert into post (bname, title, author, upload_file_name) 
                values ("{bname}", "{title}", "{uname}", "{upload_file_name}")
            ''')
            db_conn.commit()
            msg = 'Create post successfully.\n'

        except Exception as e:
            print(e)
            msg = 'create-post <board-name> --title <title> --content <content>\n'

        return msg
Пример #2
0
    def parse(self):
        sub_type = 'board/author'
        flag = False
        keyword, bname = '', ''
        try:
            cursor, conn_id, _, _, argv = utils.readPackage(self.package)
            if not cursor.check_login(conn_id):
                msg = 'Please login first.\n'
            else:
                if argv[0] == '--board':
                    sub_type = 'board'
                elif argv[0] == '--author':
                    sub_type = 'author'
                else:
                    msg = f'[Invalid option] subscribe --{sub_type} <{sub_type}-name> --keyword <keyword>\n'
                    sub_type = 'F'

                if sub_type != 'F':
                    k_idx = argv.index('--keyword')
                    bname = ' '.join(argv[1:k_idx])
                    keyword = " ".join(argv[k_idx + 1:])

                    msg = '\n'
                    flag = True

        except Exception as e:
            print(e)
            msg = f'[Invalid option] subscribe --{sub_type} <{sub_type}-name> --keyword <keyword>\n'

        return flag, msg, [sub_type, keyword, bname]
Пример #3
0
    def parse(self):
        flag, addi_list = False, []
        try:
            cursor, conn_id, _, db_cur, argv = utils.readPackage(self.package)
            if len(argv) != 1:
                msg = 'delete-mail <mail#>\n'
            elif not cursor.check_login(conn_id):
                msg = 'Please login first.\n'
            else:
                uname, mail_id = cursor.get_uname(conn_id), int(argv[0])
                db_cur.execute(f'''
                    select mail_subject, date_time, upload_mail_name 
                    from mail where target_user = "******"
                    order by date_time
                ''')
                data = db_cur.fetchall()

                if data is None or len(data) < mail_id or mail_id <= 0:
                    msg = 'No such mail.\n'
                else:
                    mail_subject, date_time, upload_mail_name = data[mail_id -
                                                                     1]

                    self.package['argv'].append(mail_subject)
                    self.package['argv'].append(date_time)
                    addi_list.append(upload_mail_name)
                    flag = True
                    msg = '\n'
        except ValueError:
            msg = 'No such mail.\n'
        except Exception as e:
            # print(e)
            msg = 'delete-mail <mail#>\n'

        return flag, msg, addi_list
Пример #4
0
    def parse(self):
        sub_type = 'board/author'
        flag = False
        bname_author = ''
        try:
            cursor, conn_id, _, _, argv = utils.readPackage(self.package)
            if not cursor.check_login(conn_id):
                msg = 'Please login first.\n'
            else:
                if argv[0] == '--board':
                    sub_type = 'board'
                elif argv[0] == '--author':
                    sub_type = 'author'
                else:
                    msg = f'unsubscribe --{sub_type} <{sub_type}-name>\n'
                    sub_type = 'F'

                if sub_type != 'F':
                    bname_author = ' '.join(argv[1:])
                    msg = '\n'
                    flag = True

        except Exception as e:
            print(e)
            msg = f'unsubscribe --{sub_type} <{sub_type}-name>\n'

        return flag, msg, [sub_type, bname_author]
Пример #5
0
    def parse(self):
        flag = False
        addi_list = []
        try:
            cursor, conn_id, _, db_cur, argv = utils.readPackage(self.package)
            if not cursor.check_login(conn_id):
                msg = 'Please login first.\n'
            else:
                # to_user_name = argv[0]
                s_idx, c_idx = argv.index('--subject'), argv.index('--content')
                dash_idx = min(s_idx, c_idx)
                to_user_name = ' '.join(argv[:dash_idx])

                db_cur.execute(
                    f'select bucket_name from user where uname = "{to_user_name}"'
                )
                data = db_cur.fetchone()

                if data is None:
                    msg = f'{to_user_name} does not exist.\n'
                else:
                    addi_list.append(data[0])
                    upload_mail_name = 'mail_' + uuid.uuid4().hex
                    addi_list.append(upload_mail_name)
                    flag, msg = True, '\n'
                    self.package['argv'].append(upload_mail_name)

        except Exception as e:
            # print(e)
            msg = 'mail-to <username> --subject <subject> --content <content>\n'

        return flag, msg, addi_list
Пример #6
0
    def process(self):
        try:
            cursor, conn_id, db_conn, db_cur, argv = utils.readPackage(
                self.package)
            to_user_name, uname = argv[0], cursor.get_uname(conn_id)
            upload_mail_name = argv[-1]

            s_idx = argv.index('--subject')
            c_idx = argv.index('--content')

            if s_idx < c_idx:
                subject = ' '.join(argv[s_idx + 1:c_idx])
            else:
                subject = ' '.join(argv[s_idx + 1:])

            db_cur.execute(f'''
                insert into mail (mail_subject, source_user, target_user, upload_mail_name) 
                values ("{subject}", "{uname}", "{to_user_name}", "{upload_mail_name}")
            ''')
            db_conn.commit()
            msg = 'Sent successfully.\n'
        except Exception as e:
            # print(e)
            msg = 'mail-to <username> --subject <subject> --content <content>\n'

        return msg
Пример #7
0
    def parse(self):
        flag = False
        upload_file_name, uname, bname = '', '', ''
        try:
            cursor, conn_id, _, db_cur, argv = utils.readPackage(self.package)
            if len(argv) < 5:
                msg = 'create-post <board-name> --title <title> --content <content>\n'
            elif not cursor.check_login(conn_id):
                msg = 'Please login first.\n'
            else:
                bname, uname = argv[0], cursor.get_uname(conn_id)
                _, _ = argv.index('--title'), argv.index('--content')

                db_cur.execute(
                    f'select count(*) from board where bname = "{bname}"')
                res = db_cur.fetchone()[0]
                if res == 0:
                    msg = 'Board does not exist.\n'
                else:
                    flag, msg = True, '\n'
                    upload_file_name = 'post_' + uuid.uuid4().hex
                    self.package['argv'].append(upload_file_name)

        except Exception as e:
            # print(e)
            msg = 'create-post <board-name> --title <title> --content <content>\n'

        return flag, msg, [upload_file_name, uname, bname]
Пример #8
0
    def parse(self):
        flag = False
        bucket_name = ''
        try:
            cursor, conn_id, _, db_cur, argv = utils.readPackage(self.package)
            if cursor.check_login(conn_id):
                msg = 'Please logout first.\n'
            else:
                uname, pwd = argv
                db_cur.execute(
                    f'select bucket_name from user where uname = "{uname}" and pwd = "{pwd}"'
                )
                bucket_name = db_cur.fetchone()
                if bucket_name is None:
                    bucket_name = 'ERROR'
                    msg = 'Login failed.\n'
                else:
                    bucket_name = bucket_name[0]
                    flag = True
                    msg = '\n'
        except Exception as e:
            # print(e)
            msg = msg = 'login <username> <password>\n'

        return flag, msg, [bucket_name]
Пример #9
0
    def process(self):
        try:
            cursor, conn_id, _, _, _ = utils.readPackage(self.package)
            uname = cursor.get_uname(conn_id)
            cursor.logout(conn_id)
            msg = f'Bye, {uname}.\n'
        except Exception as e:
            # print(e)
            msg = 'logout ERROR!\n'

        return msg
Пример #10
0
    def process(self):
        try:
            cursor, conn_id, _, _, argv = utils.readPackage(self.package)
            uname = argv[0]
            cursor.login(conn_id, uname)
            msg = f'Welcome, {uname}.\n'
        except Exception as e:
            # print(e)
            msg = 'Usage: register <username> <email> <password>\n'

        return msg
Пример #11
0
    def process(self):
        try:
            _, _, db_conn, db_cur, argv = utils.readPackage(self.package)
            pid = int(argv[0])
            db_cur.execute(f'delete from post where pid={pid}')
            db_conn.commit()
            msg = 'Delete successfully.\n'
        except ValueError:
            msg = 'Post does not exist.\n'
        except:
            msg = 'delete-post <post-id>\n'

        return msg
Пример #12
0
    def process(self):
        try:
            _, _, db_conn, db_cur, argv = utils.readPackage(self.package)
            uname, email, pwd, bucket_name = argv
            db_cur.execute(
                f'insert into user (uname, bucket_name, email, pwd) values ("{uname}", "{bucket_name}", "{email}", "{pwd}")'
            )
            db_conn.commit()
            msg = 'Register successfully.\n'
        except:
            msg = 'Usage: register <username> <email> <password>\n'

        return msg
Пример #13
0
    def parse(self):
        try:
            cursor, conn_id, db_conn, _, argv = utils.readPackage(self.package)
            if len(argv) != 0:
                msg = 'exit\n'
            else:
                msg = '\n'
                cursor.remove(conn_id, db_conn)

        except Exception as e:
            # print(e)
            msg = 'exit ERROR!\n'

        return False, msg, []
Пример #14
0
    def parse(self):
        flag = False
        try:
            cursor, conn_id, _, _, _ = utils.readPackage(self.package)
            if not cursor.check_login(conn_id):
                msg = 'Please login first.\n'
            else:
                msg = '\n'
                flag = True

        except Exception as e:
            print(e)
            msg = f'list-sub\n'

        return flag, msg, []
Пример #15
0
    def parse(self):
        flag, addi_list = False, []
        try:
            cursor, conn_id, db_conn, db_cur, argv = utils.readPackage(
                self.package)
            if not cursor.check_login(conn_id):
                msg = 'Please login first.\n'
            else:
                pid = int(argv[0])

                if argv[1] == '--title' or argv[1] == '--content':
                    update_type = argv[1][2:]
                    new_content = ' '.join(argv[2:])
                    db_cur.execute(f'''
                        select p.author, u.bucket_name, p.upload_file_name
                        from post as p, user as u
                        where p.pid={pid}
                        and u.uname=p.author
                    ''')
                    data = db_cur.fetchone()
                    if data is None:
                        msg = 'Post does not exist.\n'
                    elif data[0] != cursor.get_uname(conn_id):
                        msg = 'Not the post owner.\n'
                    else:
                        if argv[1] == '--content':
                            bucket_name, upload_file_name = data[1], data[2]
                            addi_list.extend(
                                [bucket_name, upload_file_name, new_content])
                            flag = True
                            msg = '\n'
                        else:
                            db_cur.execute(f'''
                                update post
                                set {update_type} = "{new_content}"
                                where pid={pid}
                            ''')
                            db_conn.commit()
                            msg = 'Update successfully.\n'
                else:
                    msg = 'update-post <post-id> --title/content <new>\n'
        except ValueError:
            msg = 'Post does not exist.\n'
        except Exception as e:
            # print(e)
            msg = 'update-post <post-id> --title/content <new>\n'

        return flag, msg, addi_list
Пример #16
0
    def parse(self):
        try:
            cursor, conn_id, _, _, argv = utils.readPackage(self.package)
            if len(argv) != 0:
                msg = 'whoami\n'
            elif not cursor.check_login(conn_id):
                msg = 'Please login first.\n'
            else:
                uname = cursor.get_uname(conn_id)
                msg = f'{uname}\n'

        except Exception as e:
            # print(e)
            msg = 'whoami ERROR!\n'

        return False, msg, []
Пример #17
0
    def parse(self):
        flag = False
        try:
            cursor, conn_id, _, _, argv = utils.readPackage(self.package)
            if len(argv) != 0:
                msg = 'logout\n'
            elif not cursor.check_login(conn_id):
                msg = 'Please login first.\n'
            else:
                flag = True
                msg = f'\n'

        except Exception as e:
            # print(e)
            msg = 'logout ERROR!\n'

        return flag, msg, []
Пример #18
0
    def parse(self):
        flag, addi_list = False, []
        try:
            _, _, _, db_cur, argv = utils.readPackage(self.package)
            if len(argv) != 1:
                msg = 'read <post-id>\n'
            else:
                pid = int(argv[0])

                db_cur.execute(f'''
                    select p.author, p.title, p.date_time, p.upload_file_name, u.bucket_name
                    from post as p, user as u
                    where p.pid={pid}
                    and p.author = u.uname
                ''')
                data = db_cur.fetchone()

                if data is None:
                    msg = 'Post does not exist.\n'
                else:
                    author, title, date_time, upload_file_name, bucket_name = data
                    addi_list.extend([
                        author, title, date_time, upload_file_name, bucket_name
                    ])
                    db_cur.execute(f'''
                        select author, upload_comment_name
                        from comment
                        where pid={pid}
                        order by date(date_time) desc
                    ''')
                    res = db_cur.fetchall()
                    for row in res:
                        addi_list.append(row[0])
                        addi_list.append(row[1])
                    msg = '\n'
                    flag = True
        except Exception as e:
            # print(e)
            msg = 'read <post-id>\n'

        return flag, msg, addi_list
Пример #19
0
    def parse(self):
        try:
            _, _, _, db_cur, argv = utils.readPackage(self.package)
            if len(argv) > 1 or (len(argv) == 1 and argv[0][:2] != "##"):
                msg = 'list-board ##<key>\n'
            else:
                if len(argv) == 0:
                    db_cur.execute(f'select * from board')
                else:
                    keyword = argv[0][2:]
                    db_cur.execute(
                        f'select * from board where bname like "%{keyword}%"')
                res = db_cur.fetchall()
                msg = f"{'Index':10}{'Name':20}{'Moderator':20}\n"
                for idx, row in enumerate(res):
                    msg += f'{idx+1:<10}{row[0]:20}{row[1]:20}\n'
        except Exception as e:
            # print(e)
            msg = 'list-board ##<key>\n'

        return False, msg, []
Пример #20
0
    def parse(self):
        try:
            _, _, _, db_cur, argv = utils.readPackage(self.package)
            if len(argv) == 0 or len(argv) > 2 or (len(argv) == 2
                                                   and argv[1][:2] != '##'):
                msg = 'list-post <board-name> ##<key>\n'
            else:
                bname = argv[0]
                db_cur.execute(
                    f'select count(*) from board where bname="{bname}"')
                cnt = db_cur.fetchone()[0]

                if cnt == 0:
                    msg = 'Board does not exist.\n'
                else:
                    if len(argv) == 1:
                        db_cur.execute(f'''
                            select pid, title, author, date_time
                            from post
                            where bname="{bname}"
                        ''')
                    else:
                        keyword = argv[1][2:]
                        db_cur.execute(f'''
                            select pid, title, author, date_time
                            from post
                            where bname="{bname}"
                            and title like "%{keyword}%"
                        ''')
                    res = db_cur.fetchall()

                    msg = f"{'ID':10}{'Title':40}{'Author':20}{'Date':6}\n"
                    for row in res:
                        date = '/'.join(row[3].split(' ')[0].split('-')[1:])
                        msg += f"{row[0]:<10}{row[1]:40}{row[2]:20}{date:6}\n"
        except Exception as e:
            # print(e)
            msg = 'list-post <board-name> [##<key>]\n'

        return False, msg, []
Пример #21
0
    def parse(self):
        flag, addi_list = False, []
        try:
            cursor, conn_id, _, db_cur, argv = utils.readPackage(self.package)
            if len(argv) != 1:
                msg = 'delete-post <post-id>\n'
            elif not cursor.check_login(conn_id):
                msg = 'Please login first.\n'
            else:
                pid = int(argv[0])
                db_cur.execute(f'''
                    select p.author, u.bucket_name, p.upload_file_name
                    from post as p, user as u
                    where p.pid={pid}
                    and p.author = u.uname
                ''')
                data = db_cur.fetchone()
                if data is None:
                    msg = 'Post does not exist.\n'
                elif data[0] != cursor.get_uname(conn_id):
                    msg = 'Not the post owner.\n'
                else:
                    addi_list.extend([data[1], data[2]])
                    db_cur.execute(f'''
                        select upload_comment_name
                        from comment
                        where pid={pid}
                    ''')
                    data = db_cur.fetchall()
                    for row in data:
                        addi_list.append(row[0])
                    flag = True
                    msg = '\n'
        except ValueError:
            msg = 'Post does not exist.\n'
        except:
            msg = 'delete-post <post-id>\n'

        return flag, msg, addi_list
Пример #22
0
    def process(self):
        try:
            cursor, conn_id, db_conn, db_cur, argv = utils.readPackage(
                self.package)
            pid = int(argv[0])
            upload_comment_name = self.package['argv'][-1]
            try:
                uname = cursor.get_uname(conn_id)
                db_cur.execute(f'''
                    insert into comment (author, upload_comment_name, pid)
                    values ("{uname}", "{upload_comment_name}", "{pid}")
                ''')
                db_conn.commit()
                msg = 'Comment successfully.\n'
            except Exception as e:
                # print(e)
                msg = 'Post does not exist.\n'
        except Exception as e:
            # print(e)
            msg = 'comment <post-id> <comment>\n'

        return msg
Пример #23
0
    def process(self):
        try:
            cursor, conn_id, db_conn, db_cur, _ = utils.readPackage(
                self.package)

            uname = cursor.get_uname(conn_id)
            mail_subject, date_time = self.package['argv'][-2], self.package[
                'argv'][-1]
            db_cur.execute(f'''
                delete from mail
                where target_user = "******"
                and mail_subject = "{mail_subject}"
                and date_time = "{date_time}"
            ''')
            db_conn.commit()
            msg = 'Mail deleted.\n'
        except ValueError:
            msg = 'No such mail.\n'
        except Exception as e:
            # print(e)
            msg = 'delete-mail <mail#>\n'

        return msg
Пример #24
0
    def parse(self):
        try:
            cursor, conn_id, _, db_cur, argv = utils.readPackage(self.package)
            if len(argv) > 0:
                msg = 'list-mail\n'
            elif not cursor.check_login(conn_id):
                msg = 'Please login first.\n'
            else:
                uname = cursor.get_uname(conn_id)
                db_cur.execute(f'''
                    select mail_subject, source_user, date_time 
                    from mail where target_user = "******"
                    order by date_time
                ''')
                data = db_cur.fetchall()
                msg = f"{'ID':10}{'Subject':20}{'From':20}{'Date':20}\n"
                for idx, row in enumerate(data):
                    date = '/'.join(row[2].split(" ")[0].split('-')[1:])
                    msg += f'{idx+1:<10}{row[0]:20}{row[1]:20}{date:20}\n'
        except Exception as e:
            # print(e)
            msg = 'list-mail\n'

        return False, msg, []
Пример #25
0
    def parse(self):
        flag = False
        bucket_name = ''
        try:
            _, _, _, db_cur, argv = utils.readPackage(self.package)
            uname, email, pwd = argv
            db_cur.execute(
                f'select count(*) from user where uname = "{uname}"')
            res = db_cur.fetchone()[0]
            if res == 0:
                msg = "\n"
                flag = True
                self.md5.update(f'{res}{email}{pwd}'.encode('utf-8'))
                bucket_name = '0516003-' + uname.lower(
                ) + '-' + self.md5.hexdigest()

                self.package['argv'].append(bucket_name)
            else:
                msg = "Username is already used.\n"
        except Exception as e:
            # print(e)
            msg = 'Usage: register <username> <email> <password>\n'

        return flag, msg, [bucket_name]
Пример #26
0
    def parse(self):
        try:
            cursor, conn_id, db_conn, db_cur, argv = utils.readPackage(
                self.package)
            if not cursor.check_login(conn_id):
                msg = 'Please login first.\n'
            else:
                bname = argv[0]
                uname = cursor.get_uname(conn_id)
                try:
                    db_cur.execute(f'''
                        insert into board (bname, moderator) 
                        values ("{bname}", "{uname}")
                    ''')
                    db_conn.commit()
                    msg = 'Create board successfully.\n'
                except sqlite3.IntegrityError:
                    msg = 'Board already exist.\n'

        except Exception as e:
            # print(e)
            msg = 'create-board <name>\n'

        return False, msg, []
Пример #27
0
    def parse(self):
        flag = False
        bucket_name, upload_comment_name = '', ''
        try:
            cursor, conn_id, _, db_cur, argv = utils.readPackage(self.package)
            if not cursor.check_login(conn_id):
                msg = 'Please login first.\n'
            else:
                pid = int(argv[0])

                db_cur.execute(f'''
                    select u.bucket_name
                    from post as p, user as u
                    where p.pid={pid}
                    and p.author = u.uname
                ''')
                data = db_cur.fetchone()
                if data is None:
                    msg = 'Post does not exist.\n'
                else:
                    try:
                        bucket_name = data[0]
                        upload_comment_name = 'comment_' + uuid.uuid4().hex
                        self.package['argv'].append(upload_comment_name)
                        flag = True
                        msg = '\n'
                    except Exception as e:
                        # print(e)
                        msg = 'Post does not exist.\n'
        except ValueError as e:
            msg = 'Post does not exist.\n'
        except Exception as e:
            # print(e)
            msg = 'comment <post-id> <comment>\n'

        return flag, msg, [bucket_name, upload_comment_name]