Skip to content
Snippets Groups Projects
Commit 83e79352 authored by Julian's avatar Julian
Browse files

Merge remote-tracking branch 'origin/frontend' into frontend

parents 36d6912c b6e05f09
No related branches found
No related tags found
1 merge request!2Frontend
......@@ -6,7 +6,7 @@ import SharedSecretWrapper from "../shared_secret/SharedSecretWrapper.vue";
</script>
<template>
<shared-secret-wrapper>
<shared-secret-wrapper @correctSharedSecret="handleCorrectSharedSecret">
<v-container>
<inline-c-r-u-d-list
:headers="headers"
......@@ -84,12 +84,21 @@ export default {
apollo: {
groups: {
query: helperGroups,
skip() {
return this.skipQueries
},
},
gradeSets: {
query: helperGradeSets,
skip() {
return this.skipQueries
},
},
effortTypes: {
query: helperEffortTypes,
skip() {
return this.skipQueries
},
},
},
data() {
......@@ -126,7 +135,16 @@ export default {
effortTypes: [],
groups: [],
gradeSets: [],
skipQueries: true,
};
},
methods: {
handleCorrectSharedSecret() {
this.skipQueries = false;
this.$apollo.queries.groups.refresh();
this.$apollo.queries.gradeSets.refresh();
this.$apollo.queries.effortTypes.refresh();
},
},
};
</script>
\ No newline at end of file
......@@ -41,6 +41,7 @@
initial: true,
};
},
emits: ["correctSharedSecret"],
methods: {
submitSharedSecret() {
this.showError = false;
......@@ -51,8 +52,11 @@
sharedSecret: this.sharedSecret,
},
}).then((data) => {
this.sharedSecretStatus = data.data.submitSharedSecret.correct;
if (!this.sharedSecretStatus) {
this.showError = true;
}
this.loading = false;
this.$apollo.queries.sharedSecretStatus.refetch();
});
},
},
......@@ -69,14 +73,19 @@
sharedSecretStatus: {
query: gqlSharedSecretStatus,
result ({ data, loading, networkStatus }) {
if (!loading && !data?.sharedSecretStatus && !this.initial) {
this.showError = true;
} else if (!loading) {
if (!loading) {
this.initial = false;
}
},
},
},
watch: {
sharedSecretStatus(newValue) {
if (newValue) {
this.$emit("correctSharedSecret");
}
},
},
};
</script>
......
mutation gqlSubmitSharedSecret($sharedSecret: String!) {
submitSharedSecret(sharedSecret: $sharedSecret) {
ok
correct
}
}
......
import rules
from rules import is_superuser
from aleksis.core.util.predicates import has_person
from .util.predicates import has_shared_secret
# View 2FA (shared secret) protected pages
protected_page_predicate = has_person & has_shared_secret
rules.add_perm("maka.protected_page_rule", protected_page_predicate)
......@@ -60,8 +60,8 @@ class Mutation(graphene.ObjectType):
delete_effort_types = EffortTypeBatchDeleteMutation.Field()
update_effort_types = EffortTypeBatchPatchMutation.Field()
create_rankings = EffortBatchCreateMutation.Field()
delete_rankings = EffortBatchDeleteMutation.Field()
update_rankings = EffortBatchPatchMutation.Field()
create_efforts = EffortBatchCreateMutation.Field()
delete_efforts = EffortBatchDeleteMutation.Field()
update_efforts = EffortBatchPatchMutation.Field()
submit_shared_secret = SubmitSharedSecretMutation.Field()
......@@ -11,12 +11,14 @@ class SubmitSharedSecretMutation(graphene.Mutation):
class Arguments:
shared_secret = graphene.String(required=True) # noqa
ok = graphene.Boolean()
correct = graphene.Boolean()
@classmethod
def mutate(cls, root, info, shared_secret): # noqa
info.context.session["maka_shared_secret_correct"] = check_password(shared_secret, get_site_preferences()["maka__shared_secret"])
return cls(ok=True)
if not info.context.session.get("maka_shared_secret_correct"):
info.context.session["maka_shared_secret_correct"] = check_password(shared_secret, get_site_preferences()["maka__shared_secret"])
return cls(correct=info.context.session.get("maka_shared_secret_correct"))
return cls(correct=True)
class SharedSecretObjectType(DjangoObjectType):
......
from django.contrib.auth.models import User
from django.http import HttpRequest
from rules import predicate
@predicate
def has_shared_secret(user: User, request: HttpRequest) -> bool:
return request.session.get("maka_shared_secret_correct")
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