Web proxy server til Support af support spørgsmål

Alt omkring ubuntudanmark.dk
lath
Indlæg: 5095
Tilmeldt: 27. apr 2008, 02:16
IRC nickname: lars_t_h
Geografisk sted: Fyn

Web proxy server til Support af support spørgsmål

Indlæg af lath »

I tråden "Hvorfor dette opgraderingshype" startet af thj01 er der kommet et inspirerende indlæg af Jimmyfj.

Fra dele af det indlæg er jeg blevet inspireret til en idé til et program som jeg skitserer længere nede her i indlægget.

Den interessante del af det jimmyfj skriver i sit indlæg er følgende:
Jeg er ikke sikker på, om Ubuntudanmark.dk/forum har nogle tråde i de enkelte subfora, hvor der bliver informeret om, hvad staff og supportere kræver, at du selv skal have gjort, inden du starter en support-tråd op. Rigtig mange af de ting der spørges om vil kunne løses med en simpel google-søgning.

Man bør IKKE søge support på forum, uden selv at have prøvet at finde en løsning først.

Når man kigger på de forskellige tråde på forum, er det rigtig nemt at se, at OP ikke har forsøgt at løse problemet selv, evt. via google. Alle os med erfaring kan se det, alene ud fra spørgsmålet. Det gælder, naturligvis ikke alle, men mange brugere på forum synes at have den tanke, at det er nemmere at lade en af nørderne give en løsningen. Problemet er bare det, at det lærer man ikke en hujende fis af.

Indlægget har det her link: https://ubuntudanmark.dk/forum/viewtopic.php?f=1&t=18023#p122087

Indledning
Jeg har i nogen tid spekuleret over om det er muligt at hjælpe vores brugere noget bedre.

En hjælp til selvhjælp er at når brugeren poster et indlæg i forum, så foretages en fuldautomatisk indsamling af support oplysninger, der hjælper forum medlemmer, det leverer supporten til at besvare brugerens support spørgsmål.

Kravspecifikation
eller "Hvad er formålet med programmet?"
eller "Hvad skal programmet kunne, sådan mere præcist?"

Programmet er fuldautomatisk - autonomt - hvilket vil sige at det automatisk aktiverer sig selv, når brugerens browser sender en bestemt HTTP forespørgsel

Programmet er en web proxy server.
Billede
Scaleable vector Graphics (SVG) billede:
Billede
Billede er fra Wikipedia artiklen: http://en.wikipedia.org/wiki/Proxy_server

Web proxy serveren er installeret på brugerens computer, således at brugeren frit kan vælge den favorit browser brugeren ønsker at bruge.
Web proxy serveren virker også med en simpel tekst browser. Dermed kan der ydes support selv fra en tekst terminal, hvis den grafiske bruger grænseflade / desktop ikke virker af en eller anden årsag.

Den eneste indstilling der skal foretages er at brugeren skal angive at browseren skal forbinde sig til web proxy serveren, når den vil have fat i en web side. Når indstillingen er foretaget virker brugen af en web proxy server transparent for browseren, og dermed også for brugeren.

Ved tekst browsere, der muligvis ikke kan bruge en web proxy server, kan man gøre brug af at web proxy serveren kan kontaktes direkte med et bestemt link.
Web proxy serveren vil i det tilfælde præsentere brugeren for en række knapper, hvorfra brugeren nemt kan starte et support spørgsmål i Ubuntudanmarks forum.

Knapperne er til hurtig start af et support spørgsmål. I det tilfælde hvor knapperne bruges vil alle links i en webside blive modificeret, så browseren altid spørger web proxy serveren i stedet for direkte at spørge websitets web server. Dette virker ikke hvis javascript indætter links i web siden. Javascript links virker kun på browsere, som altid kontakter web proxy serveren, fordi browseren er konfigureret til at bruge web proxy serveren.

Det følgende citat er informationer om forum softwarens normale opførsel, og dermed ikke en del af kravspecifikationen:
Forum softwaren redirecter normalt til login siden, hvis brugeren ikke er logget ind på det tidspunkt, hvor brugerens browser kontakter forum softwaren. Efter at korrekte credentials er angivet vil brugeren sendt til forum softwarens post et nyt indlæg on-line editor.


Web proxy serverens opførsel over for links:
  • alle links, hvor SSL krypteret kommunikation kommer igennem web proxy serveren helt umodificeret. Det gælder også hvis der postes et indlæg, fordi kommunikationen er krypteret imellem browseren og websitets webserver, og kommunikationen dermed er ulæselig for web proxy serveren.
  • at lade links der ikke starter med:

    Kode: Vælg alt

    ubuntudanmark.dk/forum

    ... passere som de er.
    Dvs. at trafik der ikke er det nævnte link, bliver kopieret råt og umodificeret ud til webserveren, og webserverens svar bliver også kopieret råt og umodificeret tilbage til browseren.
    Det bemærkes at request headers fra browseren, der er beregnet til web proxy serveren, ikke videresendes. Dette er normal adfærd for en web proxy server.
  • For links der starter med det førnævnte link, som er:

    Kode: Vælg alt

    ubuntudanmark.dk/forum

    ... så vil den link-tekst aktivere en forum algoritme, der analyser hvad programmet nu skal gøre.

phpBB3 forum algoritmen i programmet kigger efter de her ting, efter at den har set at linket starter med :

Kode: Vælg alt

ubuntudanmark.dk/forum

  • Hvis der står:

    Kode: Vælg alt

    /posting.php
    ... så er brugeren ved at skrive et indlæg.
    • Er der variabel der hedder mode, med værdien post i query strengen (=det der står efter '?'-tegnet i linket som ubuntudanmark.dk web serveren modtager), dvs:

      Kode: Vælg alt

      mode=post

      ... så er brugeren i gang med at skrive det 1. indlæg i en helt ny tråd.
    • Er der et inline link (et inline link starter med #), der hedder preview
      ... så har brugeren trykket på Vis prøve knappen mindst 1 gang, og brugeren er stadig i gang med at skrive det første indlæg til en ny tråd.
    • Når brugeren trykker på Udfør knappen så begynder alt det automatiske at ske.

Når brugeren trykker på Udfør knappen, når et indlæg er skrevet færdigt (eller rettet) sker der følgende:
  • Først analyseres det om der allerede er indsat resultatet fra kommandoer i indlægget.
  • Hvis indlægget postes i et forum, hvor der ikke må nogen kommandoer, så videresendes indlægget bare som det er til Web serveren.
  • Til et indlæg i et forum hvor kommandoer kan køres, og
    hvis der ikke er indsat et resultat fra kommandoer, så køres denne 4 trins wizard.
    • I alle trin skal brugeren have mulighed for at:
      Sende indlægget umodificeret. Det betyder at ekstra oplysninger ikke er tilføjet bliver sat ind i indlægget.
    • Trin 1:
      • En webside sendes til browseren, hvor brugeren oplyses om at web proxy serveren har opfanget at et indlæg på Ubuntu Danmark er blevet postet.
      • I trin 1 bliver brugeren bedt om at trykke på trykke på en næste > knap, hvis brugeren vil vedhæfte ekstra oplysninger til indlægget.
      • Brugeren skal meget direkte advares om at informationer opsamles.
      • Brugeren skal også oplyses om at det er muligt at fortryde at vedhæfte ekstra indsamlede oplysninger.
    • Trin 2:
      • I trin 2 skal brugeren skal brugeren advares om at der skal afgive kodeord en sudo kommando for at køre et eller flere scripts eller programmer der kræver denne rettighed før de virker.
      • Web proxy serveren analyserer selv bash scripts eller bash kommandoer for om en af nøgleordene su, *sudo er til stede i et script, og viser så advarselen, hvis et script indeholder disse ord.
      • Scriptene bliver også vist - og det bliver vist med en tydelig rød markering - hvor dette nøgleord blev fundet.
      • Hvis sudo eller su CLI terminal kommandoen blev fundet:
        Der skrives en kort instruktion i brugen af sudo/su kommandoen, når kodeordet skal indtastes.
      • Bemærk dog at bliver nøgleordene fundet i en kommentar (som begynder med #-tegnet i bash shell scripts/kommandoer) bliver ignoreret, da kommentarer også bliver ignoreret af bash kommando fortolkeren.
      • En Næste knap lader brugeren gå til trin 3.
    • Trin 3:
      • I trin 3 bliver kommandoer kørt.
      • Trin 3 sender et javascript til asynkron kommunikation med web proxy serveren.
      • Javascriptet opdaterer løbende web siden uden at siden skal genindlæses:
        • En progress bar viser hvor langt man er nået
        • Når en kommando køres vises kommandoen øverst og resultatet under kommandoen.
        • Skal mere end 1 kommando køres vises den næste kommando over den forrige kommando og den forrige kommandos resultat.
        • For mere end 1 kommando, så vises kommandoer over hinanden i omvendt kronologisk orden.
        • Kommandoer vises ikke ved siden af hinanden.
      • En Næste knap lader brugeren gå til trin 4.
    • Trin 4:
      • I trin 4 vises alle kommandoer og de tilhørende resultater, men nu vises de i kronologisk orden i stedet for i omvendt kronologisk orden.
      • Dette trin er sidste trin, så der er ikke en Næste knap, men i stedet en Færdig! Send oplysningerne sammen med dit indlæg knap.
      • Kommandoer vises under hinanden.
      • Kommandoer vises ikke ved siden af hinanden.
  • Til et indlæg i et forum hvor kommandoer kan køres, og
    hvis der er indsat et resultat fra kommandoer, så køres denne 4 trins wizard.
    • Trin 1 - 4 er de samme, med følgende ekstra tilføjelser:
      • Trin 1 og Trin 2:
        Ingen tilføjelser
      • Trin 3:
        • Programmet tager indlæget og klipper delen af indlægget der indeholder kommandoer og resultater ud, og deler den op i en kommando og resultatet.
        • Så køres kommandoerne igen, og ud over resultatet vises vises også forskellen fra sidste gang kommandoen blev kørt
        • Det er uddata fra diff kommandoen. Diff kommandoen kan finde ud af forskellen imellem 2 tekstfiler - også selv om noget har rykker sig op eller ned flere linjer.
      • Trin 4:
        Diff uddata vises også, og tilføjes også til indlægget, hvis brugeren vælger at sende sit indlæg ind med ekstra oplysninger.

Identifikation af hvilke kommandoer der skal køres (incl ingen kommandoer):
  • Web proxy serveren analyser f variablens værdi der sættes til et heltal af forum softwaren.
  • Heltallet bestemmer under hvilket forum et indlæg skal postes i, og det tal kan mappes til en liste af kommandoer eller scripts der skal køres. Ingen kommando eller scripts er naturligvis også en mulighed.

--- slut på kravspecifikation ---

Udvikling af softwaren
Da jeg selv foreslår softwaren, må det nødvendigvis også være mig der analyserer, designer, udvikler/implementer, tester, og vedligeholder softwaren.

Kort sagt så bliver jeg upstream på det program - folk er velkommen til at bidrage til software projektet. Der vil nok være brug for oversættere, så programmet kan få indbygget L10N (og I18N).

---

  • Hvad synes du?
  • Mangler der noget?
  • Har du ændringsforslag?
    - som jeg muligvis vil acceptere, afvise, eller skrive muligvis/måske om, da det er mig der skal skrive softwaren

/Lars

Edit: 20131023, 22:31 Ny titel, gammel titel var: "Idé til vores egen PPA: Support af support spørgsmål"
Senest rettet af lath 23. okt 2013, 22:31, rettet i alt 2 gange.
Jeg er Software ingeniør (Diplomingeniør) i Informationsteknologi og indlejede systemer, hvor indlejrede systemer er computer (microcontroller) + elektronik i for eksempel et TV, en router, en vaskemaskine og den slags
thj01
Indlæg: 2667
Tilmeldt: 21. nov 2006, 10:06
Geografisk sted: Fredericia

Re: Idé til vores egen PPA: Support af support spørgsmål

Indlæg af thj01 »

Er det korrekt forstået at du ønsker at udvikle en mekanisme der "sniffer" oplysninger fra brugerens PC ved et enkelt klik??
Forfatter til Ubuntuguiden: http://www.vidas.dk/guides/ubuntuguiden.html

Kører LTS udgaverne.

"It's always easy if you know how to do it."
lath
Indlæg: 5095
Tilmeldt: 27. apr 2008, 02:16
IRC nickname: lars_t_h
Geografisk sted: Fyn

Re: Idé til vores egen PPA: Support af support spørgsmål

Indlæg af lath »

thj01 skrev:Er det korrekt forstået at du ønsker at udvikle en mekanisme der "sniffer" oplysninger fra brugerens PC ved et enkelt klik??


Med mindst 5 klik - ikke kun 1 klik. Det er lidt a la en Windows installation af et program: næste, næste, næste, udfør.
Man må også sige at det er ret nemt at bruge for brugeren, da mange har set den slags før.

For dem der muligvis har misforstået et eller andet: Oplysninger sendes naturligvis kun ind til der hvor supporten foregår - ubuntudanmark.dk/forum - og kun hvis bruger aktivt vælger at gøre det (opt in).

F.eks. ved netværkssupport kan bunken af kommandoer der vedrører at gå opdagelse på PCI bussen og USB busser efter netværkshardware nemt tilføjes.
Ligeledes et stykke over hardware: IP adresser for netværksinterfaces, routing konfiguration med route -n med mere.

/Lars

Edit, 20131023 18:08 Typo rettet
Senest rettet af lath 23. okt 2013, 18:08, rettet i alt 1 gang.
Jeg er Software ingeniør (Diplomingeniør) i Informationsteknologi og indlejede systemer, hvor indlejrede systemer er computer (microcontroller) + elektronik i for eksempel et TV, en router, en vaskemaskine og den slags
thj01
Indlæg: 2667
Tilmeldt: 21. nov 2006, 10:06
Geografisk sted: Fredericia

Re: Idé til vores egen PPA: Support af support spørgsmål

Indlæg af thj01 »

Jeg synes faktisk at det er smart!

Vil det blive uploaded som filer eller vil det blive indsat i "Code" felter i indlægget - hvor det sidste er det optimale da brugeren tydeligt kan se hvad der bliver lagt op?
Forfatter til Ubuntuguiden: http://www.vidas.dk/guides/ubuntuguiden.html

Kører LTS udgaverne.

"It's always easy if you know how to do it."
lath
Indlæg: 5095
Tilmeldt: 27. apr 2008, 02:16
IRC nickname: lars_t_h
Geografisk sted: Fyn

Re: Idé til vores egen PPA: Support af support spørgsmål

Indlæg af lath »

thj01 skrev:Jeg synes faktisk at det er smart!

Vil det blive uploaded som filer eller vil det blive indsat i "Code" felter i indlægget - hvor det sidste er det optimale da brugeren tydeligt kan se hvad der bliver lagt op?


Det bliver indsat i det felt som brugeren normalt skriver sit indlæg i. BB-kode kan nemt laves.

Jeg laver en MIME (email tilføjelse) agtig mekanisme - den er BASE64 encoded, så anden web software ikke betrager den som en MIME .

Den MIME-agtige mekanisme gør det nemt at identificere det der er maskin genereret. Formålet med dem er at jeg senere kan lave diffs.

MIME mekanismen bruges også i HTTP protokollen når den overfører web sider, billeder, javascript filer og så videre over den samme HTTP forbindelse - det hedder HTTP Pipelining, og alle de store browsere bruger det, fordi det får ting til at gå meget hurtigere.

For MIME tilføjelser i emails og HTTP pipelining i en dataoverførsel til henholdsvis en email klient eller en browser er det sådan at der står noget helt bestemt lige før MIME tilføjelsen, samt noget bestemt lige efter MIME tilføjelsen.

/Lars
Jeg er Software ingeniør (Diplomingeniør) i Informationsteknologi og indlejede systemer, hvor indlejrede systemer er computer (microcontroller) + elektronik i for eksempel et TV, en router, en vaskemaskine og den slags
lath
Indlæg: 5095
Tilmeldt: 27. apr 2008, 02:16
IRC nickname: lars_t_h
Geografisk sted: Fyn

Plugins: Support af support spørgsmål

Indlæg af lath »

Jeg vil i fremtiden gør brug af plugins, da det gør programmet mere fleksibelt.

Det er min intention først at lave det udelukkende til ubuntudanmark.dk/forum til at starte med, og have funktioner der returnerer hårdt kodet data
Kald til funktioner der returnere hårdt kodet data er nemme at lave om senere, så de i stedet bruger plugins.
Funktionerne bor i en eneste kildekode, da det er praktisk at have relaterede funktioner i den samme kildekode fil..

Senere kommer der web site plugins til programmet der beskriver hvordan web proxy serveren skal kommunikere med websites on-line forum software.

Bagefter kan alle andre tilføje website plugins så de kan få den samme support. Et sådan web site plugin er i sin egen pakke - den skal så installeres sig i et specielt website plugin mappe for at programmet kan finde det.

Forum software software er også kandidat til at blive generaliseret ud i et forum plugin.
I et forum plugin finder man forum algoritmen (kig i kravspecifikation)
Dermed kan den måde kommunikation foregår på med forum softwaren foregå på mere end en måde.


Plugins kan jeg godt finde på at lave som C kode og så køre koden igennem en C compiler. Årsagen er at det er en slags en gang for alle oversættelse, i stedet de sædvanlige tekst filer der parses hver eneste gang programmet startes.
Tag det som mit ringe bidrag til en kortere boot tid - lib*.so er software biblioteker, og de indlæses i RAM stort set sådan som de er, så det går meget meget hurtigt.

Kommer der C kode der er oversat til konfigurations- lib*.so filer, så kommer der hjælpe programmer der skriver konfigurationen ud som C kode ud fra svaret på nogle spørgsmål hjælpeprogrammet stiller, og derefter startes en C compiler, der leverer det færdige resultat i en lib*.so fil, som er klar til brug.

/Lars
Jeg er Software ingeniør (Diplomingeniør) i Informationsteknologi og indlejede systemer, hvor indlejrede systemer er computer (microcontroller) + elektronik i for eksempel et TV, en router, en vaskemaskine og den slags
lath
Indlæg: 5095
Tilmeldt: 27. apr 2008, 02:16
IRC nickname: lars_t_h
Geografisk sted: Fyn

Re: Idé til vores egen PPA: Support af support spørgsmål

Indlæg af lath »

Lige nu er jeg i gang med at kigge på hvad andre har lavet og hvordan de har lavet softwaren.
Det er for at blive inspireret, og undgå at genopfinde hjulet/den dybe tallerken igen (hint, hint: proudly NOT invented here).

En reduceret udgave af et fork af programmet kunne blive basis for udvikling af web proxy serveren.
For tiden har jeg kig på:
  • Privoxy
    • Privoxy is a non-caching web proxy with advanced filtering capabilities for enhancing privacy, modifying web page data and HTTP headers, controlling access, and removing ads and other obnoxious Internet junk.
    • Privoxy has a flexible configuration and can be customized to suit individual needs and tastes.
    • It has application for both stand-alone systems and multi-user networks.
    • http://www.privoxy.org/
  • Mongoose- en webserver der kun fylder 130 KB (0,13 MB) i C kildekode, og som kørbart program fylder det bare 40 KB (0,04 MB) - hvilket er næsten ingenting på selv en langsom desktop eller laptop computer.
    http://en.wikipedia.org/wiki/Mongoose_%28web_server%29 , https://github.com/valenok/mongoose/
    Jeg kan godt lide at der er kun 1 C header fil og kun 1 C kildekode fil - det gør den meget nem at bruge - incl at gøre koden til en del af web proxy serveren. :)
  • Lighttpd
    Lighttpd bruges af meget store websites såsom YouTube og Wikipedia, så det program er battle-testet ude på det vilde internet.
    http://www.lighttpd.net/


Jeg har i øvrigt lige sat et fint billede af hvordan kommunikationen imelem en website web server, web proxy serveren, og brugerens browser ser ud i det første indlæg.

/Lars
Jeg er Software ingeniør (Diplomingeniør) i Informationsteknologi og indlejede systemer, hvor indlejrede systemer er computer (microcontroller) + elektronik i for eksempel et TV, en router, en vaskemaskine og den slags
lath
Indlæg: 5095
Tilmeldt: 27. apr 2008, 02:16
IRC nickname: lars_t_h
Geografisk sted: Fyn

Web proxy serveren: Browser konfigurationsfiler

Indlæg af lath »

Fandt den her Wikipedia side: http://en.wikipedia.org/wiki/Proxy_auto-config

Man kan bruge en protokol der hedder WPAD (Web Proxy Autodiscovery Protocol).
Den er ikke så god at bruge fordi:
In 2013, researchers began warning about the security risks of proxy auto-config.(2).
The threat involves using a PAC to redirect the victim's browser traffic to an attacker-controlled server instead.


Dermed skal bruger selv indsætte en link til wpad.dat (javascript-)filen inde i browser proxy konfigurationsafsnit, som browseren skal hente fra web proxy serveren.
I dansk sproget Firefox på min Ubuntu maskine sker det i:
  • Menuen: Rediger > Præferencer.
  • Firefox præferencer dialogboksen åbnes
  • vælg Avanceret - Den er placeret yderste til venstre, øverst i præferencer
  • Vælg fanebladet Netværk, hvis det ikke allerede er valgt.
  • Ud for teksten Forbindelse med underteksten Konfigurer hvordan Firefox forbinder til internettet er der en knap, hvor der står Indstillinger ... Tryk på den knap.
  • Forbindelsesindstillinger dialogboksen åbnes.
  • Der er en lang liste af valgmuligheder. Sandsynligvis er indstillingen lige nu Ingen Proxy
  • Vælg i listen punktet der hedder: Automatisk proxy-konfigurations-URL
  • Skriv det her i tekstfeltet:

    Kode: Vælg alt

    http://127.0.0.1:61725/wpad.dat
  • Tryk på OK knappen i Forbindelsesindstillinger dialogboksen
  • Forbindelsesindstillingerdialogboksen lukkes af Firefox.
  • Tryk på Luk knappen i Firefox præferencer dialogboksen.
  • Firefox præferencer dialogboksenbliver lukket af Firefox
  • Du er nu færdig med at konfigurere web proxy server konfigurationen i Firefox

Der er også mulighed for en system wide konfiguration i selve Ubuntu, som alle programmer så vil kunne benytte sig af (såfremt de selvfølgelig er programmeret til at kunne kontakte en web proxy server).
I Firefox kan man så i stedet for konfiguration med en wpad.dat fil i stedet bruge indstillingen der hedder Brug systemets proxy indstillinger i Forbindelsesindstillingerdialogboksen.

Snedigt nok, så kan man i sådan en javascript wpad.dat fil fortælle browseren at den kun skal kontakte web proxy serveren, hvis hostnavnet er ubuntudanmark.dk, tilmed får man også url adressen med ned i javascript funktionen, så man kan finde ud af om det er et link i forum, samt om det er posting.php der kontaktes i forum.
I alle andre tilfælde fortæller javascript funktionen browseren at den skal køre uden om web proxy serveren.
wpad.dat javascriptet bliver kørt hver eneste gang browseren har brug for at hente noget.

Eksempel på indholdet af sådan af en fil, som naturligvis skal justeres automatisk, når programmet senere kommer til at bruge plugins:

Kode: Vælg alt

function FindProxyForURL(url, host) {
    //Everything to and from the ubuntudanmark.dk web server should go thrugh the web proxy server
    if (shExpMatch(host, "*.ubuntudanmark.dk"))
    {
        port_number = 5 * 12345; // port_number == 61725
       
        /*The DIRECT directive added after the PROXY directive, is for the emergency case, 
            where the web proxy server does not start for some reason, or because port number 'port_number'
            is already in use by another program. */
        return "PROXY 127.0.0.1:" + port_number.toString() + "; DIRECT";
    }
    else return "DIRECT";
}


Note til mig selv: MIME typen der sendes til browseren bør være:

Kode: Vælg alt

application/x-ns-proxy-autoconfig
, evt.

Kode: Vælg alt

application/x-javascript-config

Den første er nok det bedste valg. Årsagen står på wikipedia siden: http://en.wikipedia.org/wiki/Proxy_auto-config#The_PAC_File

/Lars
Jeg er Software ingeniør (Diplomingeniør) i Informationsteknologi og indlejede systemer, hvor indlejrede systemer er computer (microcontroller) + elektronik i for eksempel et TV, en router, en vaskemaskine og den slags