示例#1
0
文件: views.py 项目: sci-web/w4a
def send_email():
    captcha = FlaskSessionCaptcha(app)
    cform = ContactForm(request.values)
    tmpl = tmpl_picker('contact')
    reply = tmpl_picker('autoreply')
    if request.method == 'POST':
        if cform.validate_on_submit():
            if captcha.validate():
                try:
                    mail = Mail(app)
                    msg = Message(">>> message from SciBook: " + cform.data["subject"],
                        sender=cform.data["email"],
                        recipients=[app.config["EMAIL_1"]])
                    msg.add_recipient(app.config["EMAIL_2"])
                    msg.body = cform.data["msg"] + "\n\n" + "signed as from:\n" + cform.data["email"]
                    mail.send(msg)
                    flash("Your message is sent!", category='info')
                    return render_template(reply, form=g.form, cform=cform)
                except:
                    flash("Your message is not sent fast way... Something went wrong, we are soory, but we look at your message a bit later", category='error')
                    return render_template(reply, form=g.form, cform=cform)
            else:
                flash("Captcha is wrong!", category='error')
                return render_template(tmpl, form=g.form, cform=cform, email=cform.data["email"], subject=cform.data["subject"], msg=cform.data["msg"], topics=g.topics)
        else:
            flash("All fields are necessary to fill in!", category='error')
            return render_template(tmpl, form=g.form, cform=cform, email=cform.data["email"], subject=cform.data["subject"], msg=cform.data["msg"], topics=g.topics)
    else:
        return render_template(tmpl, form=g.form, cform=cform, topics=g.topics)
 def test_captcha_with_init_app_ok(self):    
     captcha = FlaskSessionCaptcha()
     _default_routes(captcha, self.app)
     captcha.init_app(self.app)
     # everything ok
     r = self.client.get("/")
     r = self.client.post("/", data={"s": "something", "captcha": r.data.decode('utf-8')})
     assert r.data == b"ok"
 def test_captcha_jinja_global(self):
     captcha = FlaskSessionCaptcha(self.app)
     with self.app.test_request_context('/'):
         function = self.app.jinja_env.globals['captcha']
         assert not captcha.get_answer()
         img = function()
         assert "<img" in img
         assert captcha.get_answer()
    def test_captcha_session_key_default(self):
        captcha = FlaskSessionCaptcha(self.app)
        _default_routes(captcha, self.app)

        with self.app.test_request_context('/'):
            captcha.generate()
            answer = captcha.get_answer()
            assert self.app.config['CAPTCHA_SESSION_KEY'] == "captcha_answer"
            assert session.get("captcha_answer") == answer
 def test_captcha_with_defined_width_and_height(self):    
     self.app.config['CAPTCHA_WIDTH'] = 400
     self.app.config['CAPTCHA_HEIGHT'] = 150
     captcha = FlaskSessionCaptcha()
     _default_routes(captcha, self.app)
     captcha.init_app(self.app)
     r = self.client.get("/")
     r = self.client.post("/", data={"s": "something", "captcha": r.data.decode('utf-8')})
     assert r.data == b"ok"
 def test_captcha_warning_on_non_server_storage(self):
     self.app.config['SESSION_TYPE'] = 'null'
     Session(self.app)
     with self.assertRaises(RuntimeWarning):
         FlaskSessionCaptcha(self.app)
     self.app.config['SESSION_TYPE'] = None
     Session(self.app)
     with self.assertRaises(RuntimeWarning):
         FlaskSessionCaptcha(self.app)
    def test_captcha_validate_value(self):        
        captcha = FlaskSessionCaptcha(self.app)
        _default_routes(captcha, self.app)        

        with self.app.test_request_context('/'):
            captcha.generate()
            answer = captcha.get_answer()
            assert not captcha.validate(value="wrong")
            captcha.generate()
            answer = captcha.get_answer()
            assert captcha.validate(value=answer)
 def test_captcha_jinja_global_empty_while_disabled(self):
     self.app.config["CAPTCHA_ENABLE"] = False
     captcha = FlaskSessionCaptcha(self.app)
     with self.app.test_request_context('/'):
         function = self.app.jinja_env.globals['captcha']
         try:
             captcha.get_answer()
             assert False
         except:
             pass
         img = function()
         assert img == ""
    def test_captcha_least_digits(self):
        self.app.config["CAPTCHA_LENGTH"] = 8
        captcha = FlaskSessionCaptcha(self.app)
        _default_routes(captcha, self.app)

        r = self.client.get("http://localhost:5000/")
        captcha_value = r.data.decode('utf-8')
        assert len(captcha_value) == 8
    def test_captcha_session_file_storage(self):
        self.app.config['SESSION_TYPE'] = 'filesystem'        
        Session(self.app)
        captcha = FlaskSessionCaptcha(self.app)
        _default_routes(captcha, self.app)

        r = self.client.get("/")
        r = self.client.post("/", data={"s": "something", "captcha": r.data.decode('utf-8')})
        assert r.data == b"ok"
    def test_captcha_without_cookie(self):    
        captcha = FlaskSessionCaptcha(self.app)
        _default_routes(captcha, self.app)

        # without right cookie
        r = self.client.get("/")
        self.client.set_cookie("localhost", "session", "wrong")
        r = self.client.post("/", data={"s": "something", "captcha": r.data.decode('utf-8')})
        assert r.data == b"nope" # no session
    def test_captcha_wrong(self):    
        captcha = FlaskSessionCaptcha(self.app)
        _default_routes(captcha, self.app)               

        # try some wrong values
        r = self.client.post("/", data={"s": "something"})
        assert r.data == b"nope"
        r = self.client.post("/", data={"s": "something", "captcha": ""})
        assert r.data == b"nope"
        r = self.client.post("/", data={"s": "something", "captcha": "also wrong"})
        assert r.data == b"nope"
示例#13
0
def create_app():
    """Construct the core application."""
    app = Flask(__name__, instance_relative_config=False)
    app.register_blueprint(auth_bp, url_prefix='/auth')
    app.register_blueprint(errors_bp, url_prefix='/error')
    app.config.from_object('config.Config')

    db.init_app(app)
    store.bind(db)
    login_manager.init_app(app)
    Session(app)
    captcha = FlaskSessionCaptcha(app)
    captcha.init_app(app)


    with app.app_context():
        from . import routes  # Import routes
        db.create_all()  # Create sql tables for our data models

        return app
    def test_captcha_passthrough_when_disabled(self):
        self.app.config["CAPTCHA_ENABLE"] = False
        captcha = FlaskSessionCaptcha(self.app)
        _default_routes(captcha, self.app)

        r = self.client.post("/", data={"s": "something"})
        assert r.data == b"ok"
        r = self.client.get("/")
        captcha_value = r.data.decode('utf-8')       
        r = self.client.post("/", data={"s": "something", "captcha": captcha_value})
        assert r.data == b"ok"    
        r = self.client.post("/", data={"s": "something", "captcha": "false"})
        assert r.data == b"ok"
    def test_captcha_replay(self):
        captcha = FlaskSessionCaptcha(self.app)
        _default_routes(captcha, self.app)

        r = self.client.get("/")
        captcha_value = r.data.decode('utf-8')
        
        cookies = self.client.cookie_jar._cookies['localhost.local']['/']['session']        
        r = self.client.post("/", data={"s": "something", "captcha": captcha_value})
        assert r.data == b"ok"
        self.client.set_cookie("localhost", "session", cookies.value)
        r = self.client.post("/", data={"s": "something", "captcha": captcha_value})
        assert r.data == b"nope"
    def test_captcha_session_key_can_be_set(self):
        captcha = FlaskSessionCaptcha(self.app)
        new_session_key = 'other-key-in-session'
        captcha.session_key = new_session_key
        _default_routes(captcha, self.app)

        with self.app.test_request_context('/'):
            captcha.generate()
            answer = captcha.get_answer()
            assert not session.get(self.app.config['CAPTCHA_SESSION_KEY'])
            assert session.get(new_session_key) == answer
示例#17
0
 def __init__(self, *args, **kwargs):
     FlaskSessionCaptcha.__init__(self, *args, **kwargs)
app = Flask(__name__)

# Database Config
# If your mongodb runs on a different port
# change 33017 to that port number
mongoClient = MongoClient('localhost', 33017)

app.config["SECRET_KEY"] = uuid.uuid4()
app.config['CAPTCHA_ENABLE'] = True
app.config['CAPTCHA_LENGTH'] = 5
app.config['CAPTCHA_WIDTH'] = 160
app.config['CAPTCHA_HEIGHT'] = 60
app.config['SESSION_MONGODB'] = mongoClient
app.config['SESSION_TYPE'] = 'mongodb'
Session(app)
captcha = FlaskSessionCaptcha(app)


@app.route('/', methods=['POST', 'GET'])
def some_route():
    if request.method == "POST":
        if captcha.validate():
            return "success"
        else:
            return "fail"

    return render_template("form.html")


if __name__ == "__main__":
    app.debug = True
示例#19
0
def create_app():
    app = Flask(__name__)

    # sessionを使う際にSECRET_KEYを設定
    app.config['SECRET_KEY'] = b'R\x1c`\x8d\xed_\xe5\xd6\x8d\xef\xc6\x19g- J'

    # ここから /// 画像アップロードの設定
    # 画像のアップロード先のディレクトリ
    app.config["IMAGE_UPLOADS"] = 'flmapp/static/user_image'
    app.config["ORIGINAL_IMAGE_UPLOADS"] = 'flmapp/static/original_user_image'
    app.config["ITEM_IMAGE_UPLOADS"] = 'flmapp/static/item_image'
    app.config["ITEM_TEMP_IMAGE_UPLOADS"] = 'flmapp/static/item_temp_image'
    app.config[
        "ORIGINAL_ITEM_IMAGE_UPLOADS"] = 'flmapp/static/original_item_image'
    # アップロードされる拡張子の制限
    app.config["ALLOWED_IMAGE_EXTENSIONS"] = ["JPEG", "JPG", "PNG", "GIF"]
    # 画像サイズの制限
    app.config["MAX_IMAGE_FILESIZE"] = 0.5 * 1024 * 1024
    # ここまで /// 画像アップロードの設定

    # ここから /// データベースの設定
    # DBはSQLiteを使う
    #! パスを変えてください
    app.config['SQLALCHEMY_DATABASE_URI'] = \
        'sqlite:///' + "/Users/shimomuramei/Desktop/set_prefs/data.sqlite"
    app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False
    app.config['SQLALCHEMY_ECHO'] = False
    # ここまで /// データベースの設定

    # ここから /// メール送信の設定
    app.config['DEBUG'] = True  # デバッグのサポート
    app.config['TESTING'] = False
    app.config['MAIL_SERVER'] = 'smtp.gmail.com'
    app.config['MAIL_PORT'] = 587
    app.config['MAIL_USE_TLS'] = True
    app.config['MAIL_USE_SSL'] = False
    app.config['MAIL_USERNAME'] = '******'
    app.config['MAIL_PASSWORD'] = '******'
    app.config['MAIL_DEFAULT_SENDER'] = '*****@*****.**'
    app.config['MAIL_MAX_EMAILS'] = 5  #送信するメールの最大数
    app.config['MAIL_SUPPRESS_SEND'] = False
    app.config['MAIL_ASCII_ATTACHHMENTS'] = False
    # ここまで /// メール送信の設定

    # ここから /// キャプチャの設定
    app.config['CAPTCHA_ENABLE'] = True
    app.config['CAPTCHA_LENGTH'] = 5
    app.config['CAPTCHA_WIDTH'] = 160
    app.config['CAPTCHA_HEIGHT'] = 100
    app.config['SESSION_TYPE'] = 'sqlalchemy'
    # ここまで /// キャプチャの設定

    db.init_app(app)
    migrate.init_app(app, db)
    login_manager.init_app(app)
    mail.init_app(app)
    Session(app)
    captcha = FlaskSessionCaptcha(app)
    CSRFProtect(app)

    # カスタムテンプレートフィルターの登録
    app.add_template_filter(replace_newline)

    # 分割したblueprintを登録する
    from flmapp.views import (auth, mypage, route, sell, item, buy,
                              transaction, ajax, user, history, search,
                              todolist)

    app.register_blueprint(auth.bp)
    app.register_blueprint(mypage.bp)
    app.register_blueprint(route.bp)
    app.register_blueprint(sell.bp)
    app.register_blueprint(item.bp)
    app.register_blueprint(buy.bp)
    app.register_blueprint(transaction.bp)
    app.register_blueprint(ajax.bp)
    app.register_blueprint(user.bp)
    app.register_blueprint(history.bp)
    app.register_blueprint(search.bp)
    app.register_blueprint(todolist.bp)

    return app