summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--data/vyconf.proto6
-rw-r--r--src/vyconf_client.ml9
-rw-r--r--src/vyconf_client.mli2
-rw-r--r--src/vyconf_pbt.ml59
-rw-r--r--src/vyconf_pbt.mli21
-rw-r--r--src/vyconfd.ml6
6 files changed, 94 insertions, 9 deletions
diff --git a/data/vyconf.proto b/data/vyconf.proto
index f2245aa..d989fb3 100644
--- a/data/vyconf.proto
+++ b/data/vyconf.proto
@@ -17,6 +17,10 @@ message Request {
optional int32 OnBehalfOf = 2;
}
+ message Teardown {
+ optional int32 OnBehalfOf = 1;
+ }
+
message Validate {
repeated string Path = 1;
optional OutputFormat output_format = 2;
@@ -135,7 +139,7 @@ message Request {
EnterConfigurationMode configure = 19;
ExitConfigurationMode exit_configure = 20;
Validate validate = 21;
- string teardown = 22;
+ Teardown teardown = 22;
}
}
diff --git a/src/vyconf_client.ml b/src/vyconf_client.ml
index 5cbd798..94348b2 100644
--- a/src/vyconf_client.ml
+++ b/src/vyconf_client.ml
@@ -65,6 +65,15 @@ let setup_session ?(on_behalf_of=None) client client_app =
| None -> Error "setup_session did not return a session token!") |> Lwt.return
| _ -> Error (Option.value resp.error ~default:"Unknown error") |> Lwt.return
+let teardown_session ?(on_behalf_of=None) client =
+ let id = on_behalf_of |> (function None -> None | Some x -> (Some (Int32.of_int x))) in
+ let req = Teardown {on_behalf_of=id} in
+ let%lwt resp = do_request client req in
+ match resp.status with
+ | Success -> Ok "" |> Lwt.return
+ | Fail -> Error (Option.value resp.error ~default:"") |> Lwt.return
+ | _ -> Error (Option.value resp.error ~default:"") |> Lwt.return
+
let exists client path =
let req = Exists {path=path} in
let%lwt resp = do_request client req in
diff --git a/src/vyconf_client.mli b/src/vyconf_client.mli
index ec78780..0feb063 100644
--- a/src/vyconf_client.mli
+++ b/src/vyconf_client.mli
@@ -29,6 +29,8 @@ val get_status : t -> response Lwt.t
val setup_session : ?on_behalf_of:(int option) -> t -> string -> (t, string) result Lwt.t
+val teardown_session : ?on_behalf_of:(int option) -> t -> (string, string) result Lwt.t
+
val exists : t -> string list -> (string, string) result Lwt.t
val get_value : t -> string list -> (string, string) result Lwt.t
diff --git a/src/vyconf_pbt.ml b/src/vyconf_pbt.ml
index 1e481b9..4c7fcc6 100644
--- a/src/vyconf_pbt.ml
+++ b/src/vyconf_pbt.ml
@@ -15,6 +15,10 @@ type request_setup_session = {
on_behalf_of : int32 option;
}
+type request_teardown = {
+ on_behalf_of : int32 option;
+}
+
type request_validate = {
path : string list;
output_format : request_output_format option;
@@ -131,7 +135,7 @@ type request =
| Configure of request_enter_configuration_mode
| Exit_configure
| Validate of request_validate
- | Teardown of string
+ | Teardown of request_teardown
type request_envelope = {
token : string option;
@@ -170,6 +174,12 @@ let rec default_request_setup_session
on_behalf_of;
}
+let rec default_request_teardown
+ ?on_behalf_of:((on_behalf_of:int32 option) = None)
+ () : request_teardown = {
+ on_behalf_of;
+}
+
let rec default_request_validate
?path:((path:string list) = [])
?output_format:((output_format:request_output_format option) = None)
@@ -352,6 +362,14 @@ let default_request_setup_session_mutable () : request_setup_session_mutable = {
on_behalf_of = None;
}
+type request_teardown_mutable = {
+ mutable on_behalf_of : int32 option;
+}
+
+let default_request_teardown_mutable () : request_teardown_mutable = {
+ on_behalf_of = None;
+}
+
type request_validate_mutable = {
mutable path : string list;
mutable output_format : request_output_format option;
@@ -583,6 +601,12 @@ let rec pp_request_setup_session fmt (v:request_setup_session) =
in
Pbrt.Pp.pp_brk pp_i fmt ()
+let rec pp_request_teardown fmt (v:request_teardown) =
+ let pp_i fmt () =
+ Pbrt.Pp.pp_record_field ~first:true "on_behalf_of" (Pbrt.Pp.pp_option Pbrt.Pp.pp_int32) fmt v.on_behalf_of;
+ in
+ Pbrt.Pp.pp_brk pp_i fmt ()
+
let rec pp_request_validate fmt (v:request_validate) =
let pp_i fmt () =
Pbrt.Pp.pp_record_field ~first:true "path" (Pbrt.Pp.pp_list Pbrt.Pp.pp_string) fmt v.path;
@@ -744,7 +768,7 @@ let rec pp_request fmt (v:request) =
| Configure x -> Format.fprintf fmt "@[<hv2>Configure(@,%a)@]" pp_request_enter_configuration_mode x
| Exit_configure -> Format.fprintf fmt "Exit_configure"
| Validate x -> Format.fprintf fmt "@[<hv2>Validate(@,%a)@]" pp_request_validate x
- | Teardown x -> Format.fprintf fmt "@[<hv2>Teardown(@,%a)@]" Pbrt.Pp.pp_string x
+ | Teardown x -> Format.fprintf fmt "@[<hv2>Teardown(@,%a)@]" pp_request_teardown x
let rec pp_request_envelope fmt (v:request_envelope) =
let pp_i fmt () =
@@ -806,6 +830,15 @@ let rec encode_pb_request_setup_session (v:request_setup_session) encoder =
end;
()
+let rec encode_pb_request_teardown (v:request_teardown) encoder =
+ begin match v.on_behalf_of with
+ | Some x ->
+ Pbrt.Encoder.int32_as_varint x encoder;
+ Pbrt.Encoder.key 1 Pbrt.Varint encoder;
+ | None -> ();
+ end;
+ ()
+
let rec encode_pb_request_validate (v:request_validate) encoder =
Pbrt.List_util.rev_iter_with (fun x encoder ->
Pbrt.Encoder.string x encoder;
@@ -1080,7 +1113,7 @@ let rec encode_pb_request (v:request) encoder =
Pbrt.Encoder.nested encode_pb_request_validate x encoder;
Pbrt.Encoder.key 21 Pbrt.Bytes encoder;
| Teardown x ->
- Pbrt.Encoder.string x encoder;
+ Pbrt.Encoder.nested encode_pb_request_teardown x encoder;
Pbrt.Encoder.key 22 Pbrt.Bytes encoder;
end
@@ -1176,6 +1209,24 @@ let rec decode_pb_request_setup_session d =
on_behalf_of = v.on_behalf_of;
} : request_setup_session)
+let rec decode_pb_request_teardown d =
+ let v = default_request_teardown_mutable () in
+ let continue__= ref true in
+ while !continue__ do
+ match Pbrt.Decoder.key d with
+ | None -> (
+ ); continue__ := false
+ | Some (1, Pbrt.Varint) -> begin
+ v.on_behalf_of <- Some (Pbrt.Decoder.int32_as_varint d);
+ end
+ | Some (1, pk) ->
+ Pbrt.Decoder.unexpected_payload "Message(request_teardown), field(1)" pk
+ | Some (_, payload_kind) -> Pbrt.Decoder.skip d payload_kind
+ done;
+ ({
+ on_behalf_of = v.on_behalf_of;
+ } : request_teardown)
+
let rec decode_pb_request_validate d =
let v = default_request_validate_mutable () in
let continue__= ref true in
@@ -1688,7 +1739,7 @@ let rec decode_pb_request d =
(Exit_configure : request)
end
| Some (21, _) -> (Validate (decode_pb_request_validate (Pbrt.Decoder.nested d)) : request)
- | Some (22, _) -> (Teardown (Pbrt.Decoder.string d) : request)
+ | Some (22, _) -> (Teardown (decode_pb_request_teardown (Pbrt.Decoder.nested d)) : request)
| Some (n, payload_kind) -> (
Pbrt.Decoder.skip d payload_kind;
loop ()
diff --git a/src/vyconf_pbt.mli b/src/vyconf_pbt.mli
index 2cc550f..da94655 100644
--- a/src/vyconf_pbt.mli
+++ b/src/vyconf_pbt.mli
@@ -22,6 +22,10 @@ type request_setup_session = {
on_behalf_of : int32 option;
}
+type request_teardown = {
+ on_behalf_of : int32 option;
+}
+
type request_validate = {
path : string list;
output_format : request_output_format option;
@@ -138,7 +142,7 @@ type request =
| Configure of request_enter_configuration_mode
| Exit_configure
| Validate of request_validate
- | Teardown of string
+ | Teardown of request_teardown
type request_envelope = {
token : string option;
@@ -182,6 +186,12 @@ val default_request_setup_session :
request_setup_session
(** [default_request_setup_session ()] is the default value for type [request_setup_session] *)
+val default_request_teardown :
+ ?on_behalf_of:int32 option ->
+ unit ->
+ request_teardown
+(** [default_request_teardown ()] is the default value for type [request_teardown] *)
+
val default_request_validate :
?path:string list ->
?output_format:request_output_format option ->
@@ -351,6 +361,9 @@ val pp_request_status : Format.formatter -> request_status -> unit
val pp_request_setup_session : Format.formatter -> request_setup_session -> unit
(** [pp_request_setup_session v] formats v *)
+val pp_request_teardown : Format.formatter -> request_teardown -> unit
+(** [pp_request_teardown v] formats v *)
+
val pp_request_validate : Format.formatter -> request_validate -> unit
(** [pp_request_validate v] formats v *)
@@ -438,6 +451,9 @@ val encode_pb_request_status : request_status -> Pbrt.Encoder.t -> unit
val encode_pb_request_setup_session : request_setup_session -> Pbrt.Encoder.t -> unit
(** [encode_pb_request_setup_session v encoder] encodes [v] with the given [encoder] *)
+val encode_pb_request_teardown : request_teardown -> Pbrt.Encoder.t -> unit
+(** [encode_pb_request_teardown v encoder] encodes [v] with the given [encoder] *)
+
val encode_pb_request_validate : request_validate -> Pbrt.Encoder.t -> unit
(** [encode_pb_request_validate v encoder] encodes [v] with the given [encoder] *)
@@ -525,6 +541,9 @@ val decode_pb_request_status : Pbrt.Decoder.t -> request_status
val decode_pb_request_setup_session : Pbrt.Decoder.t -> request_setup_session
(** [decode_pb_request_setup_session decoder] decodes a [request_setup_session] binary value from [decoder] *)
+val decode_pb_request_teardown : Pbrt.Decoder.t -> request_teardown
+(** [decode_pb_request_teardown decoder] decodes a [request_teardown] binary value from [decoder] *)
+
val decode_pb_request_validate : Pbrt.Decoder.t -> request_validate
(** [decode_pb_request_validate decoder] decodes a [request_validate] binary value from [decoder] *)
diff --git a/src/vyconfd.ml b/src/vyconfd.ml
index 2bb3253..a445864 100644
--- a/src/vyconfd.ml
+++ b/src/vyconfd.ml
@@ -84,10 +84,10 @@ let exit_conf_mode world token =
in Hashtbl.replace sessions token session;
response_tmpl
-let teardown_session token =
+let teardown token =
try
Hashtbl.remove sessions token;
- response_tmpl
+ {response_tmpl with status=Success}
with Not_found ->
{response_tmpl with status=Fail; error=(Some "Session not found")}
@@ -168,7 +168,7 @@ let rec handle_connection world ic oc fd () =
| _, Status -> response_tmpl
| _, Setup_session r -> setup_session world r
| None, _ -> {response_tmpl with status=Fail; output=(Some "Operation requires session token")}
- | Some t, Teardown _ -> teardown_session t
+ | Some t, Teardown _ -> teardown t
| Some t, Configure r -> enter_conf_mode r t
| Some t, Exit_configure -> exit_conf_mode world t
| Some t, Exists r -> exists world t r