Skip to content
Snippets Groups Projects
Commit 49cdbf88 authored by kaiyou's avatar kaiyou
Browse files

Monkey patch an application property on Service

parent 5884d867
No related branches found
No related tags found
1 merge request!20Add 'remember me' button
......@@ -5,8 +5,11 @@ blueprint = flask.Blueprint("application", __name__, template_folder="templates"
from hiboo.application import base
from hiboo import models
register = base.BaseApplication.register
registry = base.BaseApplication.registry
setattr(models.Service, "application",
property(lambda self: registry.get(self.application_id)))
from hiboo.application import sso, infrastructure, social, storage
\ No newline at end of file
from hiboo import sso
from hiboo.service.forms import ServiceForm as BaseForm
from hiboo import sso, models, format
from wtforms import validators, fields, widgets
from flask_babel import lazy_gettext as _
import flask
import flask_wtf
class BaseForm(flask_wtf.FlaskForm):
""" Base class for service forms, used in applications
"""
name = fields.StringField(_('Service name'), [validators.DataRequired()])
provider = fields.StringField(_('Provider'), [validators.DataRequired()])
description = fields.StringField(_('Description'))
policy = fields.SelectField(_('Profile policy'),
choices=list(models.Service.POLICIES.items()))
max_profiles = fields.IntegerField(_('Maximum profile count'),
[validators.NumberRange(1, 1000)])
profile_format = fields.SelectField(_('Profile username format'),
choices=(
[("", _("Default ({})".format(
format.ProfileFormat.registry[None].message))
)] +
[(name, format.message.capitalize())
for name, format in format.ProfileFormat.registry.items()
if name is not None
]
)
)
single_profile = fields.BooleanField(_('Enable single-profile behavior (no custom username, no additional profile)'))
submit = fields.SubmitField(_('Submit'))
class BaseApplication(object):
......
......@@ -4,7 +4,7 @@ import flask
blueprint = flask.Blueprint("profile", __name__, template_folder="templates")
import flask_login
from hiboo import models, utils, application
from hiboo import models, utils
from hiboo.profile import forms
......@@ -47,7 +47,7 @@ def transition(profile, current, target, done=False):
[]
),
}
app = application.registry.get(profile.service.application_id)
app = profile.service.application
index = 1 if done else 0
empty = ([], [])
functions = (
......
from hiboo import models, utils, security, application
from hiboo.service import blueprint, forms
from hiboo.service import blueprint
from flask_babel import lazy_gettext as _
import flask
......@@ -49,7 +49,7 @@ def create(application_id):
@security.admin_required()
def edit(service_uuid):
service = models.Service.query.get(service_uuid) or flask.abort(404)
app = application.registry.get(service.application_id) or flask.abort(404)
app = service.application or flask.abort(404)
form = app.Form()
if form.validate_on_submit():
form.populate_obj(service)
......@@ -65,7 +65,7 @@ def edit(service_uuid):
@security.admin_required()
def details(service_uuid):
service = models.Service.query.get(service_uuid) or flask.abort(404)
app = application.registry.get(service.application_id) or flask.abort(404)
app = service.application or flask.abort(404)
return flask.render_template("service_details.html", service=service, application=app)
......@@ -83,7 +83,7 @@ def delete(service_uuid):
@security.admin_required()
def action(service_uuid, action):
service = models.Service.query.get(service_uuid) or flask.abort(404)
app = application.registry.get(service.application_id) or flask.abort(404)
app = service.application or flask.abort(404)
label, profile, quick = app.actions.get(action) or flask.abort(404)
if profile:
flask.abort(404)
......
from wtforms import validators, fields, widgets
from flask_babel import lazy_gettext as _
from hiboo import models, application, format
import flask_wtf
class ServiceForm(flask_wtf.FlaskForm):
name = fields.StringField(_('Service name'), [validators.DataRequired()])
provider = fields.StringField(_('Provider'), [validators.DataRequired()])
description = fields.StringField(_('Description'))
policy = fields.SelectField(_('Profile policy'),
choices=list(models.Service.POLICIES.items()))
max_profiles = fields.IntegerField(_('Maximum profile count'),
[validators.NumberRange(1, 1000)])
profile_format = fields.SelectField(_('Profile username format'),
choices=(
[("", _("Default ({})".format(
format.ProfileFormat.registry[None].message))
)] +
[(name, format.message.capitalize())
for name, format in format.ProfileFormat.registry.items()
if name is not None
]
)
)
single_profile = fields.BooleanField(_('Enable single-profile behavior (no custom username, no additional profile)'))
submit = fields.SubmitField(_('Submit'))
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment