bsw@51: bsw@51: local setting_key = "liquidfeedback_frontend_api_key" bsw@51: local setting = Setting:by_pk(app.session.member.id, setting_key) bsw@51: bsw@51: local api_key bsw@51: bsw@51: if param.get("delete", atom.boolean) then bsw@51: bsw@51: if setting then bsw@51: setting:destroy() bsw@51: end bsw@51: bsw@51: else bsw@51: bsw@51: if not setting then bsw@51: setting = Setting:new() bsw@51: setting.member_id = app.session.member.id bsw@51: setting.key = setting_key bsw@51: end bsw@51: bsw@51: api_key = multirand.string( bsw@51: 20, bsw@51: '23456789BCDFGHJKLMNPQRSTVWXYZbcdfghjkmnpqrstvwxyz' bsw@51: ) bsw@51: bsw@51: setting.value = api_key bsw@51: bsw@51: setting:save() bsw@51: end bsw@51: bsw@51: bsw@51: local setting_key = "liquidfeedback_frontend_api_key_history" bsw@51: bsw@51: setting = SettingMap:new() bsw@51: setting.member_id = app.session.member.id bsw@51: setting.key = setting_key bsw@51: setting.subkey = db:query("SELECT now()")[1].now bsw@51: setting.value = api_key or "" bsw@51: local dberr = setting:try_save() bsw@51: bsw@51: if dberr then bsw@51: if dberr:is_kind_of("IntegrityConstraintViolation.UniqueViolation") then bsw@51: slot.put_into("error", _"The API key has been changed too fast.") bsw@51: return bsw@51: else bsw@51: dberr:escalate() bsw@51: end bsw@51: end bsw@51: bsw@51: if not api_key then bsw@51: slot.put_into("notice", _"API key has been deleted") bsw@51: else bsw@51: slot.put_into("notice", _"API key has been updated") bsw@51: end