Skip to content

Commit

Permalink
Work in progress
Browse files Browse the repository at this point in the history
  • Loading branch information
ElaadF committed Dec 29, 2021
1 parent f26ad0a commit 750c5f4
Show file tree
Hide file tree
Showing 7 changed files with 61 additions and 34 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,7 @@
"elm-community/maybe-extra": "5.2.0",
"elm-community/string-extra": "4.0.1",
"jxxcarlson/elm-markdown": "10.1.0",
"jzxhuang/http-extras": "2.1.0",
"rtfeldman/elm-iso8601-date-strings": "1.1.4",
"toastal/either": "3.5.2",
"visotype/elm-dom": "1.1.3"
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ module ApiCalls exposing (..)
import DataTypes exposing (..)
import Dict
import Http exposing (..)
import Http.Detailed as Detailed
import JsonDecoder exposing (..)
import JsonEncoder exposing (..)
import Json.Decode
Expand Down Expand Up @@ -36,7 +37,7 @@ getTechniques model =
, headers = []
, url = getUrl model "techniques"
, body = emptyBody
, expect = expectJson GetTechniques ( Json.Decode.at ["data", "techniques" ] (Json.Decode.map (List.concatMap Maybe.Extra.toList) ( Json.Decode.list (Json.Decode.maybe decodeTechnique))))
, expect = Detailed.expectJson GetTechniques ( Json.Decode.at ["data", "techniques" ] (Json.Decode.map (List.concatMap Maybe.Extra.toList) ( Json.Decode.list (Json.Decode.maybe decodeTechnique))))
, timeout = Nothing
, tracker = Nothing
}
Expand All @@ -52,7 +53,7 @@ getTechniquesCategories model =
, headers = []
, url = getUrl model "techniques/categories"
, body = emptyBody
, expect = expectJson GetCategories ( Json.Decode.at ["data", "techniqueCategories" ] ( decodeCategory))
, expect = Detailed.expectJson GetCategories ( Json.Decode.at ["data", "techniqueCategories" ] ( decodeCategory))
, timeout = Nothing
, tracker = Nothing
}
Expand All @@ -68,7 +69,7 @@ getMethods model =
, headers = []
, url = getUrl model "methods"
, body = emptyBody
, expect = expectJson GetMethods ( Json.Decode.at ["data", "methods" ] ( Json.Decode.map (Dict.fromList) (Json.Decode.keyValuePairs decodeMethod) ))
, expect = Detailed.expectJson GetMethods ( Json.Decode.at ["data", "methods" ] ( Json.Decode.map (Dict.fromList) (Json.Decode.keyValuePairs decodeMethod) ))
, timeout = Nothing
, tracker = Nothing
}
Expand All @@ -84,7 +85,7 @@ saveTechnique technique creation model =
, headers = []
, url = getUrl model "techniques" ++ (if creation then "" else "/"++technique.name++"/"++technique.version)
, body = encodeTechnique technique |> jsonBody
, expect = expectJson SaveTechnique ( Json.Decode.at ["data", "techniques", "technique" ] ( decodeTechnique ))
, expect = Detailed.expectJson SaveTechnique ( Json.Decode.at ["data", "techniques", "technique" ] ( decodeTechnique ))
, timeout = Nothing
, tracker = Nothing
}
Expand All @@ -101,7 +102,7 @@ deleteTechnique technique model =
, headers = []
, url = getUrl model "techniques/" ++ technique.id.value ++ "/" ++ technique.version
, body = emptyBody
, expect = expectJson DeleteTechnique ( Json.Decode.at ["data", "techniques" ] ( decodeDeleteTechniqueResponse ))
, expect = Detailed.expectJson DeleteTechnique ( Json.Decode.at ["data", "techniques" ] ( decodeDeleteTechniqueResponse ))
, timeout = Nothing
, tracker = Nothing
}
Expand All @@ -121,7 +122,7 @@ getRessources state model =
, headers = []
, url = getUrl model url
, body = emptyBody
, expect = expectJson GetTechniqueResources ( Json.Decode.at ["data", "resources" ] ( Json.Decode.list decodeResource ))
, expect = Detailed.expectJson GetTechniqueResources ( Json.Decode.at ["data", "resources" ] ( Json.Decode.list decodeResource ))
, timeout = Nothing
, tracker = Nothing
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ import Dict exposing (Dict)
import Either exposing (Either)
import File exposing (File)
import Http exposing (Error)
import Http.Detailed
import MethodConditions exposing (..)
import Dom.DragDrop as DragDrop
import Time exposing (Posix)
Expand Down Expand Up @@ -203,13 +204,13 @@ type Mode = Introduction | TechniqueDetails Technique TechniqueState TechniqueUi
-- all events in the event loop
type Msg =
SelectTechnique (Either Technique Draft)
| GetTechniques (Result Error (List Technique))
| SaveTechnique (Result Error Technique)
| GetTechniques (Result (Http.Detailed.Error String) ( Http.Metadata, List Technique ))
| SaveTechnique (Result (Http.Detailed.Error String) ( Http.Metadata, Technique ))
| UpdateTechnique Technique
| DeleteTechnique (Result Error TechniqueId)
| GetTechniqueResources (Result Error (List Resource))
| GetCategories (Result Error TechniqueCategory)
| GetMethods (Result Error (Dict String Method))
| DeleteTechnique (Result (Http.Detailed.Error String) ( Http.Metadata, TechniqueId ))
| GetTechniqueResources (Result (Http.Detailed.Error String) ( Http.Metadata, List Resource ))
| GetCategories (Result (Http.Detailed.Error String) ( Http.Metadata, TechniqueCategory ))
| GetMethods (Result (Http.Detailed.Error String) ( Http.Metadata, (Dict String Method) ))
| UIMethodAction CallId MethodCallUiInfo
| UIBlockAction CallId MethodBlockUiInfo
| RemoveMethod CallId
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,10 +11,11 @@ import Either exposing (Either(..))
import File
import File.Download
import File.Select
import Http.Detailed as Detailed
import Json.Decode exposing ( Value )
import Json.Encode
import JsonEncoder exposing (encodeDraft, encodeExportTechnique, encodeTechnique)
import JsonDecoder exposing (decodeDraft, decodeTechnique)
import JsonDecoder exposing (decodeDraft, decodeErrorDetails, decodeTechnique)
import List.Extra
import Maybe.Extra
import MethodConditions exposing (..)
Expand Down Expand Up @@ -51,23 +52,28 @@ port readUrl : (String -> msg) -> Sub msg


-- utility to write a understandable debug message from a get response
debugHttpErr : Http.Error -> String
debugHttpErr : Detailed.Error String -> String
debugHttpErr error =
case error of
Http.BadUrl url ->
Detailed.BadUrl url ->
"The URL " ++ url ++ " was invalid"
Http.Timeout ->
Detailed.Timeout ->
"Unable to reach the server, try again"
Http.NetworkError ->
Detailed.NetworkError ->
"Unable to reach the server, check your network connection"
Http.BadStatus 500 ->
"The server had a problem, try again later"
Http.BadStatus 400 ->
"Verify your information and try again"
Http.BadStatus _ ->
"Unknown error"
Http.BadBody errorMessage ->
errorMessage
Detailed.BadStatus metadata body ->
let
(title, errors) = decodeErrorDetails body
in
title ++ "\n" ++ errors
--Http.BadStatus 500 ->
-- "The server had a problem, try again later"
--Http.BadStatus 400 ->
-- "Verify your information and try again"
--Http.BadStatus _ ->
-- "Unknown error"
Detailed.BadBody metadata body msg ->
msg

updateResourcesResponse : Model -> Msg
updateResourcesResponse model =
Expand Down Expand Up @@ -203,12 +209,12 @@ update msg model =

-- UI high level stuff: list/filter techniques, create/import/select technique

GetCategories (Ok categories) ->
GetCategories (Ok (metadata, categories)) ->
({ model | categories = categories}, Cmd.none )
GetCategories (Err _) ->
( model , Cmd.none )

GetTechniques (Ok techniques) ->
GetTechniques (Ok (metadata, techniques)) ->
({ model | techniques = techniques}, getUrl () )
GetTechniques (Err err) ->
( model , errorNotification ("Error when getting techniques: " ++ debugHttpErr err ) )
Expand Down Expand Up @@ -292,7 +298,7 @@ update msg model =
in
updatedStoreTechnique newModel

SaveTechnique (Ok technique) ->
SaveTechnique (Ok (metadata, technique)) ->
let
techniques = if (List.any (.id >> (==) technique.id) model.techniques) then
List.Extra.updateIf (.id >> (==) technique.id ) (always technique) model.techniques
Expand Down Expand Up @@ -324,7 +330,7 @@ update msg model =
update (CallApi (saveTechnique t True)) { model | mode = TechniqueDetails t o ui }
_ -> (model, Cmd.none)

DeleteTechnique (Ok techniqueId) ->
DeleteTechnique (Ok (metadata, techniqueId)) ->
case model.mode of
TechniqueDetails t (Edit _) _ ->
let
Expand Down Expand Up @@ -514,7 +520,7 @@ update msg model =
in
(model, cmd)

GetTechniqueResources (Ok resources) ->
GetTechniqueResources (Ok (metadata, resources)) ->
let
mode = case model.mode of
TechniqueDetails t s ui ->
Expand All @@ -530,7 +536,7 @@ update msg model =
OpenMethods ->
( { model | genericMethodsOpen = True } , Cmd.none )

GetMethods (Ok methods) ->
GetMethods (Ok (metadata, methods)) ->
({ model | methods = methods}, getTechniques model )

GetMethods (Err err) ->
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,8 +5,10 @@ import DataTypes exposing (..)
import Iso8601
import Json.Decode exposing (..)
import Json.Decode.Pipeline exposing (..)
import List exposing (drop, head)
import MethodConditions exposing (..)
import AgentValueParser exposing (..)
import String exposing (join, split)

decodeTechniqueParameter : Decoder TechniqueParameter
decodeTechniqueParameter =
Expand Down Expand Up @@ -202,3 +204,17 @@ decodeDraft =
|> optional "origin" (maybe decodeTechnique) Nothing
|> required "id" string
|> required "date" Iso8601.decoder)

decodeErrorDetails : String -> (String, String)
decodeErrorDetails json =
let
errorMsg = decodeString (Json.Decode.at ["errorDetails"] string) json
msg = case errorMsg of
Ok s -> s
Err e -> "fail to process errorDetails"
errors = split "<-" msg
title = head errors
in
case title of
Nothing -> ("" , "")
Just s -> (s , (join " \n " (drop 1 (List.map (\err -> "\t" ++ err) errors))))
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ module ViewTechnique exposing (..)
import ApiCalls exposing (..)
import DataTypes exposing (..)
import Dict exposing (Dict)
import Http exposing (Metadata)
import Html exposing (..)
import Html.Attributes exposing (..)
import Html.Events exposing (..)
Expand Down Expand Up @@ -55,6 +56,7 @@ isValid ui =
showTechnique : Model -> Technique -> TechniqueState -> TechniqueUiInfo -> Html Msg
showTechnique model technique origin ui =
let
fakeMetadata = Http.Metadata "internal-elm-call" 500 "call from elm app" Dict.empty
activeTabClass = (\tab -> "ui-tabs-tab " ++ (if ui.tab == tab then "active" else ""))
creation = case origin of
Creation _ -> True
Expand All @@ -65,8 +67,8 @@ showTechnique model technique origin ui =
Creation _ -> False
Clone t _ -> t == technique
deleteAction = case origin of
Creation id -> DeleteTechnique (Ok id)
Clone _ id -> DeleteTechnique (Ok id)
Creation id -> DeleteTechnique (Ok (fakeMetadata, id))
Clone _ id -> DeleteTechnique (Ok (fakeMetadata, id))
Edit _ -> OpenDeletionPopup technique
topButtons = [ li [] [
a [ class "action-success", disabled creation , onClick (GenerateId (\s -> CloneTechnique technique (TechniqueId s))) ] [
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@
padding : 0;
margin : 0;
z-index:999999;

word-break: break-word;
}

.rudder-notification > li{
Expand Down

0 comments on commit 750c5f4

Please sign in to comment.