Commit d703a35a authored by jan.koester's avatar jan.koester
Browse files

small fixes

parent f3186158
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -2,7 +2,7 @@ cmake_minimum_required(VERSION 3.18)

project(blogi)

SET(CMAKE_CXX_FLAGS "-fPIC -Wall")
SET(CMAKE_CXX_FLAGS "-fPIC -Wall -std=c++17")

list(APPEND CMAKE_MODULE_PATH ${CMAKE_SOURCE_DIR}/cmake)

+11 −7
Original line number Diff line number Diff line
@@ -243,21 +243,21 @@ namespace blogi {
            if(curform.getBoundary()){
                for(libhttppp::HttpForm::MultipartForm::Data *curformdat=curform.MultipartFormData.getFormData(); curformdat; curformdat=curformdat->nextData()){

                    for(libhttppp::HttpForm::MultipartForm::Data::ContentDisposition *curctdisp=curformdat->getDisposition(); curformdat; curformdat=curformdat->nextData()){
                        if (strcmp(curctdisp->getKey(), "blog_title") == 0) {
                    for(libhttppp::HttpForm::MultipartForm::Data::ContentDisposition *curctdisp=curformdat->getDisposition(); curctdisp; curctdisp=curctdisp->nextContentDisposition()){
                        if (strcmp(curctdisp->getValue(), "blog_title") == 0) {
                            title.append(curformdat->Value.data(),curformdat->Value.size());
                        }else if(strcmp(curctdisp->getKey(), "blog_descrition") == 0){
                        }else if(strcmp(curctdisp->getValue(), "blog_descrition") == 0){
                            descrition.append(curformdat->Value.data(),curformdat->Value.size());
                        }else if (strcmp(curctdisp->getKey(), "blog_tags") == 0) {
                        }else if (strcmp(curctdisp->getValue(), "blog_tags") == 0) {
                            tags.append(curformdat->Value.data(),curformdat->Value.size());
                        }
                        else if(strcmp(curctdisp->getKey(),"blog_content")==0){
                        else if(strcmp(curctdisp->getValue(),"blog_content")==0){
                            text.append(curformdat->Value.data(),curformdat->Value.size());
                        }
                    }
                }

                size_t content_id = -1;
                ssize_t content_id = -1;

                if(!text.empty() && !title.empty() && !descrition.empty()){

@@ -691,7 +691,11 @@ namespace blogi {
                std::cerr << startpos << std::endl;
                if (strcmp(curl.c_str(),Args->config->buildurl("content/tag",url,512))>0){
                    size_t len = strlen(Args->config->buildurl("content/tag/",url,512));
                    contentIdxPage(req,page,curl.substr(len,curl.length()-len).c_str(),startpos,SITELIMIT);
                    libhttppp::HttpForm dec;
                    std::vector<char> ucurl;
                    dec.urlDecode(curl.c_str()+len,curl.length()-len,ucurl);
                    ucurl.push_back('\0');
                    contentIdxPage(req,page,ucurl.data(),startpos,SITELIMIT);
                 }else{
                    contentIdxPage(req,page,nullptr,startpos,SITELIMIT);
                 }
+3 −2
Original line number Diff line number Diff line
@@ -26,6 +26,7 @@
 *******************************************************************************/

#include <string>
#include <vector>

#include <hiredis/hiredis.h>

@@ -34,14 +35,14 @@ namespace blogi {
    public:
        Store(){};
        virtual ~Store(){};
        virtual void save(const std::string key,const std::string value)=0;
        virtual void save(const std::string key,const std::vector<char> value)=0;
        virtual void load(const std::string key,std::string &value) =0;
    };

    class RedisStore : public Store {
    public:
        RedisStore(const char *host,int port,const char *password=nullptr);
        void save(const std::string key,const std::string value) override;
        void save(const std::string key,const std::vector<char> value) override;
        void load(const std::string key,std::string &value) override;
    private:
        bool reconnect();
+82 −64
Original line number Diff line number Diff line
@@ -24,7 +24,9 @@
 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 *******************************************************************************/
#include <iostream>

#include <map>
#include <uuid/uuid.h>

#include <htmlpp/html.h>
@@ -151,38 +153,49 @@ namespace blogi {
                   << "</div>";
        }

        void uploadMedia(int id,libhttppp::HttpForm::MultipartForm::Data *dat,libhttppp::HttpRequest * req, libhtmlpp::HtmlString & setdiv){
        void uploadMedia(int id,libhttppp::HttpRequest * req, libhtmlpp::HtmlString & setdiv){
            char url[512];
            std::string mediafilename,mediafile;
            std::map<std::vector<char>,std::vector<char>> media;
            libhttppp::HttpForm form;

            form.parse(req);

            if(dat){
                for (libhttppp::HttpForm::MultipartForm::Data *curformdat = dat; curformdat; curformdat = curformdat->nextData()) {
            for (libhttppp::HttpForm::MultipartForm::Data *curformdat = form.MultipartFormData.getFormData(); curformdat; curformdat = curformdat->nextData()) {
                for(libhttppp::HttpForm::MultipartForm::Data::ContentDisposition* curctdisp = curformdat->getDisposition(); curctdisp;
                    curctdisp=curctdisp->nextContentDisposition()){
                        if(curctdisp && strcmp(curctdisp->getValue(),"mediafile")==0){
                            mediafile.append(curformdat->Value.data(),curformdat->Value.size());
                        }else if(curctdisp && strcmp(curctdisp->getValue(),"mediafilename")==0){
                            mediafilename.append(curformdat->Value.data(),curformdat->Value.size());
                    std::vector<char> name;
                if(strcmp(curctdisp->getKey(),"filename")==0){
                    std::copy(curctdisp->getValue(),curctdisp->getValue()+strlen(curctdisp->getValue()),
                              std::inserter<std::vector<char>>(name,name.begin()));
                    name.push_back('\0');
                    media.insert({name,curformdat->Value});
                }
                    }
            }

                if(!mediafile.empty() && !mediafilename.empty()){
            for(const auto& [mediafilename, mediafile] : media){
                std::string ext;
                    size_t expos=mediafilename.rfind('.');
                size_t expos=std::string::npos;

                for(size_t im=mediafilename.size()-1; im > 0; --im){
                    if(mediafilename[im]=='.')
                        expos=im;
                }

                if(expos==std::string::npos){
                    libhttppp::HTTPException excep;
                    excep[libhttppp::HTTPException::Error] << "Upload media Wrong filename!";
                    throw excep;
                }

                    if( (++expos) > mediafilename.length()){
                if( (++expos) > mediafilename.size()){
                    libhttppp::HTTPException excep;
                    excep[libhttppp::HTTPException::Error] << "Upload media Wrong filename!";
                    throw excep;
                }

                    ext=mediafilename.substr(expos,mediafilename.length()-expos);
                std::copy(mediafilename.begin()+expos,mediafilename.end(),
                          std::inserter<std::string>(ext,ext.begin()));

                blogi::SQL sql;
                blogi::DBResult res;
@@ -201,7 +214,12 @@ namespace blogi {

                sql.clear();

                    sql << "INSERT INTO media_items (album_id,name) VALUES('" << id << "','"; sql.escaped(mediafilename.substr(0,expos).c_str()) << "') RETURNING id";
                std::string pname;
                std::copy(mediafilename.begin(),mediafilename.begin()+expos,
                          std::inserter<std::string>(pname,pname.begin()));


                sql << "INSERT INTO media_items (album_id,name) VALUES('" << id << "','"; sql.escaped(pname.c_str()) << "') RETURNING id";

                Args->database->exec(&sql,res);
                sql.clear();
@@ -224,7 +242,6 @@ namespace blogi {
                _store->save(cfuuid,mediafile);
            }

            }

            blogi::SQL sql,sql2;
            blogi::DBResult res,res2;
@@ -269,23 +286,22 @@ namespace blogi {
                    id=atoi(curdat->getValue());
            }

            libhttppp::HttpForm::MultipartForm::Data *dat=form.MultipartFormData.getFormData();

            for (libhttppp::HttpForm::MultipartForm::Data *curformdat = dat; curformdat; curformdat = curformdat->nextData()) {
            for (libhttppp::HttpForm::MultipartForm::Data *curformdat = form.MultipartFormData.getFormData(); curformdat; curformdat = curformdat->nextData()) {
                for(libhttppp::HttpForm::MultipartForm::Data::ContentDisposition* curctdisp = curformdat->getDisposition();
                    curctdisp; curctdisp=curctdisp->nextContentDisposition()){
                    if(curctdisp && strcmp(curctdisp->getValue(),"albumid")==0){
                    if(strcmp(curctdisp->getValue(),"albumid")==0){
                        for(size_t i =0; i<curformdat->Value.size(); ++i){
                            if(!isdigit(curformdat->Value[i])){
                            libhttppp::HTTPException excep;
                            excep[libhttppp::HTTPException::Error] << "Wrong formted Pageid!";
                            excep[libhttppp::HTTPException::Error] << "Wrong formated Pageid!";
                            throw excep;
                            }
                        }
                        std::string buf;
                        buf.resize(curformdat->Value.size());
                        std::copy(curformdat->Value.begin(),curformdat->Value.end(),buf.begin());
                        id=atoi(buf.c_str());
                        std::vector<char> buf;
                        std::copy(curformdat->Value.begin(),curformdat->Value.end(),
                                  std::inserter<std::vector<char>>(buf,buf.begin()));
                        buf.push_back('\0');
                        id=atoi(buf.data());
                    }
                }
            }
@@ -297,7 +313,7 @@ namespace blogi {
            }

            setdiv << "<div><span>View media library</span><br>";
            uploadMedia(id,dat,req,setdiv);
            uploadMedia(id,req,setdiv);
            setdiv << "</div>";
        }

@@ -324,6 +340,8 @@ namespace blogi {
                    confirmed=true;
            }

            std::cout << mid << std::endl;

            if(strncmp(req->getRequestURL()+strlen(Args->config->buildurl("settings/media/editmediatypes/",url,512)),"delmtype",8)==0){
                if(mid>=0){
                    if(confirmed){
+4 −4
Original line number Diff line number Diff line
@@ -52,16 +52,16 @@ blogi::RedisStore::RedisStore(const char *host,int port,const char *password){
    }

}
void blogi::RedisStore::save(const std::string key, const std::string value){
void blogi::RedisStore::save(const std::string key, const std::vector<char> value){
REDISSAVE:
    redisReply* reply = (redisReply*) redisCommand(_RedisCTX,"SET %s %b",key.c_str(),value.c_str(),value.length());
    if (reply && reply->type!=REDIS_REPLY_ERROR) {
    redisReply* reply = (redisReply*) redisCommand(_RedisCTX,"SET %s %b",key.c_str(),value.data(),value.size());
    if (reply && reply->type==REDIS_REPLY_ERROR) {
        if(reconnect())
            goto REDISSAVE;
    }
    freeReplyObject(reply);
    reply = (redisReply*) redisCommand(_RedisCTX, "save");
    if (reply && reply->type!=REDIS_REPLY_ERROR) {
    if (reply && reply->type==REDIS_REPLY_ERROR) {
        if(reconnect())
            goto REDISSAVE;
    }
Loading