Compare commits
2 Commits
master
...
C_Refactor
Author | SHA1 | Date | |
---|---|---|---|
93c0f6180d | |||
e3508eee23 |
4
.gitignore
vendored
4
.gitignore
vendored
@ -1 +1,5 @@
|
||||
build/
|
||||
tags
|
||||
|
||||
main
|
||||
.ycm_extra_conf.py
|
||||
|
@ -1,12 +0,0 @@
|
||||
cmake_minimum_required(VERSION 3.15)
|
||||
|
||||
set(CMAKE_CXX_STANDARD 11)
|
||||
set(CMAKE_CXX_STANDARD_REQUIRED On)
|
||||
|
||||
set(CMAKE_EXPORT_COMPILE_COMMANDS On)
|
||||
|
||||
project(teaui)
|
||||
|
||||
add_executable(teaui)
|
||||
|
||||
add_subdirectory(src)
|
10
build.sh
Executable file
10
build.sh
Executable file
@ -0,0 +1,10 @@
|
||||
#!/bin/sh
|
||||
|
||||
set -xe
|
||||
|
||||
CFLAGS="-g -Wall -Wextra $(pkg-config --cflags ncurses libcurl json-c)"
|
||||
LIBS=$(pkg-config --libs ncurses libcurl json-c)
|
||||
|
||||
gcc ${CFLAGS} -o main main.c giteaAPI.c ${LIBS}
|
||||
|
||||
ctags -R
|
90
giteaAPI.c
Normal file
90
giteaAPI.c
Normal file
@ -0,0 +1,90 @@
|
||||
#include "giteaAPI.h"
|
||||
#include <curl/curl.h>
|
||||
#include <curl/easy.h>
|
||||
#include <json-c/debug.h>
|
||||
#include <json-c/json_object.h>
|
||||
#include <string.h>
|
||||
#include <malloc.h>
|
||||
#include <json-c/json.h>
|
||||
#include <assert.h>
|
||||
|
||||
#define UNUSED(n) (void)(n)
|
||||
|
||||
struct RESPONSE response;
|
||||
|
||||
void teaui_gitea_printResponse(){
|
||||
fwrite(response.data, sizeof(char), response.size, stdout);
|
||||
}
|
||||
|
||||
int teaui_gitea_parseResponse(char* dest, enum TEAUI_GITEA_JSONPARSER type){
|
||||
char* json = malloc(response.size+1);
|
||||
memcpy(json, response.data, sizeof(char) * response.size);
|
||||
json[response.size-1] = '\0';
|
||||
json_object *parent = json_tokener_parse(json);
|
||||
json_object *child;
|
||||
|
||||
switch (type) {
|
||||
case TEAUI_GITEA_JSONPARSER_TOKEN:
|
||||
if(json_object_object_get_ex(parent, "sha1", &child)){
|
||||
strcpy(dest, json_object_get_string(child));
|
||||
return 0;
|
||||
}
|
||||
strcpy(dest, json);
|
||||
return 1;
|
||||
break;
|
||||
}
|
||||
return 1;
|
||||
}
|
||||
|
||||
size_t _teaui_gitea_saveResponse(char* ptr, size_t size, size_t nmemb, void *userdata){
|
||||
UNUSED(userdata);
|
||||
char* data = realloc(response.data, response.size + (nmemb*size));
|
||||
assert(data != NULL);
|
||||
response.data = data;
|
||||
memcpy(response.data + response.size, ptr, nmemb*size);
|
||||
response.size += size *nmemb;
|
||||
return nmemb*size;
|
||||
}
|
||||
|
||||
SESSION teaui_gitea_session(const char *instance){
|
||||
curl_global_init(0);
|
||||
CURL *handle = curl_easy_init();
|
||||
SESSION ret = {.handle=handle};
|
||||
ret.instance = malloc(sizeof(char) * (strlen(instance)+1));
|
||||
strcpy(ret.instance, instance);
|
||||
return ret;
|
||||
}
|
||||
|
||||
void teaui_gitea_cleanup(SESSION s){
|
||||
curl_global_cleanup();
|
||||
curl_easy_cleanup(s.handle);
|
||||
}
|
||||
|
||||
void teaui_gitea_auth_basic(SESSION s, const char *user, const char *pass){
|
||||
curl_easy_setopt(s.handle, CURLOPT_USERNAME, user);
|
||||
curl_easy_setopt(s.handle, CURLOPT_PASSWORD, pass);
|
||||
}
|
||||
|
||||
void teaui_gitea_auth_token(SESSION s, const char *token){
|
||||
char header[256] = "Authorization: token ";
|
||||
strcat(header, token);
|
||||
curl_easy_setopt(s.handle , CURLOPT_HEADERDATA, header);
|
||||
}
|
||||
|
||||
void teaui_gitea_auth_generateToken(SESSION s, const char * username, const char *name){
|
||||
char endpoint[1024];
|
||||
strcpy(endpoint, s.instance);
|
||||
strcat(endpoint, "/api/v1/users/");
|
||||
strcat(endpoint, username);
|
||||
strcat(endpoint, "/tokens");
|
||||
|
||||
char post_data[512] = "name=";
|
||||
strcat(post_data, name);
|
||||
|
||||
curl_easy_setopt(s.handle, CURLOPT_URL, endpoint);
|
||||
curl_easy_setopt(s.handle, CURLOPT_POSTFIELDS, post_data);
|
||||
curl_easy_setopt(s.handle, CURLOPT_WRITEFUNCTION, _teaui_gitea_saveResponse);
|
||||
curl_easy_perform(s.handle);
|
||||
curl_easy_getinfo(s.handle, CURLINFO_RESPONSE_CODE, response.status);
|
||||
return ;
|
||||
}
|
32
giteaAPI.h
Normal file
32
giteaAPI.h
Normal file
@ -0,0 +1,32 @@
|
||||
#ifndef GITEA_API_H_
|
||||
#define GITEA_API_H_
|
||||
|
||||
#include <curl/curl.h>
|
||||
|
||||
typedef struct {
|
||||
CURL* handle;
|
||||
char* instance;
|
||||
} SESSION;
|
||||
|
||||
struct RESPONSE{
|
||||
char* data;
|
||||
size_t size;
|
||||
long status;
|
||||
};
|
||||
|
||||
enum TEAUI_GITEA_JSONPARSER {
|
||||
TEAUI_GITEA_JSONPARSER_TOKEN,
|
||||
};
|
||||
|
||||
void teaui_gitea_printResponse();
|
||||
int teaui_gitea_parseResponse(char* dest, enum TEAUI_GITEA_JSONPARSER type);
|
||||
|
||||
SESSION teaui_gitea_session(const char *instance);
|
||||
void teaui_gitea_cleanup(SESSION s);
|
||||
|
||||
void teaui_gitea_auth_basic(SESSION s, const char *user, const char *pass);
|
||||
void teaui_gitea_auth_token(SESSION s, const char *token);
|
||||
|
||||
void teaui_gitea_auth_generateToken(SESSION s, const char *username, const char *name);
|
||||
|
||||
#endif /* ifndef GITEA_API_H_ */
|
40
main.c
Normal file
40
main.c
Normal file
@ -0,0 +1,40 @@
|
||||
#include <curses.h>
|
||||
#include <stdio.h>
|
||||
#include "giteaAPI.h"
|
||||
|
||||
#include <ncurses.h>
|
||||
|
||||
int main(void)
|
||||
{
|
||||
SESSION s = teaui_gitea_session("https://git.herisson.ovh");
|
||||
|
||||
#if 0
|
||||
initscr();
|
||||
start_color();
|
||||
init_pair(1, COLOR_RED, COLOR_GREEN);
|
||||
WINDOW* test = newwin(16, 9, 2, 2);
|
||||
wattron(test, COLOR_PAIR(1));
|
||||
box(test, 0, 0);
|
||||
wattroff(test, COLOR_PAIR(1));
|
||||
noecho();
|
||||
timeout(0);
|
||||
refresh();
|
||||
bool should_quit = false;
|
||||
while(!should_quit){
|
||||
wrefresh(test);
|
||||
int in = getch();
|
||||
if(in != ERR){
|
||||
switch (in) {
|
||||
case 'a':
|
||||
should_quit = true;
|
||||
break;
|
||||
case 'd':
|
||||
wattron(test, COLOR_PAIR(1));
|
||||
wprintw(test, "Hello, Dari!");
|
||||
wattroff(test, COLOR_PAIR(1));
|
||||
}
|
||||
}
|
||||
}
|
||||
endwin();
|
||||
#endif
|
||||
}
|
26
plans.md
26
plans.md
@ -11,3 +11,29 @@
|
||||
- libcurl
|
||||
- ncurses
|
||||
- a json library to find
|
||||
|
||||
## endpoints
|
||||
|
||||
### Notifications
|
||||
|
||||
- /notifications [GET, PUT]
|
||||
|
||||
### Organisations
|
||||
|
||||
- /orgs [GET]
|
||||
- /orgs/{org} [GET]
|
||||
- /orgs/{org}/repos [GET, POST]
|
||||
- /usr/orgs
|
||||
|
||||
### Issues
|
||||
|
||||
pretty much everything
|
||||
|
||||
### repository
|
||||
|
||||
- repos/{owner}/{repo} [GET, DELETE, PATCH]
|
||||
- repos/{owner}/{repo}/branches [GET, POST]
|
||||
- repos/{owner}/{repo}/branches/{branch} [GET, DELETE]
|
||||
- repos/{owner}/{repo}/pulls [POST, GET]
|
||||
- ...
|
||||
|
||||
|
@ -1,3 +0,0 @@
|
||||
target_sources(${CMAKE_PROJECT_NAME} PRIVATE
|
||||
main.cpp
|
||||
)
|
@ -1,7 +0,0 @@
|
||||
#include <ncurses.h>
|
||||
|
||||
int main(int argc, char *argv[])
|
||||
{
|
||||
printf("Hello, World!");
|
||||
return 0;
|
||||
}
|
Loading…
Reference in New Issue
Block a user