about summary refs log tree commit diff stats
path: root/html
Commit message (Expand)AuthorAgeFilesLines
* 4478Kartik Agaram2018-08-0439-4726/+3420
* 4447Kartik Agaram2018-07-27136-16726/+22049
* 4245 - fix example1.mu to actually runKartik Agaram2018-05-131-2/+6
* 4244Kartik Agaram2018-05-124-1070/+1005
* 4243Kartik Agaram2018-05-1218-928/+932
* 4242 - get rid of refcounts entirelyKartik Agaram2018-05-1220-1776/+1215
* 4239Kartik Agaram2018-05-08139-1030/+1045
* 4230Kartik K. Agaram2018-03-161-49/+47
* 4228Kartik K. Agaram2018-03-1533-3057/+3508
* 4209Kartik K. Agaram2018-02-1813-5286/+5323
* 4200Kartik K. Agaram2018-01-2754-2869/+2869
* 4199Kartik K. Agaram2018-01-25138-20904/+19978
* 4178Kartik K. Agaram2017-12-311-21/+19
* 4176Kartik K. Agaram2017-12-311-1/+1
* 4168Kartik K. Agaram2017-12-301-52/+52
* 4167 - show square colors in chessboard appKartik K. Agaram2017-12-271-399/+409
* 4166Kartik K. Agaram2017-12-271-10/+10
* 4165Kartik K. Agaram2017-12-2738-298/+298
* 4164Kartik K. Agaram2017-12-2713-37/+38
* 4163Kartik K. Agaram2017-12-241-1/+1
* 4162Kartik K. Agaram2017-12-2216-310/+285
* 4161Kartik K. Agaram2017-12-15135-1475/+1520
* 4157Kartik K. Agaram2017-12-091-31/+31
* 4156Kartik K. Agaram2017-12-071-1/+1
* 4155Kartik K. Agaram2017-12-0767-6049/+6317
* 4135Kartik K. Agaram2017-12-031-1/+1
* 4134 - 'input' = 'ingredient'Kartik K. Agaram2017-12-0383-1048/+1105
* 4133Kartik K. Agaram2017-11-255-146/+171
* 4123Kartik K. Agaram2017-11-161-24/+14
* 4122Kartik K. Agaram2017-11-1513-1242/+1266
* 4118Kartik K. Agaram2017-11-061-291/+292
* 4117 - done with delimited continuationsKartik K. Agaram2017-11-068-833/+973
* 4113Kartik K. Agaram2017-11-051-288/+291
* 4112Kartik K. Agaram2017-11-051-16/+12
* 4110 - add continuations to docsKartik K. Agaram2017-11-054-0/+363
* 4109Kartik K. Agaram2017-11-0541-1091/+1222
* 4102Kartik K. Agaram2017-11-0154-4738/+4816
* 4085 - done with first cut of the SubX VMKartik K. Agaram2017-10-182-3/+146
* 4084Kartik K. Agaram2017-10-183-95/+94
* 4083Kartik K. Agaram2017-10-182-1/+60
* 4082Kartik K. Agaram2017-10-182-50/+56
* 4081Kartik K. Agaram2017-10-181-222/+218
* 4080Kartik K. Agaram2017-10-181-13/+19
* 4079Kartik K. Agaram2017-10-183-26/+101
* 4078Kartik K. Agaram2017-10-176-449/+451
* 4077Kartik K. Agaram2017-10-175-32/+32
* 4072Kartik K. Agaram2017-10-166-68/+667
* 4069Kartik K. Agaram2017-10-154-221/+303
* 4068Kartik K. Agaram2017-10-151-3/+3
* 4067Kartik K. Agaram2017-10-153-3/+92
 
package main

import (
	"fmt"
	"log"
	"net/http"

	"github.com/getwtxt/registry"
)

// Requests to apiEndpointPOSTHandler are passed off to this
// function. apiPostUser then fetches the twtxt data, then if
// it's an individual user's file, adds it. If it's registry
// output, it scrapes the users/urls/statuses from the remote
// registry before adding each user to the local cache.
func apiPostUser(w http.ResponseWriter, r *http.Request) {
	if err := r.ParseForm(); err != nil {
		log400(w, r, "Error Parsing Values: "+err.Error())
		return
	}

	nick := r.FormValue("nickname")
	urls := r.FormValue("url")
	if nick == "" || urls == "" {
		log400(w, r, "Nickname or URL missing")
		return
	}

	uip := getIPFromCtx(r.Context())

	out, remoteRegistry, err := registry.GetTwtxt(urls)
	if err != nil {
		log400(w, r, "Error Fetching twtxt Data: "+err.Error())
		return
	}

	if remoteRegistry {
		remoteRegistries.Mu.Lock()
		remoteRegistries.List = append(remoteRegistries.List, urls)
		remoteRegistries.Mu.Unlock()

		if err := twtxtCache.CrawlRemoteRegistry(urls); err != nil {
			log400(w, r, "Error Crawling Remote Registry: "+err.Error())
			return
		}
		log200(r)
		return
	}

	statuses, err := registry.ParseUserTwtxt(out, nick, urls)
	if err != nil {
		log.Printf("Error Parsing User Data: %v\n", err)
	}

	if err := twtxtCache.AddUser(nick, urls, uip, statuses); err != nil {
		log400(w, r, "Error Adding User to Cache: "+err.Error())
		return
	}

	log200(r)
	_, err = w.Write([]byte(fmt.Sprintf("200 OK\n")))
	if err != nil {
		log.Printf("%v\n", err)
	}
}