bsw@1735: local skip_survey = param.get("skip_survey") bsw@1735: bsw@1735: local survey = Survey:get_open() bsw@1735: bsw@1735: local survey_member = SurveyMember:by_pk(survey.id, app.session.member_id) bsw@1735: bsw@1735: if survey_member and not skip_survey then bsw@1735: return true bsw@1735: end bsw@1735: bsw@1735: local secret_length = 24 bsw@1735: local secret_alphabet = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz' bsw@1735: local secret_purposes = { "oauth", "_other" } bsw@1735: for idx, purpose in ipairs(secret_purposes) do bsw@1735: secret_purposes[purpose] = idx bsw@1735: end bsw@1735: bsw@1735: local function random_string(length_multiplier) bsw@1735: return multirand.string( bsw@1735: secret_length * (length_multiplier or 1), bsw@1735: secret_alphabet bsw@1735: ) bsw@1735: end bsw@1735: bsw@1735: if not survey_member then bsw@1735: survey_member = SurveyMember:new() bsw@1735: survey_member.survey_id = survey.id bsw@1735: survey_member.member_id = app.session.member_id bsw@1735: end bsw@1735: bsw@1735: if skip_survey then bsw@1735: local answer_set = survey_member.answer_set bsw@1735: if answer_set then bsw@1735: survey_member.survey_answer_set_ident = nil bsw@1735: survey_member:save() bsw@1735: answer_set:destroy() bsw@1735: end bsw@1735: survey_member.rejected = 'now' bsw@1735: else bsw@1735: local answer_set = SurveyAnswerSet:new() bsw@1735: answer_set.ident = random_string() bsw@1735: answer_set.survey_id = survey.id bsw@1735: answer_set:save() bsw@1735: survey_member.survey_answer_set_ident = answer_set.ident bsw@1735: end bsw@1735: bsw@1735: survey_member:save() bsw@1735: bsw@1735: if skip_survey then bsw@1735: return "skip_survey" bsw@1735: end bsw@1735: bsw@1735: return true bsw@1735: